init
[stlc.git] / test / lambda / tli_tests.clj
blobea0bce60ebdff78ee3975af3586c9af7fe3ecbb9
1 (ns lambda.tli_tests
2   (:use [lambda.tli])
3   (:refer-clojure :exclude [==])
4   (:use [clojure.core.logic :exclude [is] :as l])
5   (:use [clojure.test]))
7 (deftest test-tio-forward
8   (is (= (run* [t]
9                (tio '([x 1]) 'x t))
10          '(1)))
11   (is (= (run* [t]
12                (tio '() '(fn [x] x)  t))
13          '([:=> _0 _0])))
14   (is (= (run* [t]
15                (tio '() '((fn [x] x) (fn [x] x))  t))
16          '([:=> _0 _0])))
17   (is (= (run* [t]
18                (tio '() '(fn [f] (fn [x] (f x))) t))
19          '([:=> [:=> _0 _1] [:=> _0 _1]]))))
21 (deftest test-tio-backwards
22   (is (= (run 3 [e]
23               (tio '() e [:=> 'a 'a]))
24          '(((fn [_0] _0) :- (sym _0))
25            ((fn [_0] ((fn [_1] _1) _0)) :- (sym _0) (sym _1))
26            (((fn [_0] _0) (fn [_1] _1)) :- (sym _0) (sym _1)))))
27   (is (= (run 3 [e]
28               (fresh [a]
29                      (tio '() e [:=> a a])))
30          '(((fn [_0] _0) :- (sym _0))
31            ((fn [_0] (fn [_1] _1)) :- (sym _1))
32            (((fn [_0] _0) (fn [_1] _1)) :- (sym _0) (sym _1))))))
34 (deftest test-tio-generate
35   (is (= (run 10 [q]
36               (fresh [e t]
37                      (== q [e t])
38                      (tio '() e t)))
39          '(([(fn [_0] _0) [:=> _1 _1]] :- (sym _0))
40            ([(fn [_0] (fn [_1] _1)) [:=> _2 [:=> _3 _3]]] :- (sym _1))
41            ([(fn [_0] (fn [_1] _0)) [:=> _2 [:=> _3 _2]]] :- (sym _0) (!= (_0 _1)))
42            ([((fn [_0] _0) (fn [_1] _1)) [:=> _2 _2]] :- (sym _0) (sym _1))
43            ([(fn [_0] (fn [_1] (fn [_2] _2))) [:=> _3 [:=> _4 [:=> _5 _5]]]] :- (sym _2))
44            ([(fn [_0] (fn [_1] (fn [_2] _1))) [:=> _3 [:=> _4 [:=> _5 _4]]]] :- (sym _1) (!= (_1 _2)))
45            ([(fn [_0] (_0 (fn [_1] _1))) [:=> [:=> [:=> _2 _2] _3] _3]] :- (sym _0) (sym _1))
46            ([((fn [_0] _0) (fn [_1] (fn [_2] _2))) [:=> _3 [:=> _4 _4]]] :- (sym _0) (sym _2))
47            ([(fn [_0] (fn [_1] (fn [_2] _0))) [:=> _3 [:=> _4 [:=> _5 _3]]]] :- (sym _0) (!= (_0 _2)) (!= (_0 _1)))
48            ([(fn [_0] ((fn [_1] _1) _0)) [:=> _2 _2]] :- (sym _0) (sym _1))))))
50 (deftest test-env-lookupo
51   (is (= (run* [q]
52                (env-lookupo '([x 1]) 'x q))
53          '(1)))
54   (is (= (run* [q]
55                (env-lookupo '() 'x q))
56          '()))
57   (is (= (run* [q]
58                (fresh [a b]
59                       (env-lookupo `([~a 1] [~b 2]) 'x q)))
60          '(1 2)))
61   (is (= (run* [q]
62                (fresh [a b]
63                       (env-lookupo `([~a 1] [~'x 2] [~b 3]) 'x q)))
64          '(1 2))))