;; Generic tests on sumtypes. (load "Test.carp") (use Test) (deftype A (F [(Fn [] Int)])) (deftype (Nest a) (Nested [a]) (End [])) (def nest (Nest.Nested (Nest.Nested (Nest.Nested 123)))) (defn one-two-three [] 123) (defn m [a] (match a (A.F f) (f))) (deftest test (assert-equal test 123 (m (A.F one-two-three)) "match adds lhs bindings to inner environments") (assert-equal test "matched!" (match nest (Nest.Nested (Nest.End)) "wrong!" (Nest.Nested (Nest.Nested (Nest.End))) "Also wrong!" (Nest.Nested (Nest.Nested (Nest.Nested _))) "matched!") "Match matches nested sumtype constructors with underscores") (assert-equal test 123 (match nest (Nest.Nested (Nest.Nested (Nest.Nested x))) x) "Match matches nested sumtype constructors with variables") )