#3: Very close to working, but not quite!
This commit is contained in:
parent
f2c39f9017
commit
7442673cbf
13 changed files with 160 additions and 88 deletions
|
|
@ -8,32 +8,32 @@
|
|||
(testing "identification of edges."
|
||||
(is (edge? {:start (vertex 0.0 0.0 0.0)
|
||||
:end (vertex 3 4 0.0)}) "It is.")
|
||||
(is (not (edge? {:start {:y 0.0 :z 0.0 :id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :id 'bar}})) "Start lacks :x key")
|
||||
(is (not (edge? {:start {:x nil :y 0.0 :z 0.0 :id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :id 'bar}})) "Start lacks :x value")
|
||||
(is (not (edge? {:begin {:x nil :y 0.0 :z 0.0 :id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :id 'bar}})) "Lacks start key")
|
||||
(is (not (edge? {:start {:x nil :y 0.0 :z 0.0 :id 'foo}
|
||||
:finish {:x 3 :y 4 :z 0.0 :id 'bar}})) "Lacks end key")
|
||||
(is (not (edge? {:start {:x "zero" :y 0.0 :z 0.0 :id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :id 'bar}})) "Value of x in start is not a number")
|
||||
(is (not (edge? {:start {:y 0.0 :z 0.0 :walkmap.id/id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}})) "Start lacks :x key")
|
||||
(is (not (edge? {:start {:x nil :y 0.0 :z 0.0 :walkmap.id/id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}})) "Start lacks :x value")
|
||||
(is (not (edge? {:begin {:x nil :y 0.0 :z 0.0 :walkmap.id/id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}})) "Lacks start key")
|
||||
(is (not (edge? {:start {:x nil :y 0.0 :z 0.0 :walkmap.id/id 'foo}
|
||||
:finish {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}})) "Lacks end key")
|
||||
(is (not (edge? {:start {:x "zero" :y 0.0 :z 0.0 :walkmap.id/id 'foo}
|
||||
:end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}})) "Value of x in start is not a number")
|
||||
(is (false? (edge? "I am not an edge")) "Edge mustbe a map.")))
|
||||
|
||||
(deftest collinear-test
|
||||
(testing "collinearity"
|
||||
(is (collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 3.0 :y 4.0 :z 0.0 :id 'bar}}
|
||||
{:start {:x 3.0 :y 4.0 :z 0.0 :id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :id 'bar}})
|
||||
(is (collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 3.0 :y 4.0 :z 0.0 :walkmap.id/id 'bar}}
|
||||
{:start {:x 3.0 :y 4.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :walkmap.id/id 'bar}})
|
||||
"Should be")
|
||||
(is (not
|
||||
(collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 3 :y 4 :z 0.0 :id 'bar}}
|
||||
{:start {:x 1.0 :y 2.0 :z 3.5 :id 'foo} :end {:x 4.0 :y 6.0 :z 3.5 :id 'bar}}))
|
||||
(collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}}
|
||||
{:start {:x 1.0 :y 2.0 :z 3.5 :walkmap.id/id 'foo} :end {:x 4.0 :y 6.0 :z 3.5 :walkmap.id/id 'bar}}))
|
||||
"Should not be!")
|
||||
(is (collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 3.0 :y 4.0 :z 0.0 :id 'bar}}
|
||||
{:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :id 'bar}})
|
||||
(is (collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 3.0 :y 4.0 :z 0.0 :walkmap.id/id 'bar}}
|
||||
{:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :walkmap.id/id 'bar}})
|
||||
"Edge case: same start location")
|
||||
(is (collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :id 'bar}}
|
||||
{:start {:x 3.0 :y 4.0 :z 0.0 :id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :id 'bar}})
|
||||
(is (collinear? {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :walkmap.id/id 'bar}}
|
||||
{:start {:x 3.0 :y 4.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 9.0 :y 12.0 :z 0.0 :walkmap.id/id 'bar}})
|
||||
"Edge case: same end location")
|
||||
))
|
||||
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
|
||||
(deftest length-test
|
||||
(testing "length of an edge"
|
||||
(is (= (length {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 3.0 :y 4.0 :z 0.0 :id 'bar}}) 5.0))))
|
||||
(is (= (length {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 3.0 :y 4.0 :z 0.0 :walkmap.id/id 'bar}}) 5.0))))
|
||||
|
||||
(deftest minimad-test
|
||||
(testing "finding minimum and maximum coordinates of edges."
|
||||
|
|
@ -98,12 +98,12 @@
|
|||
|
||||
(deftest parallel-test
|
||||
(testing "parallelism"
|
||||
(is (parallel? {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 3 :y 4 :z 0.0 :id 'bar}}
|
||||
{:start {:x 1.0 :y 2.0 :z 3.5 :id 'foo} :end {:x 4.0 :y 6.0 :z 3.5 :id 'bar}})
|
||||
(is (parallel? {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}}
|
||||
{:start {:x 1.0 :y 2.0 :z 3.5 :walkmap.id/id 'foo} :end {:x 4.0 :y 6.0 :z 3.5 :walkmap.id/id 'bar}})
|
||||
"Should be")
|
||||
(is (not
|
||||
(parallel? {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 3 :y 4 :z 0.0 :id 'bar}}
|
||||
{:start {:x 1.0 :y 2.0 :z 3.5 :id 'foo} :end {:x 4.0 :y 6.0 :z 3.49 :id 'bar}}))
|
||||
(parallel? {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}}
|
||||
{:start {:x 1.0 :y 2.0 :z 3.5 :walkmap.id/id 'foo} :end {:x 4.0 :y 6.0 :z 3.49 :walkmap.id/id 'bar}}))
|
||||
"Should not be!")))
|
||||
|
||||
(deftest overlaps2d-test
|
||||
|
|
@ -114,8 +114,8 @@
|
|||
(deftest unit-vector-test
|
||||
(testing "deriving the unit vector"
|
||||
(is (=
|
||||
(unit-vector {:start {:x 0.0 :y 0.0 :z 0.0 :id 'foo} :end {:x 3 :y 4 :z 0.0 :id 'bar}})
|
||||
(unit-vector {:start {:x 0.0 :y 0.0 :z 0.0 :walkmap.id/id 'foo} :end {:x 3 :y 4 :z 0.0 :walkmap.id/id 'bar}})
|
||||
{:x 0.6, :y 0.8, :z 0.0}))
|
||||
(is (=
|
||||
(unit-vector {:start {:x 1.0 :y 2.0 :z 3.5 :id 'foo} :end {:x 4.0 :y 6.0 :z 3.5 :id 'bar}})
|
||||
(unit-vector {:start {:x 1.0 :y 2.0 :z 3.5 :walkmap.id/id 'foo} :end {:x 4.0 :y 6.0 :z 3.5 :walkmap.id/id 'bar}})
|
||||
{:x 0.6, :y 0.8, :z 0.0}))))
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@
|
|||
(is (=ish 0 0.0) "Tricky conrer case!")
|
||||
(is (=ish :foo :foo) "Fails over to plain old equals for non-numbers.")
|
||||
(is (=ish 6 5 10000) "If tolerance is wide enough, anything can be equal.")
|
||||
(is (=ish "hello" "goodbye" 10000) "Well, except non-numbers, of course.")))
|
||||
(is (not (=ish "hello" "goodbye" 10000)) "Well, except non-numbers, of course.")))
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
(deftest canonicalise-test
|
||||
(testing "Canonicalisation of objects read from STL: vertices."
|
||||
(is (vertex? (canonicalise {:x 3.0, :y 1.0, :z 1.0}))
|
||||
"Vertex: should have an `:id` and `:kind` = `:vertex`.")
|
||||
"Vertex: should have an `:walkmap.id/id` and `:kind` = `:vertex`.")
|
||||
(is (= (:x (canonicalise {:x 3.0, :y 1.0, :z 1.0})) 3.0)
|
||||
"`:x` value should be unchanged.")
|
||||
(is (= (:y (canonicalise {:x 3.0, :y 1.0, :z 1.0})) 1.0)
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
:abc 0}
|
||||
p' (canonicalise p)]
|
||||
(is (polygon? p')
|
||||
"Polygon: should have an `:id` and `:kind` = `:polygon`.")
|
||||
"Polygon: should have an `:walkmap.id/id` and `:kind` = `:polygon`.")
|
||||
(is (= (count (:vertices p)) (count (:vertices p')))
|
||||
"Number of vertices should not change")
|
||||
(map
|
||||
|
|
@ -93,4 +93,4 @@
|
|||
{:x 51.0, :y 20.0, :z 1.0}],
|
||||
:abc 0}]}
|
||||
stl' (canonicalise stl)]
|
||||
(is (stl? stl') "Stl: should have an `:id` and `:kind` = `:stl`."))))
|
||||
(is (stl? stl') "Stl: should have an `:walkmap.id/id` and `:kind` = `:stl`."))))
|
||||
|
|
|
|||
|
|
@ -4,32 +4,32 @@
|
|||
|
||||
(deftest tag-tests
|
||||
(testing "Tagging"
|
||||
(is (set? (:walkmap.tag/tags (tag {} :foo :bar :ban :froboz)))
|
||||
(is (set? (:walkmap.tag/tags (tag {:kind :test-obj} :foo :bar :ban :froboz)))
|
||||
"The value of `:walkmap.tag/tags` should be a set.")
|
||||
(is (= (count (:walkmap.tag/tags (tag {} :foo :bar :ban :froboz))) 4)
|
||||
(is (= (count (:walkmap.tag/tags (tag {:kind :test-obj} :foo :bar :ban :froboz))) 4)
|
||||
"All the tags passed should be added.")
|
||||
(is (:walkmap.tag/tags (tag {} :foo :bar :ban :froboz) :ban)
|
||||
(is (:walkmap.tag/tags (tag {:kind :test-obj} :foo :bar :ban :froboz) :ban)
|
||||
"`:ban` should be present in the set, and, as it is a set, it
|
||||
should be valid to apply it to a keyword.")
|
||||
(is (not ((:walkmap.tag/tags (tag {} :foo :bar :ban :froboz)) :cornflakes))
|
||||
(is (not ((:walkmap.tag/tags (tag {:kind :test-obj} :foo :bar :ban :froboz)) :cornflakes))
|
||||
"`:cornflakes should not be present.")
|
||||
(is (true? (tagged? (tag {} :foo :bar :ban :froboz) :bar))
|
||||
(is (true? (tagged? (tag {:kind :test-obj} :foo :bar :ban :froboz) :bar))
|
||||
"`tagged?` should return an explicit `true`, not any other value.")
|
||||
(is (tagged? (tag {} :foo :bar :ban :froboz) :bar :froboz)
|
||||
(is (tagged? (tag {:kind :test-obj} :foo :bar :ban :froboz) :bar :froboz)
|
||||
"We should be able to test for the presence of more than one tag")
|
||||
(is (false? (tagged? {} :foo))
|
||||
(is (false? (tagged? {:kind :test-obj} :foo))
|
||||
"A missing `:walkmap.tag/tags` should not cause an error.")
|
||||
(is (= (tagged? (tag {} :foo :bar :ban :froboz) :bar :cornflakes) false)
|
||||
(is (= (tagged? (tag {:kind :test-obj} :foo :bar :ban :froboz) :bar :cornflakes) false)
|
||||
"If any of the queried tags is missing, false should be returned")
|
||||
(is (tagged? (tag (tag {} :foo) :bar) :foo :bar)
|
||||
(is (tagged? (tag (tag {:kind :test-obj} :foo) :bar) :foo :bar)
|
||||
"We should be able to add tags to an already tagged object")
|
||||
(is (false? (tagged? (tag {} :foo :bar) :cornflakes))
|
||||
(is (false? (tagged? (tag {:kind :test-obj} :foo :bar) :cornflakes))
|
||||
"`tagged?` should return an explicit `false` if a queried tag is missing.")
|
||||
(is (= (tags (tag {} :foo)) #{:foo})
|
||||
(is (= (tags (tag {:kind :test-obj} :foo)) #{:foo})
|
||||
"`tags` should return the tags on the object, if any.")
|
||||
(is (every? nil? (map #(tags %) [1 :one "one" [:one] {:one 1}]))
|
||||
"Things which don't have tags don't have tags, and that's not a problem.")
|
||||
(let [object (tag {} :foo :bar :ban :froboz)]
|
||||
(let [object (tag {:kind :test-obj} :foo :bar :ban :froboz)]
|
||||
(is (= (untag object :cornflakes) object)
|
||||
"Removing a missing tag should have no effect.")
|
||||
(is (tagged? (untag object :foo) :bar :ban :froboz)
|
||||
|
|
@ -42,13 +42,13 @@
|
|||
"An exception should be thrown if `object` is not a map: `tagged?`.")
|
||||
(is (thrown? IllegalArgumentException (untag [] :foo))
|
||||
"An exception should be thrown if `object` is not a map: `untag`.")
|
||||
(is (thrown? IllegalArgumentException (tag {} :foo "bar" :ban))
|
||||
(is (thrown? IllegalArgumentException (tag {:kind :test-obj} :foo "bar" :ban))
|
||||
"An exception should be thrown if any of `tags` is not a keyword: `tag`.")
|
||||
(is (thrown? IllegalArgumentException (tagged? {} :foo "bar" :ban))
|
||||
(is (thrown? IllegalArgumentException (tagged? {:kind :test-obj} :foo "bar" :ban))
|
||||
"An exception should be thrown if any of `tags` is not a keyword: `tagged?`.")
|
||||
(is (thrown? IllegalArgumentException (untag {} :foo "bar" :ban))
|
||||
(is (thrown? IllegalArgumentException (untag {:kind :test-obj} :foo "bar" :ban))
|
||||
"An exception should be thrown if any of `tags` is not a keywordp: `untag`.")
|
||||
(let [o (tag {} :foo '(:bar :ban) :froboz)]
|
||||
(let [o (tag {:kind :test-obj} :foo '(:bar :ban) :froboz)]
|
||||
(is (tagged? o :ban :bar :foo :froboz)
|
||||
"It's now allowed to include lists of tags in the arg list for `tag`."))))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue