2020-04-29 11:39:15 +03:00
|
|
|
(load "Test.carp")
|
|
|
|
(use Test)
|
2020-05-02 15:18:14 +03:00
|
|
|
(use StaticArray)
|
2020-04-29 11:39:15 +03:00
|
|
|
|
2020-05-03 19:02:28 +03:00
|
|
|
(defn inc-ref [x] (+ @x 1))
|
|
|
|
|
2020-04-29 11:39:15 +03:00
|
|
|
(deftest test
|
|
|
|
|
2020-05-04 14:11:50 +03:00
|
|
|
(let [arr $[1 2 4]]
|
|
|
|
(assert-equal test
|
|
|
|
$[2 4 8]
|
|
|
|
(do
|
|
|
|
(map! arr &(fn [val] (* @val 2)))
|
|
|
|
arr)
|
|
|
|
"map! works as expected"))
|
|
|
|
|
|
|
|
(let [arr $[1 2 3]]
|
|
|
|
(assert-equal test
|
|
|
|
$[3 2 1]
|
|
|
|
(do
|
|
|
|
(reverse! arr)
|
|
|
|
arr)
|
|
|
|
"reverse! works as expected"))
|
2020-05-03 17:35:33 +03:00
|
|
|
|
2020-04-29 11:39:15 +03:00
|
|
|
(assert-true test
|
|
|
|
(= $[1 2 3] $[1 2 3])
|
|
|
|
"= works as expected I")
|
|
|
|
|
|
|
|
(assert-false test
|
|
|
|
(= $[1 2 3] $[1 2 3 4 5])
|
|
|
|
"= works as expected II")
|
|
|
|
|
|
|
|
(assert-false test
|
|
|
|
(= $[1 1 1] $[0 0 0])
|
|
|
|
"= works as expected III")
|
|
|
|
|
2020-04-29 11:54:41 +03:00
|
|
|
(assert-equal test
|
|
|
|
5
|
|
|
|
(let [a $[0 1 2 3 4 5 6 7 8 9]]
|
|
|
|
@(unsafe-nth a 5))
|
|
|
|
"unsafe-nth works as expected")
|
|
|
|
|
2020-05-04 14:11:50 +03:00
|
|
|
(assert-equal test
|
|
|
|
&[4 5 6]
|
|
|
|
&(let [nested $[[1 2 3]
|
|
|
|
[4 5 6]
|
|
|
|
[7 8 9]]]
|
|
|
|
@(unsafe-nth nested 1))
|
|
|
|
"unsafe-nth works as expected with heap allocated elements")
|
2020-04-29 11:54:41 +03:00
|
|
|
|
2020-05-02 15:18:14 +03:00
|
|
|
(assert-equal test
|
|
|
|
10
|
|
|
|
(let [arr $[2 2 2 2]]
|
|
|
|
(reduce
|
|
|
|
&(fn [acc val] (+ acc @val))
|
|
|
|
2
|
|
|
|
arr))
|
|
|
|
"reduce works as expected")
|
|
|
|
|
2020-05-03 16:18:41 +03:00
|
|
|
(assert-equal test
|
|
|
|
true
|
|
|
|
(empty? (the (Ref (StaticArray Int)) $[]))
|
|
|
|
"empty? works as expected I")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
false
|
|
|
|
(empty? $[1])
|
|
|
|
"empty? works as expected II")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
true
|
|
|
|
(any? &(fn [x] (= 0 @x)) $[0 1 2 3])
|
|
|
|
"any? works as expected I")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
false
|
|
|
|
(any? &(fn [x] (= 0 @x)) $[1 2 3 4])
|
|
|
|
"any? works as expected II")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
true
|
|
|
|
(all? &(fn [x] (< 0 @x)) $[1 2 3])
|
|
|
|
"all? works as expected I")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
false
|
|
|
|
(all? &(fn [x] (< 0 @x)) $[0 1 2])
|
2020-05-03 16:35:30 +03:00
|
|
|
"all? works as expected II")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just 3)
|
|
|
|
&(find &(fn [x] (= 3 @x)) $[0 1 2 3])
|
|
|
|
"find works as expected I")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Nothing)
|
|
|
|
&(find &(fn [x] (= 4 @x)) $[0 1 2 3])
|
|
|
|
"find works as expected II")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Nothing)
|
|
|
|
&(find-index &(fn [i] (Int.even? @i)) $[1 3 5])
|
|
|
|
"find-index works I")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just 1)
|
|
|
|
&(find-index &(fn [i] (Int.even? @i)) $[1 8 5])
|
2020-05-03 17:00:15 +03:00
|
|
|
"find-index works II")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
1
|
|
|
|
(unsafe-first $[1 2 3])
|
|
|
|
"unsafe-first works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just 1)
|
|
|
|
&(first $[1 2 3])
|
|
|
|
"first works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(the (Maybe Int) (Maybe.Nothing))
|
|
|
|
&(first $[])
|
|
|
|
"first works as expected on empty array")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
\c
|
|
|
|
(unsafe-last $[\a \b \c])
|
|
|
|
"unsafe-last works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just \c)
|
|
|
|
&(last $[\a \b \c])
|
|
|
|
"last works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(the (Maybe Char) (Maybe.Nothing))
|
|
|
|
&(last $[])
|
2020-05-03 17:15:29 +03:00
|
|
|
"last works as expected on empty array")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just 10)
|
|
|
|
&(maximum $[8 10 9])
|
|
|
|
"maximum works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just (Pair.init 2 1))
|
|
|
|
&(maximum $[(Pair.init 1 3) (Pair.init 2 1) (Pair.init 2 0)])
|
|
|
|
"maximum works on pairs")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just 1)
|
|
|
|
&(minimum $[3 1 2])
|
|
|
|
"minimum works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just (Pair.init 1 3))
|
|
|
|
&(minimum $[(Pair.init 1 3) (Pair.init 2 1) (Pair.init 2 0)])
|
2020-05-03 19:02:28 +03:00
|
|
|
"minimum works on pairs")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
55
|
|
|
|
(sum $[1 2 3 4 5 6 7 8 9 10])
|
|
|
|
"sum works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just 3)
|
|
|
|
&(index-of $[1 2 3 4] &4)
|
|
|
|
"index-of works as expected when element is in the array")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Nothing)
|
|
|
|
&(index-of $[1 2 3 4] &7)
|
|
|
|
"index-of works as expected when element is not in the array")
|
2020-05-03 17:00:15 +03:00
|
|
|
|
2020-05-03 19:02:28 +03:00
|
|
|
(assert-equal test
|
|
|
|
2
|
|
|
|
(element-count $[1 4 3 4] &4)
|
|
|
|
"element-count works as expected")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
2
|
|
|
|
(predicate-count $[1 8 5 10 3] &(fn [i] (Int.even? @i)))
|
|
|
|
"predicate-count works")
|
|
|
|
|
2020-05-04 14:11:50 +03:00
|
|
|
(let [arr $[1 2]]
|
|
|
|
(assert-equal test
|
|
|
|
$[1 3]
|
|
|
|
(do
|
|
|
|
(aupdate! arr 1 &inc-ref)
|
|
|
|
arr)
|
|
|
|
"aupdate! works as expected"))
|
|
|
|
|
|
|
|
(let [arr $[1 2]]
|
|
|
|
(assert-equal test
|
|
|
|
$[2 1]
|
|
|
|
(do
|
|
|
|
(StaticArray.swap! arr 0 1)
|
|
|
|
arr)
|
|
|
|
"swap! works as expected"))
|
2020-05-03 19:27:58 +03:00
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Nothing)
|
|
|
|
&(nth $[0 1 2] 3)
|
|
|
|
"nth works as expected I")
|
|
|
|
|
|
|
|
(assert-equal test
|
|
|
|
&(Maybe.Just 0)
|
|
|
|
&(nth $[0 1 2] 0)
|
|
|
|
"nth works as expected II")
|
|
|
|
|
|
|
|
(assert-true test
|
|
|
|
(contains? $[0 1 2] &1)
|
|
|
|
"contains? works as expected I")
|
|
|
|
|
|
|
|
(assert-false test
|
|
|
|
(contains? $[0 1 2] &100)
|
|
|
|
"contains? works as expected II"))
|