mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-11 12:37:32 +03:00
198 lines
7.0 KiB
Plaintext
198 lines
7.0 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-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")
|
|
(print-test-results test))))
|