start of protocol for discrete value ranges
This commit is contained in:
53
test/challenge/discrete_value_range_test.clj
Normal file
53
test/challenge/discrete_value_range_test.clj
Normal file
@@ -0,0 +1,53 @@
|
||||
(ns challenge.discrete-value-range-test
|
||||
(:require
|
||||
[clojure.test :refer [deftest testing is]]
|
||||
[challenge.discrete-value-range :as range]))
|
||||
|
||||
(deftype IntInclusiveDiscreteValueRange
|
||||
[^int start ^int end]
|
||||
range/DiscreteValueRange
|
||||
(abuts [_this other]
|
||||
(or (= 1 (abs (- start (.end other))))
|
||||
(= 1 (abs (- end (.start other))))))
|
||||
(value-before [__this]
|
||||
(dec start))
|
||||
(value-after [_this]
|
||||
(inc end))
|
||||
(start [_this]
|
||||
start)
|
||||
(end [_this]
|
||||
end)
|
||||
|
||||
Object
|
||||
(toString [_this]
|
||||
(str start ".." end))
|
||||
(equals [_this other]
|
||||
(and (= start (.start other))
|
||||
(= end (.end other)))))
|
||||
|
||||
(defn int-range-inclusive [start end]
|
||||
(assert (<= start end))
|
||||
(->IntInclusiveDiscreteValueRange start end))
|
||||
|
||||
(deftest integer-ranges-sanity-test
|
||||
(testing "value equality"
|
||||
(is (= (int-range-inclusive 0 1)
|
||||
(int-range-inclusive 0 1))))
|
||||
|
||||
(testing "abuts"
|
||||
(is (= true (range/abuts (int-range-inclusive 0 1)
|
||||
(int-range-inclusive 2 3))))
|
||||
(is (= true (range/abuts (int-range-inclusive 1 1)
|
||||
(int-range-inclusive 2 3))))
|
||||
(is (= true (range/abuts (int-range-inclusive 4 7)
|
||||
(int-range-inclusive 2 3))))
|
||||
(is (= false (range/abuts (int-range-inclusive 4 7)
|
||||
(int-range-inclusive 1 2)))))
|
||||
(testing "value-before"
|
||||
(is (= 0 (range/value-before (int-range-inclusive 1 8)))))
|
||||
(testing "value-after"
|
||||
(is (= 9 (range/value-after (int-range-inclusive 1 8)))))
|
||||
(testing "start"
|
||||
(is (= 1 (range/start (int-range-inclusive 1 8)))))
|
||||
(testing "end"
|
||||
(is (= 8 (range/end (int-range-inclusive 1 8))))))
|
||||
Reference in New Issue
Block a user