All tests pass again, with much more safety.

This commit is contained in:
Simon Brooke 2019-06-26 10:51:08 +01:00
parent 9d2b6da1cc
commit dfd5728e57
2 changed files with 36 additions and 5 deletions

View file

@ -32,17 +32,18 @@
([x & axes]
(and
(map? x)
(number? (:dimensions x))
(pos? (:dimensions x))
(keyword? (:coord x))
(= (:coord x) (first axes))
(if
(rest axes)
(empty? (rest axes))
(= (:content x) :data)
(and
(= (:content x) (rest axes))
(every?
sparse-array?
(map #(x %) (filter integer? (keys x)))))
(= (:content x) :data)))))
(map #(x %) (filter integer? (keys x)))))))))
(defn put
"Return a sparse array like this `array` but with this `value` at these

View file

@ -16,8 +16,38 @@
:coord :y,
:content :data,
3 "goodbye"}}))
(is-not (sparse-array? []))
(is-not (sparse-array? "hello"))
(is (= (sparse-array? []) false))
(is (= (sparse-array? "hello") false))
(is (=
(sparse-array?
(dissoc (make-sparse-array :x :y :z) :dimensions))
false)
"All mandatory keywords must be present: dimensions")
(is (=
(sparse-array?
(dissoc (make-sparse-array :x :y :z) :coord))
false)
"All mandatory keywords must be present: coord")
(is (=
(sparse-array?
(dissoc (make-sparse-array :x :y :z) :content))
false)
"All mandatory keywords must be present: content")
(is (=
(sparse-array? {:dimensions 2,
:coord :x,
:content '(:y),
3 {:dimensions 1,
:coord :y,
:content :data,
4 "hello"},
4 {:dimensions 1,
:coord :y,
:content :data,
3 "goodbye"}
5 :foo})
false)
"Can't have data in a non-data layer")
))
(deftest put-and-get