Carp/test/macros.carp

216 lines
5.8 KiB
Plaintext
Raw Normal View History

(load "Test.carp")
(use Test)
(defn test-do-let []
(let-do [x 1]
(set! x (+ x 1))
(= x 2)))
2017-12-15 00:38:16 +03:00
(defn test-comment []
(let-do [x 1]
(comment (set! x (+ x 1)))
2017-12-15 00:38:16 +03:00
(= x 1)))
(defn test-case-dflt []
(case 1
2 false
true))
(defn test-case-select []
(case 1
1 true
false))
(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))
(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"
)
(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"
)
(assert-false test
(test-and false (macro-error "failed"))
"and macro shortcircuits"
)
(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"
)
(assert-true test
(test-or true (macro-error "failed"))
"or macro shortcircuits"
)
(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"
)
(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
"1 thing 2 things"
&(str* 1 " thing " 2 " things")
"str* macro works as expected"
)
(print-test-results test)))