wneuper@5049
|
1 |
package isac.gui.mawen.syntax
|
wneuper@5049
|
2 |
|
wneuper@5064
|
3 |
import isac.gui.mawen.scalaterm.TestsDATA
|
wneuper@5088
|
4 |
import isac.gui.mawen.TestDATA
|
wneuper@5085
|
5 |
import isac.gui.mawen.syntax.Ast._ //"._" simplifies "Ast.Ast" to "Ast"
|
walther@5239
|
6 |
import edu.tum.cs.isabelle.pure._ // for Term
|
wneuper@5123
|
7 |
import isac.gui.mawen.syntax.isabelle.XLibrary
|
wneuper@5088
|
8 |
import isac.gui.mawen.editor.TestDATAeditor
|
wneuper@5064
|
9 |
|
wneuper@5049
|
10 |
import junit.framework.TestCase
|
wneuper@5049
|
11 |
import org.junit.Assert._
|
wneuper@5049
|
12 |
|
wneuper@5049
|
13 |
|
wneuper@5049
|
14 |
class TestAst extends TestCase {
|
wneuper@5067
|
15 |
|
wneuper@5138
|
16 |
// x / y
|
wneuper@5085
|
17 |
def a1 = Appl(List(Constant("Fields.inverse_class.divide"), Variable ("x"), Variable ("y")))
|
wneuper@5085
|
18 |
// a * b / c
|
wneuper@5085
|
19 |
def a2 = Appl(List(Constant("Groups.times_class.times"), Variable ("a"), Appl(List(Constant("Fields.inverse_class.divide"), Variable("b"), Variable("c")))))
|
wneuper@5085
|
20 |
// sin(a + b) / c
|
wneuper@5085
|
21 |
def a3 = Appl(List
|
wneuper@5085
|
22 |
(Constant("Fields.inverse_class.divide"),
|
wneuper@5085
|
23 |
Appl(List(Constant("sin"),
|
wneuper@5085
|
24 |
Appl(List(Constant("Groups.plus_class.plus"),
|
wneuper@5085
|
25 |
Variable("a"),
|
wneuper@5085
|
26 |
Variable("b")
|
wneuper@5085
|
27 |
))
|
wneuper@5085
|
28 |
))
|
wneuper@5085
|
29 |
,Variable ("c")
|
wneuper@5085
|
30 |
))
|
wneuper@5085
|
31 |
def a4 = Appl(List(Constant("Groups.plus_class.plus"), Appl(List(Constant("Groups.plus_class.plus"), Variable("a"), Variable("b"))), Variable("c")))
|
wneuper@5085
|
32 |
def a5 = Appl(List(Constant("Groups.plus_class.plus"), Variable("a"), Appl(List(Constant("Groups.plus_class.plus"), Variable("b"), Variable("c")))))
|
wneuper@5140
|
33 |
var post_ast : Ast.Ast = //copied from Isabelle2016-1-MAWEN, types dropped
|
wneuper@5140
|
34 |
Appl(List(
|
wneuper@5140
|
35 |
Constant("_tuple"),
|
wneuper@5140
|
36 |
Variable("aaa"),
|
wneuper@5140
|
37 |
Appl(List(
|
wneuper@5140
|
38 |
Constant("_tuple_args"),
|
wneuper@5140
|
39 |
Variable("bbb"),
|
wneuper@5140
|
40 |
Appl(List(
|
wneuper@5140
|
41 |
Constant("_tuple_args"),
|
wneuper@5140
|
42 |
Variable("ccc"),
|
wneuper@5140
|
43 |
Appl(List(
|
wneuper@5140
|
44 |
Constant("_tuple_arg"),
|
wneuper@5140
|
45 |
Variable("ddd")))))))))
|
wneuper@5085
|
46 |
|
wneuper@5085
|
47 |
def test_prefix_string_of() {
|
wneuper@5085
|
48 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_prefix_string_of");
|
wneuper@5085
|
49 |
|
wneuper@5085
|
50 |
assertEquals(Ast.prefix_string_of(a1), "/ x y")
|
wneuper@5085
|
51 |
assertEquals(Ast.prefix_string_of(a2), "* a / b c")
|
wneuper@5085
|
52 |
assertEquals(Ast.prefix_string_of(a3), "/ sin + a b c")
|
wneuper@5085
|
53 |
|
wneuper@5085
|
54 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_prefix_string_of");
|
wneuper@5085
|
55 |
}
|
wneuper@5085
|
56 |
|
wneuper@5138
|
57 |
def test_math_string_of() {
|
wneuper@5085
|
58 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_math_string_of");
|
wneuper@5085
|
59 |
|
wneuper@5085
|
60 |
assertEquals(Ast.math_string_of(a1), "x / y")
|
wneuper@5085
|
61 |
assertEquals(Ast.math_string_of(a2), "a * (b / c)")
|
wneuper@5085
|
62 |
assertEquals(Ast.math_string_of(a3), "sin (a + b) / c")
|
wneuper@5085
|
63 |
|
wneuper@5085
|
64 |
assertEquals(Ast.math_string_of(a4), "a + b + c")
|
wneuper@5085
|
65 |
assertEquals(Ast.math_string_of(a5), "a + (b + c)")
|
wneuper@5140
|
66 |
assertEquals(Ast.math_string_of(post_ast), "(aaa, bbb, ccc, ddd)")
|
wneuper@5085
|
67 |
|
wneuper@5085
|
68 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_math_string_of");
|
wneuper@5085
|
69 |
}
|
wneuper@5085
|
70 |
|
wneuper@5085
|
71 |
/*
|
wneuper@5085
|
72 |
* The examples for reference of Natalie Karl initially took terms,
|
wneuper@5085
|
73 |
* @see isac.gui.mawen.scalaterm.TestUtil.
|
wneuper@5085
|
74 |
* Here we check, whether term_to_ast + Ast.string_of give the same result.
|
wneuper@5085
|
75 |
*/
|
wneuper@5085
|
76 |
def test_examples_for_NK() {
|
wneuper@5085
|
77 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_examples_for_NK");
|
wneuper@5085
|
78 |
|
wneuper@5085
|
79 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t1)),
|
wneuper@5085
|
80 |
"aaa + bbb = processed_by_Isabelle_Isac ")
|
wneuper@5085
|
81 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t2)),
|
wneuper@5085
|
82 |
"a + 2 * b + 3 * (c + d)")
|
wneuper@5085
|
83 |
|
wneuper@5085
|
84 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t31)),
|
wneuper@5085
|
85 |
"aaa + bbb + ccc")
|
wneuper@5085
|
86 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t32)),
|
wneuper@5085
|
87 |
"aaa + (bbb + ccc)")
|
wneuper@5085
|
88 |
|
wneuper@5140
|
89 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t41)),
|
wneuper@5140
|
90 |
"Diff (x + sin (x ^ 2), x)")
|
wneuper@5085
|
91 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t42)),
|
wneuper@5085
|
92 |
"d_d x (x + sin (x ^ 2))")
|
wneuper@5140
|
93 |
|
wneuper@5085
|
94 |
// MAWEN example for reference No.1
|
wneuper@5085
|
95 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt1())),
|
wneuper@5085
|
96 |
"Simplify (1 + 2 * x * (y + 3) / (4 * z * (y + 3)) + 5)")
|
wneuper@5085
|
97 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt3())),
|
wneuper@5085
|
98 |
"1 + 2 * x * (y + 3) / (4 * z * (y + 3)) + 5")
|
wneuper@5085
|
99 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt4())),
|
wneuper@5085
|
100 |
"1 + 2 * x / (4 * z) + 5")
|
wneuper@5085
|
101 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt5())),
|
wneuper@5085
|
102 |
"1 + x / (2 * z) + 5")
|
wneuper@5085
|
103 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt6())),
|
wneuper@5085
|
104 |
"6 + x / (2 * z)")
|
wneuper@5085
|
105 |
|
wneuper@5085
|
106 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_examples_for_NK");
|
wneuper@5085
|
107 |
}
|
wneuper@5085
|
108 |
|
wneuper@5085
|
109 |
//test additional examples with BOX, CURSOR, GAP
|
wneuper@5085
|
110 |
def test_BOX_CURSOR_GAP() {
|
wneuper@5085
|
111 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_BOX_CURSOR_GAP");
|
wneuper@5194
|
112 |
|
wneuper@5088
|
113 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1))
|
wneuper@5088
|
114 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_2))
|
wneuper@5088
|
115 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_3))
|
wneuper@5085
|
116 |
|
wneuper@5088
|
117 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1_CURSOR))
|
wneuper@5088
|
118 |
assertEquals( "# + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1_CURSOR_GAP))
|
wneuper@5088
|
119 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1_CURSOR_b))
|
wneuper@5085
|
120 |
|
wneuper@5088
|
121 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_CURSOR_BOX_3A))
|
wneuper@5088
|
122 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_CURSOR_BOX_3B))
|
s1520454056@5191
|
123 |
|
wneuper@5194
|
124 |
assertEquals("d_d x x + d_d x (sin (x ^ 2))", Ast.math_string_of(TestDATAeditor.box_05))
|
wneuper@5194
|
125 |
assertEquals("d_d bdv (sin (u)) = cos (u) * d_d bdv (u)", Ast.math_string_of(TestDATAeditor.box_06))
|
wneuper@5194
|
126 |
assertEquals("d_d x x + cos (x ^ 2) * d_d x (#)", Ast.math_string_of(TestDATAeditor.box_07_with_cursor))
|
wneuper@5088
|
127 |
assertEquals("a + (# + c)", Ast.math_string_of(TestDATAeditor.box_gap_cursor))
|
wneuper@5088
|
128 |
assertEquals("#", Ast.math_string_of(TestDATAeditor.box_with_cursor_on_gap))
|
wneuper@5088
|
129 |
assertEquals("# + #", Ast.math_string_of(TestDATAeditor.in_1a))
|
wneuper@5088
|
130 |
assertEquals("a + # / #", Ast.math_string_of(TestDATAeditor.in_1b))
|
wneuper@5088
|
131 |
assertEquals("a + b / #", Ast.math_string_of(TestDATAeditor.in_1c))
|
wneuper@5085
|
132 |
|
wneuper@5085
|
133 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_BOX_CURSOR_GAP");
|
wneuper@5085
|
134 |
}
|
wneuper@5085
|
135 |
|
wneuper@5080
|
136 |
|
wneuper@5090
|
137 |
/* from Isabelle2016-1-MAWEN ast.ML:
|
wneuper@5090
|
138 |
* fun try_rules ((lhs, rhs) :: pats) ast = (*WN*)
|
wneuper@5090
|
139 |
*
|
wneuper@5090
|
140 |
* lemma "[aaa,bbb] = ddd" --- term_to_ast ---
|
wneuper@5090
|
141 |
* with types dropped in ast and rule.
|
wneuper@5090
|
142 |
*
|
wneuper@5090
|
143 |
* assert was too expensive at this moment.
|
wneuper@5090
|
144 |
*/
|
wneuper@5097
|
145 |
def test_list_normal() {
|
wneuper@5097
|
146 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_list_normal");
|
wneuper@5067
|
147 |
|
wneuper@5090
|
148 |
//======= 1.successful application
|
wneuper@5090
|
149 |
//###try_rules ast: Appl[Constant("List.list.Cons"), Appl[Constant("_constrain"), Appl[Constant("_free"), Variable("bbb"]), Appl[Constant("_ofsort"), Appl[Constant("_tfree"), Variable("'a"]), Constant("\ <^class>HOL.type"]]), Constant("List.list.Nil"])
|
wneuper@5090
|
150 |
//###try_rules lhs: Appl[Constant("List.list.Cons"), Variable("x"), Constant("List.list.Nil"])
|
wneuper@5090
|
151 |
//###try_rules rhs: Appl[Constant("_list"), Variable("x"])
|
wneuper@5090
|
152 |
//------- ast in try_rules (from additional output):
|
wneuper@5090
|
153 |
var ast =
|
wneuper@5083
|
154 |
Ast.Appl(List(
|
wneuper@5090
|
155 |
Ast.Constant("List.list.Cons"),
|
wneuper@5090
|
156 |
Ast.Variable("bbb"),
|
wneuper@5090
|
157 |
Ast.Constant("List.list.Nil")))
|
wneuper@5090
|
158 |
var lhs =
|
wneuper@5090
|
159 |
Appl(List(
|
wneuper@5090
|
160 |
Constant("List.list.Cons"),
|
wneuper@5090
|
161 |
Variable("x"),
|
wneuper@5090
|
162 |
Constant("List.list.Nil")))
|
wneuper@5090
|
163 |
var rhs =
|
wneuper@5090
|
164 |
Appl(List(
|
wneuper@5090
|
165 |
Constant("_list"),
|
wneuper@5090
|
166 |
Variable("x")))
|
wneuper@5097
|
167 |
assertEquals(Ast.matches(ast, lhs), Some((Map("x" -> Variable("bbb")),List())))
|
wneuper@5097
|
168 |
// //--------------- tests BEFORE made local to normalize ---------------\\
|
wneuper@5097
|
169 |
//assertEquals(Ast.xtry(ast, "List.list.Cons"), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
170 |
//assertEquals(Ast.try_rules(XSyntax.print_rules("List.list.Cons"), ast), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
171 |
//assertEquals(Ast.try_rules(List((lhs, rhs)), ast), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
172 |
|
wneuper@5097
|
173 |
//assertEquals(Ast.rewrite(ast), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
174 |
//assertEquals(Ast.norm_root(ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5097
|
175 |
//assertEquals(Ast.norm(ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5097
|
176 |
//assertEquals(Ast.normal(ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5097
|
177 |
// \\--------------- tests BEFORE made local to normalize ---------------//
|
wneuper@5097
|
178 |
assertEquals(Ast.normalize(XSyntax.print_rules, ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5090
|
179 |
|
wneuper@5090
|
180 |
//------- whole ast calling try_rules:
|
wneuper@5090
|
181 |
ast =
|
wneuper@5090
|
182 |
Ast.Appl(List(
|
wneuper@5090
|
183 |
Ast.Constant("List.list.Cons"),
|
wneuper@5083
|
184 |
Ast.Variable("aaa"),
|
wneuper@5083
|
185 |
Ast.Appl(List(
|
wneuper@5090
|
186 |
Ast.Constant("List.list.Cons"),
|
wneuper@5083
|
187 |
Ast.Variable("bbb"),
|
wneuper@5083
|
188 |
Ast.Appl(List(
|
wneuper@5083
|
189 |
Ast.Constant("List.list.Cons"),
|
wneuper@5083
|
190 |
Ast.Variable("ccc"),
|
wneuper@5090
|
191 |
Ast.Constant("List.list.Nil")))))))
|
wneuper@5097
|
192 |
assertEquals(Ast.matches(ast, lhs), None) //--> None: the rewriter calls try_rules!
|
wneuper@5097
|
193 |
// //--------------- tests BEFORE made local to normalize ---------------\\
|
wneuper@5097
|
194 |
//assertEquals(Ast.xtry(ast, "List.list.Cons"), None)
|
wneuper@5097
|
195 |
//assertEquals(Ast.try_rules(XSyntax.print_rules("List.list.Cons"), ast), None)
|
wneuper@5097
|
196 |
//assertEquals(Ast.try_rules(List((lhs, rhs)), ast), None)
|
wneuper@5080
|
197 |
|
wneuper@5097
|
198 |
//assertEquals(Ast.rewrite(ast), None)
|
wneuper@5097
|
199 |
//assertEquals(Ast.norm_root(ast), Appl(List(Constant("List.list.Cons"), Variable("aaa"), Appl(List(Constant("List.list.Cons"), Variable("bbb"), Appl(List(Constant("List.list.Cons"), Variable("ccc"), Constant("List.list.Nil"))))))))
|
wneuper@5097
|
200 |
//assertEquals(Ast.normal(ast), Appl(List(Constant("_list"), Appl(List(Constant("_args"), Variable("aaa"), Appl(List(Constant("_args"), Variable("bbb"), Variable("ccc"))))))))
|
wneuper@5097
|
201 |
//assertEquals(Ast.normal(ast), Appl(List(Constant("_list"), Appl(List(Constant("_args"), Variable("aaa"), Appl(List(Constant("_args"), Variable("bbb"), Variable("ccc"))))))))
|
wneuper@5097
|
202 |
// \\--------------- tests BEFORE made local to normalize ---------------//
|
wneuper@5097
|
203 |
assertEquals(Ast.normalize(XSyntax.print_rules, ast),
|
wneuper@5097
|
204 |
Appl(List(
|
wneuper@5097
|
205 |
Constant("_list"), Appl(List(
|
wneuper@5097
|
206 |
Constant("_args"), Variable("aaa"), Appl(List(
|
wneuper@5097
|
207 |
Constant("_args"), Variable("bbb"), Variable("ccc"))))))))
|
wneuper@5098
|
208 |
|
wneuper@5098
|
209 |
/* output from Isabelle_Isac adds types to above structure:
|
wneuper@5098
|
210 |
Appl(List(
|
wneuper@5098
|
211 |
/*_list*/Constant("_list"), Appl(List(
|
wneuper@5098
|
212 |
/*_args*/ Constant("_args"), Appl(List(
|
wneuper@5098
|
213 |
Constant("_constrain"), Appl(List(
|
wneuper@5098
|
214 |
/* aaa */ Constant("_free"), Variable("aaa"))), Appl(List(
|
wneuper@5098
|
215 |
Constant("_ofsort"), Appl(List(
|
wneuper@5098
|
216 |
Constant("_tfree"), Variable("'a"))), Constant("\\<^class>HOL.type"))))), Appl(List(
|
wneuper@5098
|
217 |
/*_args*/ Constant("_args"), Appl(List(
|
wneuper@5098
|
218 |
Constant("_constrain"), Appl(List(
|
wneuper@5098
|
219 |
/* bbb */ Constant("_free"), Variable("bbb"))), Appl(List(
|
wneuper@5098
|
220 |
Constant("_ofsort"), Appl(List(
|
wneuper@5098
|
221 |
Constant("_tfree"), Variable("'a"))), Constant("\\<^class>HOL.type"))))), Appl(List(
|
wneuper@5098
|
222 |
Constant("_constrain"), Appl(List(
|
wneuper@5098
|
223 |
/* ccc */ Constant("_free"), Variable("ccc"))), Appl(List(
|
wneuper@5098
|
224 |
Constant("_ofsort"), Appl(List(
|
wneuper@5098
|
225 |
Constant("_tfree"), Variable("'a"))), Constant("\\<^class>HOL.type")))))))))))
|
wneuper@5098
|
226 |
*/
|
wneuper@5103
|
227 |
|
wneuper@5103
|
228 |
ast =
|
wneuper@5103
|
229 |
Appl(List(
|
wneuper@5103
|
230 |
Constant("_list"), Appl(List(
|
wneuper@5103
|
231 |
Constant("_args"), Variable("aaa"), Appl(List(
|
wneuper@5103
|
232 |
Constant("_args"), Variable("bbb"), Variable("ccc")))))))
|
wneuper@5103
|
233 |
assertEquals("[aaa, bbb, ccc]", Ast.math_string_of(ast))
|
wneuper@5097
|
234 |
|
wneuper@5097
|
235 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_list_normal");
|
wneuper@5067
|
236 |
}
|
wneuper@5085
|
237 |
|
wneuper@5137
|
238 |
def test_tuple_normal() = {
|
wneuper@5137
|
239 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_tuple_normal");
|
wneuper@5137
|
240 |
|
wneuper@5137
|
241 |
// cp from ScalaTermFromString#test_etc, term_str = "(aaa, bbb, ccc, ddd)"
|
wneuper@5137
|
242 |
var term_from_Isabelle_Isac =
|
wneuper@5137
|
243 |
App(
|
wneuper@5137
|
244 |
App(
|
wneuper@5137
|
245 |
Const("Product_Type.Pair", Type("fun", List(TFree("'a", List("HOL.type")),Type("fun", List(Type("Product_Type.prod", List(TFree("'b", List("HOL.type")),Type("Product_Type.prod", List(TFree("'c", List("HOL.type")),TFree("'d", List("HOL.type")))))),Type("Product_Type.prod", List(TFree("'a", List("HOL.type")),Type("Product_Type.prod", List(TFree("'b", List("HOL.type")),Type("Product_Type.prod", List(TFree("'c", List("HOL.type")),TFree("'d", List("HOL.type"))))))))))))),
|
wneuper@5137
|
246 |
Free("aaa", TFree("'a", List("HOL.type")))),
|
wneuper@5137
|
247 |
App(
|
wneuper@5137
|
248 |
App(
|
wneuper@5137
|
249 |
Const("Product_Type.Pair", Type("fun", List(TFree("'b", List("HOL.type")),Type("fun", List(Type("Product_Type.prod", List(TFree("'c", List("HOL.type")),TFree("'d", List("HOL.type")))),Type("Product_Type.prod", List(TFree("'b", List("HOL.type")),Type("Product_Type.prod", List(TFree("'c", List("HOL.type")),TFree("'d", List("HOL.type"))))))))))),
|
wneuper@5137
|
250 |
Free("bbb", TFree("'b", List("HOL.type")))),
|
wneuper@5137
|
251 |
App(
|
wneuper@5137
|
252 |
App(
|
wneuper@5137
|
253 |
Const("Product_Type.Pair", Type("fun", List(TFree("'c", List("HOL.type")),Type("fun", List(TFree("'d", List("HOL.type")),Type("Product_Type.prod", List(TFree("'c", List("HOL.type")),TFree("'d", List("HOL.type"))))))))),
|
wneuper@5137
|
254 |
Free("ccc", TFree("'c", List("HOL.type")))),
|
wneuper@5137
|
255 |
Free("ddd", TFree("'d", List("HOL.type"))
|
wneuper@5137
|
256 |
))
|
wneuper@5137
|
257 |
))
|
wneuper@5137
|
258 |
var simple_ast = Syntax_Phases.simple_ast_of(term_from_Isabelle_Isac)
|
wneuper@5137
|
259 |
assertEquals(simple_ast,
|
wneuper@5137
|
260 |
Appl(List( //println(raw_string_of(simple_ast))
|
wneuper@5137
|
261 |
Constant("Product_Type.Pair"),
|
wneuper@5137
|
262 |
Variable("aaa"),
|
wneuper@5137
|
263 |
Appl(List(
|
wneuper@5137
|
264 |
Constant("Product_Type.Pair"),
|
wneuper@5137
|
265 |
Variable("bbb"),
|
wneuper@5137
|
266 |
Appl(List(
|
wneuper@5137
|
267 |
Constant("Product_Type.Pair"), //???vvvvvvvvvvvvv
|
wneuper@5137
|
268 |
Variable("ccc"),
|
wneuper@5137
|
269 |
Variable("ddd")))
|
wneuper@5137
|
270 |
))
|
wneuper@5137
|
271 |
))
|
wneuper@5137
|
272 |
)
|
wneuper@5137
|
273 |
var pre_ast : Ast.Ast = simple_ast
|
wneuper@5137
|
274 |
// pre_ast : Ast.Ast = //copied from Isabelle2016-1-MAWEN, types dropped MAY
|
wneuper@5137
|
275 |
// Appl(List(
|
wneuper@5137
|
276 |
// Constant("Product_Type.Pair"),
|
wneuper@5137
|
277 |
// Variable("aaa"),
|
wneuper@5137
|
278 |
// Appl(List(
|
wneuper@5137
|
279 |
// Constant("Product_Type.Pair"),
|
wneuper@5137
|
280 |
// Variable("bbb"),
|
wneuper@5137
|
281 |
// Appl(List(
|
wneuper@5137
|
282 |
// Constant("Product_Type.Pair"),
|
wneuper@5137
|
283 |
// Appl(List( //???^^^^^^^^^^^
|
wneuper@5137
|
284 |
// Variable("ccc"))),
|
wneuper@5137
|
285 |
// Variable("ddd")))))))
|
wneuper@5137
|
286 |
var post_ast : Ast.Ast = //copied from Isabelle2016-1-MAWEN, types dropped
|
wneuper@5137
|
287 |
Appl(List(
|
wneuper@5137
|
288 |
Constant("_tuple"),
|
wneuper@5137
|
289 |
Variable("aaa"),
|
wneuper@5137
|
290 |
Appl(List(
|
wneuper@5137
|
291 |
Constant("_tuple_args"),
|
wneuper@5137
|
292 |
Variable("bbb"),
|
wneuper@5137
|
293 |
Appl(List(
|
wneuper@5137
|
294 |
Constant("_tuple_args"),
|
wneuper@5137
|
295 |
Variable("ccc"),
|
wneuper@5137
|
296 |
Appl(List(
|
wneuper@5137
|
297 |
Constant("_tuple_arg"),
|
wneuper@5137
|
298 |
Variable("ddd")))))))))
|
wneuper@5137
|
299 |
val ast = normalize(XSyntax.print_rules, pre_ast)
|
wneuper@5137
|
300 |
assertEquals(ast, post_ast) // LETZTES "_tuple_args" <> "_tuple_args"
|
wneuper@5137
|
301 |
|
wneuper@5137
|
302 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_tuple_normal");
|
wneuper@5137
|
303 |
}
|
wneuper@5137
|
304 |
|
wneuper@5138
|
305 |
def test_matches() = {
|
wneuper@5138
|
306 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_matches");
|
wneuper@5137
|
307 |
|
wneuper@5138
|
308 |
// at this ast rule 2 should match
|
wneuper@5138
|
309 |
val ML4_2old_ast = //AFTER rewrite 3, rule 2, from ###ML old_ast
|
wneuper@5138
|
310 |
Appl(List(
|
wneuper@5138
|
311 |
Constant("_tuple"),
|
wneuper@5138
|
312 |
Variable("bbb"),
|
wneuper@5138
|
313 |
Appl(List(
|
wneuper@5138
|
314 |
Constant("_tuple_arg"), //<---vv
|
wneuper@5138
|
315 |
Appl(List(
|
wneuper@5138
|
316 |
Constant("_tuple"), //<---^^
|
wneuper@5138
|
317 |
Variable("ccc"),
|
wneuper@5138
|
318 |
Appl(List(
|
wneuper@5138
|
319 |
Constant("_tuple_arg"),
|
wneuper@5138
|
320 |
Variable("ddd"))) )))))) //->
|
wneuper@5138
|
321 |
val ML4_2lhs = //AFTER rewrite 3, rule 2, from ###ML try_rules lhs:
|
wneuper@5138
|
322 |
Appl(List(
|
wneuper@5138
|
323 |
Constant("_tuple"),
|
wneuper@5138
|
324 |
Variable("x"),
|
wneuper@5138
|
325 |
Appl(List(
|
wneuper@5138
|
326 |
Constant("_tuple_arg"),
|
wneuper@5138
|
327 |
Appl(List(
|
wneuper@5138
|
328 |
Constant("_tuple"),
|
wneuper@5138
|
329 |
Variable("y"),
|
wneuper@5138
|
330 |
Variable("z")))))))
|
wneuper@5138
|
331 |
var ast_pat = (ML4_2old_ast, ML4_2lhs)
|
wneuper@5138
|
332 |
// println("matches(ast_pat): " + matches(ast_pat))
|
wneuper@5138
|
333 |
// matches(ast_pat): Some((Map(x -> Variable(bbb), y -> Variable(ccc), z -> Appl(List(Constant(_tuple_arg), Variable(ddd)))),List()))
|
wneuper@5138
|
334 |
assertTrue((!(matches(ast_pat)).isEmpty))
|
wneuper@5138
|
335 |
|
wneuper@5138
|
336 |
val scala4_2old_ast = //AFTER rewrite 3, NO rule 1, from ###post.scala:
|
wneuper@5138
|
337 |
Appl(List(
|
wneuper@5138
|
338 |
Constant("_tuple"),
|
wneuper@5138
|
339 |
Variable("aaa"),
|
wneuper@5138
|
340 |
Appl(List(
|
wneuper@5138
|
341 |
Constant("_tuple_arg"), //<---vv pattern from ###ML 4. rule 2 NOT RECOGNISED
|
wneuper@5138
|
342 |
Appl(List(
|
wneuper@5138
|
343 |
Constant("_tuple"), //<---^^ pattern from ###ML 4. rule 2 NOT RECOGNISED
|
wneuper@5138
|
344 |
Variable("bbb"),
|
wneuper@5138
|
345 |
Appl(List(
|
wneuper@5138
|
346 |
Constant("_tuple_arg"), //<---vv pattern from ###ML 4. rule 2 NOT RECOGNISED
|
wneuper@5138
|
347 |
Appl(List(
|
wneuper@5138
|
348 |
Constant("_tuple"), //<---^^ pattern from ###ML 4. rule 2 NOT RECOGNISED
|
wneuper@5138
|
349 |
Variable("ccc"),
|
wneuper@5138
|
350 |
Appl(List(
|
wneuper@5138
|
351 |
Constant("_tuple_arg"),
|
wneuper@5138
|
352 |
Variable("ddd")))))))))))))
|
wneuper@5138
|
353 |
ast_pat = (scala4_2old_ast, ML4_2lhs)
|
wneuper@5138
|
354 |
// println("matches(ast_pat): " + matches(ast_pat))
|
wneuper@5138
|
355 |
// matches(ast_pat): Some((Map(x -> Variable(aaa), y -> Variable(bbb), z -> Appl(List(Constant(_tuple_arg), Appl(List(Constant(_tuple), Variable(ccc), Appl(List(Constant(_tuple_arg), Variable(ddd)))))))),List()))
|
wneuper@5138
|
356 |
assertTrue((!(matches(ast_pat)).isEmpty))
|
wneuper@5138
|
357 |
|
wneuper@5138
|
358 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_matches");
|
wneuper@5138
|
359 |
}
|
wneuper@5138
|
360 |
|
wneuper@5138
|
361 |
|
wneuper@5085
|
362 |
def test_update() {
|
wneuper@5085
|
363 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_update");
|
wneuper@5085
|
364 |
|
wneuper@5138
|
365 |
val ast =
|
wneuper@5138
|
366 |
/*List()*/ Appl(List(
|
wneuper@5138
|
367 |
/*List(1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5138
|
368 |
/*List(2)*/ Appl(List(
|
wneuper@5138
|
369 |
/*List(2,1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5138
|
370 |
/*List(2,2)*/ Variable("a"),
|
wneuper@5138
|
371 |
/*List(2,3)*/ Appl(List(
|
wneuper@5138
|
372 |
/*List(2,3,1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5138
|
373 |
/*List(2,3,2)*/ Variable("b"),
|
wneuper@5138
|
374 |
/*List(2,3,3)*/ Variable("c"))) )),
|
wneuper@5138
|
375 |
/*List(3)*/ Variable("d")))
|
wneuper@5138
|
376 |
|
wneuper@5085
|
377 |
assertEquals("a + (b + c) + d", math_string_of(ast))
|
wneuper@5100
|
378 |
assertEquals("X + d", math_string_of(add(List(2), Constant("X"), ast)))
|
wneuper@5100
|
379 |
assertEquals("X + (b + c) + d", math_string_of(add(List(2,2), Constant("X"), ast)))
|
wneuper@5100
|
380 |
assertEquals("a + (X + c) + d", math_string_of(add(List(2,3,2), Constant("X"), ast)))
|
wneuper@5100
|
381 |
assertEquals("a + (b + X ) + d", math_string_of(add(List(2,3,3), Constant("X"), ast)))
|
wneuper@5100
|
382 |
assertEquals("a + (b + c) + X ", math_string_of(add(List(3), Constant("X"), ast)))
|
wneuper@5085
|
383 |
|
wneuper@5100
|
384 |
assertEquals("X + Y + d", math_string_of(add(List(2),
|
wneuper@5086
|
385 |
Appl(List(
|
wneuper@5086
|
386 |
Constant("Groups.plus_class.plus"),
|
wneuper@5086
|
387 |
Variable("X"),
|
wneuper@5086
|
388 |
Variable("Y"))), ast)))
|
wneuper@5086
|
389 |
|
wneuper@5085
|
390 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_update");
|
wneuper@5085
|
391 |
}
|
wneuper@5085
|
392 |
|
wneuper@5149
|
393 |
def test_get_value() {
|
wneuper@5149
|
394 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_get_value");
|
wneuper@5149
|
395 |
|
wneuper@5149
|
396 |
val ast =
|
wneuper@5149
|
397 |
/*List()*/ Appl(List(
|
wneuper@5149
|
398 |
/*List(1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5149
|
399 |
/*List(2)*/ Appl(List(
|
wneuper@5149
|
400 |
/*List(2,1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5149
|
401 |
/*List(2,2)*/ Variable("a"),
|
wneuper@5149
|
402 |
/*List(2,3)*/ Appl(List(
|
wneuper@5149
|
403 |
/*List(2,3,1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5149
|
404 |
/*List(2,3,2)*/ Variable("b"),
|
wneuper@5149
|
405 |
/*List(2,3,3)*/ Variable("c"))) )),
|
wneuper@5149
|
406 |
/*List(3)*/ Variable("d")))
|
wneuper@5149
|
407 |
assertEquals("a + (b + c) + d", math_string_of(get_value (List(), ast)))
|
wneuper@5149
|
408 |
assertEquals("a", math_string_of(get_value (List(2,2), ast)))
|
wneuper@5149
|
409 |
assertEquals("b + c", math_string_of(get_value (List(2,3), ast)))
|
wneuper@5149
|
410 |
assertEquals("b", math_string_of(get_value (List(2,3,2), ast)))
|
wneuper@5149
|
411 |
|
wneuper@5149
|
412 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_get_value");
|
wneuper@5149
|
413 |
}
|
wneuper@5149
|
414 |
|
wneuper@5123
|
415 |
def test_math_string_of_arbitrary() {
|
wneuper@5123
|
416 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_math_string_of_arbitrary");
|
wneuper@5123
|
417 |
|
wneuper@5123
|
418 |
val arbitrary = Appl(List(Variable("a"), Constant("b"),
|
wneuper@5123
|
419 |
Appl(List(Constant("Groups.plus_class.plus"), Variable("c"),Variable("d"))),
|
wneuper@5123
|
420 |
Appl(List(Variable("y"),Variable("x"))) ))
|
wneuper@5123
|
421 |
assertEquals("a b (c + d) (y (x))", math_string_of(arbitrary))
|
wneuper@5123
|
422 |
|
wneuper@5123
|
423 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_math_string_of_arbitrary");
|
wneuper@5123
|
424 |
}
|
s1520454056@5197
|
425 |
}
|