|
2 | 2 |
|
3 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
4 | 4 |
|
5 | | -import java.util.List; |
6 | | - |
7 | 5 | import org.junit.jupiter.api.Test; |
8 | 6 |
|
| 7 | +import liquidjava.rj_language.parsing.RefinementsParser; |
| 8 | + |
9 | 9 | class ExpressionFormatterTest { |
10 | 10 |
|
| 11 | + private static Expression parse(String refinement) { |
| 12 | + return RefinementsParser.createAST(refinement, ""); |
| 13 | + } |
| 14 | + |
11 | 15 | @Test |
12 | 16 | void formatsUnaryAtoms() { |
13 | | - assertEquals("!x", new UnaryExpression("!", new Var("x")).toDisplayString()); |
14 | | - assertEquals("!false", new UnaryExpression("!", new LiteralBoolean(false)).toDisplayString()); |
| 17 | + assertEquals("!x", parse("!x").toDisplayString()); |
| 18 | + assertEquals("!false", parse("!false").toDisplayString()); |
15 | 19 | } |
16 | 20 |
|
17 | 21 | @Test |
18 | 22 | void formatsInternalVariables() { |
19 | | - assertEquals("x", new Var("x").toDisplayString()); |
20 | | - assertEquals("x²", new Var("#x_2").toDisplayString()); |
21 | | - assertEquals("#fresh¹²", new Var("#fresh_12").toDisplayString()); |
22 | | - assertEquals("#ret³", new Var("#ret_3").toDisplayString()); |
23 | | - assertEquals("this#Class", new Var("this#Class").toDisplayString()); |
| 23 | + assertEquals("x", parse("x").toDisplayString()); |
| 24 | + assertEquals("x²", parse("#x_2").toDisplayString()); |
| 25 | + assertEquals("#fresh¹²", parse("#fresh_12").toDisplayString()); |
| 26 | + assertEquals("#ret³", parse("#ret_3").toDisplayString()); |
| 27 | + assertEquals("this#Class", parse("this#Class").toDisplayString()); |
24 | 28 | } |
25 | 29 |
|
26 | 30 | @Test |
27 | 31 | void formatsEnums() { |
28 | | - assertEquals("Color.RED", new Enum("Color", "RED").toDisplayString()); |
| 32 | + assertEquals("Color.RED", parse("Color.RED").toDisplayString()); |
29 | 33 | } |
30 | 34 |
|
31 | 35 | @Test |
32 | 36 | void formatsUnaryCompounds() { |
33 | | - Expression comparison = new BinaryExpression(new Var("x"), ">", new LiteralInt(0)); |
34 | | - |
35 | | - assertEquals("x > 0", comparison.toDisplayString()); |
36 | | - assertEquals("!(x > 0)", new UnaryExpression("!", comparison).toDisplayString()); |
37 | | - assertEquals("-(-x)", new UnaryExpression("-", new GroupExpression(new UnaryExpression("-", new Var("x")))) |
38 | | - .toDisplayString()); |
| 37 | + assertEquals("x > 0", parse("x > 0").toDisplayString()); |
| 38 | + assertEquals("!(x > 0)", parse("!(x > 0)").toDisplayString()); |
| 39 | + assertEquals("-(-x)", parse("-(-x)").toDisplayString()); |
39 | 40 | } |
40 | 41 |
|
41 | 42 | @Test |
42 | 43 | void formatsBinaryPrecedence() { |
43 | | - Expression sum = new BinaryExpression(new Var("a"), "+", new Var("b")); |
44 | | - Expression product = new BinaryExpression(new Var("b"), "*", new Var("c")); |
45 | | - |
46 | | - assertEquals("(a + b) * c", new BinaryExpression(sum, "*", new Var("c")).toDisplayString()); |
47 | | - assertEquals("a * (a + b)", new BinaryExpression(new Var("a"), "*", sum).toDisplayString()); |
48 | | - assertEquals("a + b * c", new BinaryExpression(new Var("a"), "+", product).toDisplayString()); |
49 | | - assertEquals("a - (a + b)", new BinaryExpression(new Var("a"), "-", sum).toDisplayString()); |
50 | | - assertEquals("a + b + c", new BinaryExpression(sum, "+", new Var("c")).toDisplayString()); |
51 | | - assertEquals("b * c * c", new BinaryExpression(product, "*", new Var("c")).toDisplayString()); |
| 44 | + assertEquals("(a + b) * c", parse("(a + b) * c").toDisplayString()); |
| 45 | + assertEquals("a * (a + b)", parse("a * (a + b)").toDisplayString()); |
| 46 | + assertEquals("a + b * c", parse("a + b * c").toDisplayString()); |
| 47 | + assertEquals("a - (a + b)", parse("a - (a + b)").toDisplayString()); |
| 48 | + assertEquals("a + b + c", parse("a + b + c").toDisplayString()); |
| 49 | + assertEquals("b * c * c", parse("b * c * c").toDisplayString()); |
52 | 50 | } |
53 | 51 |
|
54 | 52 | @Test |
55 | 53 | void omitsUnnecessaryGroupParentheses() { |
56 | | - Expression comparison = new BinaryExpression(new FunctionInvocation("size", List.of(new Var("#stack_294"))), |
57 | | - ">", new LiteralInt(0)); |
58 | | - Expression groupedComparison = new GroupExpression(comparison); |
59 | | - |
60 | | - assertEquals("size(stack²⁹⁴) > 0", groupedComparison.toDisplayString()); |
61 | | - assertEquals("size(stack²⁹⁴) > 0 && ready", |
62 | | - new BinaryExpression(groupedComparison, "&&", new Var("ready")).toDisplayString()); |
63 | | - assertEquals("ready && size(stack²⁹⁴) > 0", |
64 | | - new BinaryExpression(new Var("ready"), "&&", groupedComparison).toDisplayString()); |
| 54 | + assertEquals("size(stack²⁹⁴) > 0", parse("(size(#stack_294) > 0)").toDisplayString()); |
| 55 | + assertEquals("size(stack²⁹⁴) > 0 && ready", parse("(size(#stack_294) > 0) && ready").toDisplayString()); |
| 56 | + assertEquals("ready && size(stack²⁹⁴) > 0", parse("ready && (size(#stack_294) > 0)").toDisplayString()); |
65 | 57 | } |
66 | 58 |
|
67 | 59 | @Test |
68 | 60 | void formatsRightGrouping() { |
69 | | - Expression groupedSum = new GroupExpression(new BinaryExpression(new Var("b"), "+", new Var("c"))); |
70 | | - Expression groupedComparison = new GroupExpression( |
71 | | - new BinaryExpression(new LiteralInt(1), ">", new LiteralInt(0))); |
72 | | - |
73 | | - assertEquals("a - (b + c)", new BinaryExpression(new Var("a"), "-", groupedSum).toDisplayString()); |
74 | | - assertEquals("x == (1 > 0)", new BinaryExpression(new Var("x"), "==", groupedComparison).toDisplayString()); |
| 61 | + assertEquals("a - (b + c)", parse("a - (b + c)").toDisplayString()); |
| 62 | + assertEquals("x == (1 > 0)", parse("x == (1 > 0)").toDisplayString()); |
75 | 63 | } |
76 | 64 |
|
77 | 65 | @Test |
78 | 66 | void formatsLogicalExpressions() { |
79 | | - Expression andExpression = new BinaryExpression(new Var("a"), "&&", new Var("b")); |
80 | | - Expression orExpression = new BinaryExpression(new Var("b"), "||", new Var("c")); |
81 | | - Expression implication = new BinaryExpression(new Var("b"), "-->", new Var("c")); |
82 | | - |
83 | | - assertEquals("a && b || c", new BinaryExpression(andExpression, "||", new Var("c")).toDisplayString()); |
84 | | - assertEquals("a && (b || c)", new BinaryExpression(new Var("a"), "&&", orExpression).toDisplayString()); |
85 | | - assertEquals("a --> b --> c", new BinaryExpression(new Var("a"), "-->", implication).toDisplayString()); |
86 | | - assertEquals("(a --> b) --> c", |
87 | | - new BinaryExpression(new BinaryExpression(new Var("a"), "-->", new Var("b")), "-->", new Var("c")) |
88 | | - .toDisplayString()); |
89 | | - assertEquals("a && b && c", new BinaryExpression(andExpression, "&&", new Var("c")).toDisplayString()); |
90 | | - assertEquals("a || b || c", |
91 | | - new BinaryExpression(new BinaryExpression(new Var("a"), "||", new Var("b")), "||", new Var("c")) |
92 | | - .toDisplayString()); |
| 67 | + assertEquals("a && b || c", parse("a && b || c").toDisplayString()); |
| 68 | + assertEquals("a && (b || c)", parse("a && (b || c)").toDisplayString()); |
| 69 | + assertEquals("a --> b --> c", parse("a --> b --> c").toDisplayString()); |
| 70 | + assertEquals("(a --> b) --> c", parse("(a --> b) --> c").toDisplayString()); |
| 71 | + assertEquals("a && b && c", parse("a && b && c").toDisplayString()); |
| 72 | + assertEquals("a || b || c", parse("a || b || c").toDisplayString()); |
93 | 73 | } |
94 | 74 |
|
95 | 75 | @Test |
96 | 76 | void formatsTernaryExpressions() { |
97 | | - Expression ite = new Ite(new Var("a"), new Var("b"), new Var("c")); |
98 | | - Expression nestedElse = new Ite(new Var("c"), new Var("d"), new Var("e")); |
99 | | - |
100 | | - assertEquals("(a ? b : c) + d", new BinaryExpression(ite, "+", new Var("d")).toDisplayString()); |
101 | | - assertEquals("(a ? b : c) ? d : e", new Ite(ite, new Var("d"), new Var("e")).toDisplayString()); |
102 | | - assertEquals("a ? (b ? c : d) : e", |
103 | | - new Ite(new Var("a"), new Ite(new Var("b"), new Var("c"), new Var("d")), new Var("e")) |
104 | | - .toDisplayString()); |
105 | | - assertEquals("a ? b : c ? d : e", new Ite(new Var("a"), new Var("b"), nestedElse).toDisplayString()); |
106 | | - assertEquals("(a ? b : c) ? d : e", |
107 | | - new Ite(new GroupExpression(ite), new Var("d"), new Var("e")).toDisplayString()); |
108 | | - assertEquals("a ? b : c ? d : e", |
109 | | - new Ite(new Var("a"), new Var("b"), new GroupExpression(nestedElse)).toDisplayString()); |
110 | | - assertEquals("a ? b : c", new Ite(new Var("a"), new Var("b"), new Var("c")).toDisplayString()); |
| 77 | + assertEquals("(a ? b : c) + d", parse("(a ? b : c) + d").toDisplayString()); |
| 78 | + assertEquals("(a ? b : c) ? d : e", parse("(a ? b : c) ? d : e").toDisplayString()); |
| 79 | + assertEquals("a ? (b ? c : d) : e", parse("a ? (b ? c : d) : e").toDisplayString()); |
| 80 | + assertEquals("a ? b : c ? d : e", parse("a ? b : c ? d : e").toDisplayString()); |
| 81 | + assertEquals("(a ? b : c) ? d : e", parse("(a ? b : c) ? d : e").toDisplayString()); |
| 82 | + assertEquals("a ? b : c ? d : e", parse("a ? b : (c ? d : e)").toDisplayString()); |
| 83 | + assertEquals("a ? b : c", parse("a ? b : c").toDisplayString()); |
111 | 84 | } |
112 | 85 | } |
0 commit comments