Carp/test/array.carp
2018-09-13 00:13:03 +01:00

197 lines
6.9 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 I")
(assert-false test
(= &[1 2 3] &[1 2 3 4])
"= works as expected II")
(assert-false test
(= &[1 2 3] &[1 2 34])
"= works as expected III")
(assert-true test
(/= &[1 2 3] &[1 2 3 4])
"/= works as expected I")
(assert-true test
(/= &[1 2 4] &[1 2 3])
"/= works as expected II")
(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
&[@"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")
(let-do [arr [1 2 3 4 5 6]
exp [1 2 3 4 5 6 7]
new (Array.push-back arr 7)]
(assert-equal test
&exp
&new
"Array.push-back works as expected"))
(let-do [arr [1 2 3]
exp [1 2 3 4 5 6 7 8 9 10 11 12 13 14]]
(Array.push-back! &arr 4)
(Array.push-back! &arr 5)
(Array.push-back! &arr 6)
(Array.push-back! &arr 7)
(Array.push-back! &arr 8)
(Array.push-back! &arr 9)
(Array.push-back! &arr 10)
(Array.push-back! &arr 11)
(Array.push-back! &arr 12)
(Array.push-back! &arr 13)
(Array.push-back! &arr 14)
(assert-equal test
&exp
&arr
"Array.push-back! works as expected"))
(let-do [a [1 2 3 4 5 6]
b (Array.pop-back a)
c (Array.pop-back b)
d (Array.pop-back c)
exp [1 2 3]]
(assert-equal test
&exp
&d
"Array.pop-back works as expected"))
(let-do [arr [1 2 3 4 5 6]
exp [1 2 3]
six (Array.pop-back! &arr)
five (Array.pop-back! &arr)
four (Array.pop-back! &arr)]
(assert-true test
(and* (= &exp &arr)
(= six 6)
(= five 5)
(= four 4))
"Array.pop-back! works as expected"))
(assert-equal test
&[1 2 3 4 5 6 7 8 9]
&(sort (range 9 1 -1))
"sort works as expected")
(let-do [arr [3 2 5]
exp [2 3 5]]
(sort! &arr)
(assert-equal test
&exp
&arr
"sort! works as expected"))
(assert-equal test
&[1 2 3 4 5 6 7 8 9]
&(sorted &[9 2 1 3 7 8 6 5 4])
"sorted works as expected"))))