@@ -3,7 +3,91 @@ using @lib {type Cirru}
33
44///|
55test " parser " {
6- assert_eq(Cirru ::parse("def a"), [List ([Leaf ("def"), Leaf ("a")])])
6+ assert_eq(Cirru ::parse("def a"), [
7+ Cirru ::List ([Cirru ::Leaf ("def"), Cirru ::Leaf ("a")]),
8+ ])
9+ }
10+
11+ ///|
12+ test " parse and format one-liner expression " {
13+ let tree = Cirru ::List ([
14+ Cirru ::Leaf ("defn"),
15+ Cirru ::Leaf ("main"),
16+ Cirru ::List ([] ),
17+ Cirru ::List ([Cirru ::Leaf ("println"), Cirru ::Leaf ("Hello , world!")]),
18+ ])
19+
20+ let one_liner = try! tree.format_one_liner()
21+ assert_eq(one_liner, "defn main () $ println \"Hello , world!\"")
22+
23+ let parsed = try! Cirru ::parse_expr_one_liner(one_liner)
24+ assert_eq(parsed, tree)
25+ }
26+
27+ ///|
28+ test " reject multiple expressions in one-liner parser " {
29+ let result = try? Cirru ::parse_expr_one_liner("a\nb")
30+ match result {
31+ Err (err) => assert_eq(err.to_string(), "expected 1 expression, got 2")
32+ Ok (_) => assert_eq("ok", "err")
33+ }
34+ }
35+
36+ ///|
37+ test " format complex one-liner expression " {
38+ let tree = Cirru ::List ([
39+ Cirru ::Leaf ("a"),
40+ Cirru ::List ([Cirru ::Leaf ("b"), Cirru ::List ([Cirru ::Leaf ("c")])]),
41+ Cirru ::Leaf ("d"),
42+ ])
43+
44+ let one_liner = try! tree.format_one_liner()
45+ assert_eq(one_liner, "a (b (c)) d")
46+
47+ let parsed = try! Cirru ::parse_expr_one_liner(one_liner)
48+ assert_eq(parsed, tree)
49+ }
50+
51+ ///|
52+ test " format tail expression one-liner " {
53+ let tree = Cirru ::List ([
54+ Cirru ::Leaf ("defn"),
55+ Cirru ::Leaf ("main"),
56+ Cirru ::List ([] ),
57+ Cirru ::List ([Cirru ::Leaf ("println"), Cirru ::Leaf ("Hello ")]),
58+ ])
59+
60+ let one_liner = try! tree.format_one_liner()
61+ assert_eq(one_liner, "defn main () $ println Hello ")
62+
63+ let parsed = try! Cirru ::parse_expr_one_liner(one_liner)
64+ assert_eq(parsed, tree)
65+ }
66+
67+ ///|
68+ test " format nested tail expression one-liner " {
69+ let tree = Cirru ::List ([
70+ Cirru ::Leaf ("if"),
71+ Cirru ::Leaf ("condition"),
72+ Cirru ::List ([Cirru ::Leaf ("do"), Cirru ::List ([Cirru ::Leaf ("action")])]),
73+ ])
74+
75+ let one_liner = try! tree.format_one_liner()
76+ assert_eq(one_liner, "if condition $ do $ action")
77+
78+ let parsed = try! Cirru ::parse_expr_one_liner(one_liner)
79+ assert_eq(parsed, tree)
80+ }
81+
82+ ///|
83+ test " format empty tail expression one-liner " {
84+ let tree = Cirru ::List ([Cirru ::Leaf ("a"), Cirru ::Leaf ("b"), Cirru ::List ([] )])
85+
86+ let one_liner = try! tree.format_one_liner()
87+ assert_eq(one_liner, "a b $")
88+
89+ let parsed = try! Cirru ::parse_expr_one_liner(one_liner)
90+ assert_eq(parsed, tree)
791}
892
993///|
0 commit comments