Carp/test/array.carp
2018-06-01 16:40:14 +02:00

137 lines
4.6 KiB
Plaintext

(use Array)
(load "Test.carp")
(use Test)
(defn nested []
[[1 2 3]
[4 5 6]
[7 8 9]])
(defn excl [x] (StringCopy.append x @"!"))
(defn excl-ref [x] (StringCopy.append @x @"!"))
(defn inc-ref [x] (+ @x 1))
(defn make-zero [] 0)
(defn make-idx [i] i)
(defn main []
(let [a (range 0 9 1)
b (Array.replicate 5 "Hi")]
(with-test test
(assert-true test
(= &[1 2 3] &[1 2 3])
"= works as expected")
(assert-false test
(= &[1 2 3] &[1 2 3 4])
"= works as expected")
(assert-false test
(= &[1 2 3] &[1 2 34])
"= works as expected")
(assert-equal test
&[0 0 0 0]
&(replicate 4 &0)
"replicate works as expected")
(assert-equal test
&[0 0 0 0]
&(repeat 4 make-zero)
"repeat works as expected")
(assert-equal test
&[0 1 2 3]
&(repeat-indexed 4 make-idx)
"repeat-indexed works as expected")
(assert-equal test
1
(first &[1 2 3])
"first works as expected")
(assert-equal test
\c
(last &[\a \b \c])
"last works as expected")
(assert-equal test
&[3 2 1]
&(reverse [1 2 3])
"reverse works as expected")
(assert-equal test
10
(maximum &(range 1 10 1))
"maximum works as expected")
(assert-equal test
1
(minimum &(range 1 10 1))
"minimum works as expected")
(assert-equal test
55
(sum &(range 1 10 1))
"sum works as expected")
(assert-equal test
&[2 3]
&(subarray &(range 1 10 1) 1 3)
"subarray works as expected")
(assert-equal test
&[1 2 3]
&(prefix-array &(range 1 10 1) 3)
"prefix-array works as expected")
(assert-equal test
&[8 9 10]
&(suffix-array &(range 1 10 1) 7)
"suffix-array works as expected")
(assert-equal test
5
@(nth &a 5)
"nth works as expected")
(assert-equal test
&[1 2 3]
(nth &(nested) 0)
"nth works as expected")
(assert-equal test
&[10 11 12 13 14 15]
&(range 10 15 1)
"range works as expected")
(assert-equal test
&[10 9 8 7 6 5 4 3 2 1 0]
&(range 10 0 -1)
"range backwards works as expected")
(assert-equal test
&[1 3 5 7 9]
&(range 1 10 2)
"range works as expected if we dont exactly hit")
(assert-equal test
&[10 8 6 4 2]
&(range 10 1 -2)
"range backwards works as expected if we dont exactly hit")
(assert-equal test
&[1 2 3 4 5 6 7 8 9]
&(sort (range 9 1 -1))
"sort works as expected")
(assert-equal test
&[@"Hi!" @"Hi!" @"Hi!" @"Hi!" @"Hi!"]
&(copy-map excl-ref &b)
"copy-map works as expected")
(assert-equal test
&[@"Hi!" @"Hi!" @"Hi!" @"Hi!" @"Hi!"]
&(endo-map excl b)
"endo-map works as expected")
(assert-equal test
&[1 2]
&(swap [2 1] 0 1)
"swap works as expected")
(assert-equal test
&[1 3]
&(aupdate [1 2] 1 inc-ref)
"aupdate works as expected")
(assert-equal test
&[1 2 3 4 5 6 7 8]
&(concat &[[1] [2 3] [4 5 6] [7 8]])
"concat works as expected")
(assert-equal test
&[11 22 33]
&(zip add-ref &[1 2 3 4 5 6 7] &[10 20 30])
"zip works as expected")
(assert-equal test
"[(Pair 0 @\"a\") (Pair 1 @\"b\") (Pair 2 @\"c\")]"
&(str &(Array.enumerated &[@"a" @"b" @"c"]))
"enumerated works as expected")
(print-test-results test))))