2017-12-14 18:28:06 +03:00
|
|
|
(load "Test.carp")
|
|
|
|
(use Test)
|
|
|
|
|
|
|
|
(defn test-do-let []
|
2017-12-15 11:24:16 +03:00
|
|
|
(let-do [x 1]
|
2018-02-02 09:19:10 +03:00
|
|
|
(set! x (+ x 1))
|
2017-12-14 18:28:06 +03:00
|
|
|
(= x 2)))
|
|
|
|
|
2017-12-15 00:38:16 +03:00
|
|
|
(defn test-comment []
|
2017-12-15 11:24:16 +03:00
|
|
|
(let-do [x 1]
|
2018-02-02 09:19:10 +03:00
|
|
|
(comment (set! x (+ x 1)))
|
2017-12-15 00:38:16 +03:00
|
|
|
(= x 1)))
|
|
|
|
|
2017-12-14 18:28:06 +03:00
|
|
|
(defn test-case-dflt []
|
|
|
|
(case 1
|
|
|
|
2 false
|
|
|
|
true))
|
|
|
|
|
|
|
|
(defn test-case-select []
|
|
|
|
(case 1
|
|
|
|
1 true
|
|
|
|
false))
|
|
|
|
|
2017-12-21 19:02:34 +03:00
|
|
|
(defmacro test-and [a b] (and a b))
|
|
|
|
(defmacro test-or [a b] (or a b))
|
|
|
|
(defmacro test-not [a] (not a))
|
|
|
|
(defmacro test-< [a b] (< a b))
|
|
|
|
(defmacro test-> [a b] (> a b))
|
|
|
|
(defmacro test-= [a b] (= a b))
|
|
|
|
|
2017-12-14 18:28:06 +03:00
|
|
|
(defn main []
|
|
|
|
(with-test test
|
|
|
|
(assert-true test
|
|
|
|
(test-do-let)
|
|
|
|
"do-let works as expected"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-case-dflt)
|
|
|
|
"case correctly selects default"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-case-select)
|
|
|
|
"case correctly selects branch"
|
|
|
|
)
|
2017-12-15 00:38:16 +03:00
|
|
|
(assert-true test
|
|
|
|
(test-comment)
|
|
|
|
"comment ignores input"
|
|
|
|
)
|
2017-12-21 19:02:34 +03:00
|
|
|
(assert-true test
|
|
|
|
(test-not false)
|
|
|
|
"not macro works as expected"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-and false true)
|
|
|
|
"and macro works as expected I"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-and true true)
|
|
|
|
"and macro works as expected II"
|
|
|
|
)
|
2017-12-22 15:07:38 +03:00
|
|
|
(assert-false test
|
|
|
|
(test-and false (macro-error "failed"))
|
|
|
|
"and macro shortcircuits"
|
|
|
|
)
|
2017-12-21 19:02:34 +03:00
|
|
|
(assert-false test
|
|
|
|
(test-or false false)
|
|
|
|
"or macro works as expected I"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-or false true)
|
|
|
|
"or macro works as expected II"
|
|
|
|
)
|
2017-12-22 15:07:38 +03:00
|
|
|
(assert-true test
|
|
|
|
(test-or true (macro-error "failed"))
|
|
|
|
"or macro shortcircuits"
|
|
|
|
)
|
2017-12-21 19:02:34 +03:00
|
|
|
(assert-true test
|
|
|
|
(test-or true true)
|
|
|
|
"or macro works as expected III"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-< 1 2)
|
|
|
|
"< macro works as expected on ints I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-< 2 2)
|
|
|
|
"< macro works as expected on ints II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-< 1l 2l)
|
|
|
|
"< macro works as expected on longs I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-< 2l 2l)
|
|
|
|
"< macro works as expected on longs II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-< 1.0 2.0)
|
|
|
|
"< macro works as expected on doubles I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-< 2.0 2.0)
|
|
|
|
"< macro works as expected on doubles II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-< 1.0f 2.0f)
|
|
|
|
"< macro works as expected on floats I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-< 2.0f 2.0f)
|
|
|
|
"< macro works as expected on floats II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-> 2 1)
|
|
|
|
"> macro works as expected on ints I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-> 2 2)
|
|
|
|
"> macro works as expected on ints II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-> 2l 1l)
|
|
|
|
"> macro works as expected on longs I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-> 2l 2l)
|
|
|
|
"> macro works as expected on longs II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-> 2.0 1.0)
|
|
|
|
"> macro works as expected on doubles I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-> 2.0 2.0)
|
|
|
|
"> macro works as expected on doubles II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-> 2.0f 1.0f)
|
|
|
|
"> macro works as expected on floats I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-> 2.0f 2.0f)
|
|
|
|
"> macro works as expected on floats II"
|
|
|
|
)
|
|
|
|
|
|
|
|
(assert-true test
|
|
|
|
(test-= 2 2)
|
|
|
|
"= macro works as expected on ints I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-= 2 1)
|
|
|
|
"= macro works as expected on ints II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-= 2l 2l)
|
|
|
|
"= macro works as expected on longs I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-= 2l 1l)
|
|
|
|
"= macro works as expected on longs II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-= 2.0 2.0)
|
|
|
|
"= macro works as expected on doubles I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-= 2.0 1.0)
|
|
|
|
"= macro works as expected on doubles II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-= 2.0f 2.0f)
|
|
|
|
"= macro works as expected on floats I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-= 2.0f 1.0f)
|
|
|
|
"= macro works as expected on floats II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-= "erik" "erik")
|
|
|
|
"= macro works as expected on strings I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-= "erik" "svedäng")
|
|
|
|
"= macro works as expected on strings II"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(test-= veit veit)
|
|
|
|
"= macro works as expected on symbols I"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(test-= veit heller)
|
|
|
|
"= macro works as expected on symbols II"
|
|
|
|
)
|
2017-12-29 13:49:51 +03:00
|
|
|
(assert-false test
|
|
|
|
(and* true true false)
|
|
|
|
"and* macro works as expected I"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(and* true true true)
|
|
|
|
"and* macro works as expected II"
|
|
|
|
)
|
|
|
|
(assert-false test
|
|
|
|
(or* false false false)
|
|
|
|
"or* macro works as expected I"
|
|
|
|
)
|
|
|
|
(assert-true test
|
|
|
|
(or* true false true)
|
|
|
|
"or* macro works as expected II"
|
|
|
|
)
|
|
|
|
(assert-equal test
|
2018-02-06 20:37:15 +03:00
|
|
|
"1 thing 2 things"
|
2017-12-29 13:49:51 +03:00
|
|
|
&(str* 1 " thing " 2 " things")
|
|
|
|
"str* macro works as expected"
|
|
|
|
)
|
2017-12-14 18:28:06 +03:00
|
|
|
(print-test-results test)))
|