1 package com.cliffc.aa.HM;
4 import org.junit.Before;
8 import static org.junit.Assert.assertEquals;
14 @Test(expected = RuntimeException.class)
23 assertEquals(
"3",t.
p());
29 assertEquals(
"{ V24 -> (pair 3 V24) }",t.
p());
34 T2 t =
HM6.
hm(
"{ z -> (pair (z 3) (z \"abc\")) }");
35 assertEquals(
"{ { all -> V23 } -> (pair V23 V23) }",t.
p());
40 T2 t =
HM6.
hm(
"fact = { n -> (if/else (==0 n) 1 (* n (fact (dec n))))}; fact");
41 assertEquals(
"{ int64 -> int64 }",t.
p());
48 T2 t1 =
HM6.
hm(
"({ x -> (pair (x 3) (x \"abc\")) } {y->y})");
49 assertEquals(
"(pair all all)",t1.
p());
55 T2 t1 =
HM6.
hm(
"{ f -> (f f) }");
56 assertEquals(
"{ $25:{ $25 -> V21 } -> V21 }",t1.
p());
63 T2 t1 =
HM6.
hm(
"g = {f -> 5}; (g g)");
64 assertEquals(
"5",t1.
p());
70 T2 t1 =
HM6.
hm(
"{ g -> f = { x -> g }; (pair (f 3) (f \"abc\"))}");
71 assertEquals(
"{ V21 -> (pair V21 V21) }",t1.
p());
76 T2 t1 =
HM6.
hm(
"{ f g -> (f g)}");
77 assertEquals(
"{ { V20 -> V22 } V20 -> V22 }",t1.
p());
83 T2 t1 =
HM6.
hm(
"{ f g -> { arg -> (g (f arg))} }");
84 assertEquals(
"{ { V19 -> V26 } { V26 -> V24 } -> { V19 -> V24 } }",t1.
p());
90 T2 t1 =
HM6.
hm(
"map = { fun -> { x -> 2 } }; ((map 3) 5)");
91 assertEquals(
"2",t1.
p());
97 T2 t1 =
HM6.
hm(
"map = { fun -> { x -> (fun x)}}; { p -> 5 }");
98 assertEquals(
"{ V21 -> 5 }",t1.
p());
106 T2 t1 =
HM6.
hm(
"map = { fun -> { x -> (fun x)}};"+
107 "(pair ((map str) 5) ((map factor) 2.3))");
108 assertEquals(
"(pair str (divmod flt64 flt64))",t1.
p());
114 T2 t1 =
HM6.
hm(
"map = { fun x -> (fun x)}; (map {a->3} 5)");
115 assertEquals(
"3",t1.
p());
121 T2 t1 =
HM6.
hm(
"map = { fun x -> (fun x)}; (map { a-> (pair a a)} 5)");
122 assertEquals(
"(pair 5 5)",t1.
p());
127 T2 t1 =
HM6.
hm(
"fcn = { p -> { a -> (pair a a) }};"+
128 "map = { fun x -> (fun x)};"+
129 "{ q -> (map (fcn q) 5)}");
130 assertEquals(
"{ V23 -> (pair 5 5) }",t1.
p());
133 @Test(expected = RuntimeException.class)
146 T2 t1 =
HM6.
hm(
"fcn = {p -> (if/else p {a -> (pair a a)} {b -> (pair b (pair 3 b))})};"+
147 "map = { fun x -> (fun x)};"+
148 "{ q -> (map (fcn q) 5)}");
149 assertEquals(
"TBD",t1.
p());
154 T2 t1 =
HM6.
hm(
"cons ={x y-> {cadr -> (cadr x y)}};"+
155 "cdr ={mycons -> (mycons { p q -> q})};"+
157 assertEquals(
"3",t1.
p());
169 T2 t1 =
HM6.
hm(
"cons ={x y-> {cadr -> (cadr x y)}};"+
170 "cdr ={mycons -> (mycons { p q -> q})};"+
171 "map ={fun parg -> (fun (cdr parg))};"+
172 "(pair (map str (cons 0 5)) (map isempty (cons 0 \"abc\")))"
174 assertEquals(
"(pair str int1)",t1.
p());
180 T2 t1 =
HM6.
hm(
"f0 = { f x -> (if/else (==0 x) 1 (f (f0 f (dec x)) 2))}; (f0 * 99)");
181 assertEquals(
"int64",t1.
p());
189 T2 t1 =
HM6.
hm(
"f0 = { f x -> (if/else (==0 x) 1 (* (f0 f (dec x)) 2))}; (f0 f0 99)");
190 assertEquals(
"int64",t1.
p());
197 " is_odd = { n -> (if/else (==0 n) 0 (is_even (dec n)))}; "+
198 " { n -> (if/else (==0 n) 1 (is_odd (dec n)))};"+
201 assertEquals(
"int1",t1.
p());
207 T2 t1 =
HM6.
hm(
"{ g -> fgz = "+
208 " cons = {x y -> {cadr -> (cadr x y)}};"+
209 " cdr = {mycons -> (mycons { p q -> q})};"+
210 " (cdr (cons 2 { z -> (g z) }));"+
211 " (pair (fgz 3) (fgz 5))"+
214 assertEquals(
"{ { nint8 -> V44 } -> (pair V44 V44) }",t1.
p());