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"
|
wneuper@5123
|
6 |
import isac.gui.mawen.syntax.isabelle.XLibrary
|
wneuper@5088
|
7 |
import isac.gui.mawen.editor.TestDATAeditor
|
wneuper@5064
|
8 |
|
wneuper@5049
|
9 |
import junit.framework.TestCase
|
wneuper@5049
|
10 |
import org.junit.Assert._
|
wneuper@5049
|
11 |
|
wneuper@5049
|
12 |
|
wneuper@5049
|
13 |
class TestAst extends TestCase {
|
wneuper@5067
|
14 |
|
wneuper@5085
|
15 |
// x / y
|
wneuper@5085
|
16 |
def a1 = Appl(List(Constant("Fields.inverse_class.divide"), Variable ("x"), Variable ("y")))
|
wneuper@5085
|
17 |
|
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 |
|
wneuper@5085
|
21 |
// sin(a + b) / c
|
wneuper@5085
|
22 |
def a3 = Appl(List
|
wneuper@5085
|
23 |
(Constant("Fields.inverse_class.divide"),
|
wneuper@5085
|
24 |
Appl(List(Constant("sin"),
|
wneuper@5085
|
25 |
Appl(List(Constant("Groups.plus_class.plus"),
|
wneuper@5085
|
26 |
Variable("a"),
|
wneuper@5085
|
27 |
Variable("b")
|
wneuper@5085
|
28 |
))
|
wneuper@5085
|
29 |
))
|
wneuper@5085
|
30 |
,Variable ("c")
|
wneuper@5085
|
31 |
))
|
wneuper@5085
|
32 |
def a4 = Appl(List(Constant("Groups.plus_class.plus"), Appl(List(Constant("Groups.plus_class.plus"), Variable("a"), Variable("b"))), Variable("c")))
|
wneuper@5085
|
33 |
def a5 = Appl(List(Constant("Groups.plus_class.plus"), Variable("a"), Appl(List(Constant("Groups.plus_class.plus"), Variable("b"), Variable("c")))))
|
wneuper@5085
|
34 |
|
wneuper@5085
|
35 |
def test_prefix_string_of() {
|
wneuper@5085
|
36 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_prefix_string_of");
|
wneuper@5085
|
37 |
|
wneuper@5085
|
38 |
assertEquals(Ast.prefix_string_of(a1), "/ x y")
|
wneuper@5085
|
39 |
assertEquals(Ast.prefix_string_of(a2), "* a / b c")
|
wneuper@5085
|
40 |
assertEquals(Ast.prefix_string_of(a3), "/ sin + a b c")
|
wneuper@5085
|
41 |
|
wneuper@5085
|
42 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_prefix_string_of");
|
wneuper@5085
|
43 |
}
|
wneuper@5085
|
44 |
|
wneuper@5085
|
45 |
def test_math_string_of() {
|
wneuper@5085
|
46 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_math_string_of");
|
wneuper@5085
|
47 |
|
wneuper@5085
|
48 |
assertEquals(Ast.math_string_of(a1), "x / y")
|
wneuper@5085
|
49 |
assertEquals(Ast.math_string_of(a2), "a * (b / c)")
|
wneuper@5085
|
50 |
assertEquals(Ast.math_string_of(a3), "sin (a + b) / c")
|
wneuper@5085
|
51 |
|
wneuper@5085
|
52 |
assertEquals(Ast.math_string_of(a4), "a + b + c")
|
wneuper@5085
|
53 |
assertEquals(Ast.math_string_of(a5), "a + (b + c)")
|
wneuper@5085
|
54 |
|
wneuper@5085
|
55 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_math_string_of");
|
wneuper@5085
|
56 |
}
|
wneuper@5085
|
57 |
|
wneuper@5085
|
58 |
/*
|
wneuper@5085
|
59 |
* The examples for reference of Natalie Karl initially took terms,
|
wneuper@5085
|
60 |
* @see isac.gui.mawen.scalaterm.TestUtil.
|
wneuper@5085
|
61 |
* Here we check, whether term_to_ast + Ast.string_of give the same result.
|
wneuper@5085
|
62 |
*/
|
wneuper@5085
|
63 |
def test_examples_for_NK() {
|
wneuper@5085
|
64 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_examples_for_NK");
|
wneuper@5085
|
65 |
|
wneuper@5085
|
66 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t1)),
|
wneuper@5085
|
67 |
"aaa + bbb = processed_by_Isabelle_Isac ")
|
wneuper@5085
|
68 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t2)),
|
wneuper@5085
|
69 |
"a + 2 * b + 3 * (c + d)")
|
wneuper@5085
|
70 |
|
wneuper@5085
|
71 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t31)),
|
wneuper@5085
|
72 |
"aaa + bbb + ccc")
|
wneuper@5085
|
73 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t32)),
|
wneuper@5085
|
74 |
"aaa + (bbb + ccc)")
|
wneuper@5085
|
75 |
|
wneuper@5085
|
76 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t41)),
|
wneuper@5085
|
77 |
"Diff (x + sin (x ^ 2), x)")
|
wneuper@5085
|
78 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.t42)),
|
wneuper@5085
|
79 |
"d_d x (x + sin (x ^ 2))")
|
wneuper@5085
|
80 |
|
wneuper@5085
|
81 |
// MAWEN example for reference No.1
|
wneuper@5085
|
82 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt1())),
|
wneuper@5085
|
83 |
"Simplify (1 + 2 * x * (y + 3) / (4 * z * (y + 3)) + 5)")
|
wneuper@5085
|
84 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt3())),
|
wneuper@5085
|
85 |
"1 + 2 * x * (y + 3) / (4 * z * (y + 3)) + 5")
|
wneuper@5085
|
86 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt4())),
|
wneuper@5085
|
87 |
"1 + 2 * x / (4 * z) + 5")
|
wneuper@5085
|
88 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt5())),
|
wneuper@5085
|
89 |
"1 + x / (2 * z) + 5")
|
wneuper@5085
|
90 |
assertEquals(Ast.math_string_of(Syntax_Phases.term_to_ast(TestsDATA.tt6())),
|
wneuper@5085
|
91 |
"6 + x / (2 * z)")
|
wneuper@5085
|
92 |
|
wneuper@5085
|
93 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_examples_for_NK");
|
wneuper@5085
|
94 |
}
|
wneuper@5085
|
95 |
|
wneuper@5085
|
96 |
//test additional examples with BOX, CURSOR, GAP
|
wneuper@5085
|
97 |
def test_BOX_CURSOR_GAP() {
|
wneuper@5085
|
98 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_BOX_CURSOR_GAP");
|
wneuper@5085
|
99 |
|
wneuper@5088
|
100 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1))
|
wneuper@5088
|
101 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_2))
|
wneuper@5088
|
102 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_3))
|
wneuper@5085
|
103 |
|
wneuper@5088
|
104 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1_CURSOR))
|
wneuper@5088
|
105 |
assertEquals( "# + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1_CURSOR_GAP))
|
wneuper@5088
|
106 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_BOX_1_CURSOR_b))
|
wneuper@5085
|
107 |
|
wneuper@5088
|
108 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_CURSOR_BOX_3A))
|
wneuper@5088
|
109 |
assertEquals("aaa + bbb", Ast.math_string_of(TestDATAeditor.nest_CURSOR_BOX_3B))
|
wneuper@5085
|
110 |
|
wneuper@5085
|
111 |
|
wneuper@5088
|
112 |
assertEquals("d_d x x + d_d x (sin (x ^ 2))", Ast.math_string_of(TestDATAeditor.box_05))
|
wneuper@5088
|
113 |
assertEquals("d_d bdv (sin (u)) = cos (u) * d_d bdv u", Ast.math_string_of(TestDATAeditor.box_06))
|
wneuper@5088
|
114 |
assertEquals("d_d x x + cos (x ^ 2) * d_d x #", Ast.math_string_of(TestDATAeditor.box_07_with_cursor))
|
wneuper@5088
|
115 |
assertEquals("a + (# + c)", Ast.math_string_of(TestDATAeditor.box_gap_cursor))
|
wneuper@5088
|
116 |
assertEquals("#", Ast.math_string_of(TestDATAeditor.box_with_cursor_on_gap))
|
wneuper@5088
|
117 |
assertEquals("# + #", Ast.math_string_of(TestDATAeditor.in_1a))
|
wneuper@5088
|
118 |
assertEquals("a + # / #", Ast.math_string_of(TestDATAeditor.in_1b))
|
wneuper@5088
|
119 |
assertEquals("a + b / #", Ast.math_string_of(TestDATAeditor.in_1c))
|
wneuper@5085
|
120 |
|
wneuper@5085
|
121 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_BOX_CURSOR_GAP");
|
wneuper@5085
|
122 |
}
|
wneuper@5085
|
123 |
|
wneuper@5080
|
124 |
|
wneuper@5090
|
125 |
/* from Isabelle2016-1-MAWEN ast.ML:
|
wneuper@5090
|
126 |
* fun try_rules ((lhs, rhs) :: pats) ast = (*WN*)
|
wneuper@5090
|
127 |
*
|
wneuper@5090
|
128 |
* lemma "[aaa,bbb] = ddd" --- term_to_ast ---
|
wneuper@5090
|
129 |
* with types dropped in ast and rule.
|
wneuper@5090
|
130 |
*
|
wneuper@5090
|
131 |
* assert was too expensive at this moment.
|
wneuper@5090
|
132 |
*/
|
wneuper@5097
|
133 |
def test_list_normal() {
|
wneuper@5097
|
134 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_list_normal");
|
wneuper@5067
|
135 |
|
wneuper@5090
|
136 |
//======= 1.successful application
|
wneuper@5090
|
137 |
//###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
|
138 |
//###try_rules lhs: Appl[Constant("List.list.Cons"), Variable("x"), Constant("List.list.Nil"])
|
wneuper@5090
|
139 |
//###try_rules rhs: Appl[Constant("_list"), Variable("x"])
|
wneuper@5090
|
140 |
//------- ast in try_rules (from additional output):
|
wneuper@5090
|
141 |
var ast =
|
wneuper@5083
|
142 |
Ast.Appl(List(
|
wneuper@5090
|
143 |
Ast.Constant("List.list.Cons"),
|
wneuper@5090
|
144 |
Ast.Variable("bbb"),
|
wneuper@5090
|
145 |
Ast.Constant("List.list.Nil")))
|
wneuper@5090
|
146 |
var lhs =
|
wneuper@5090
|
147 |
Appl(List(
|
wneuper@5090
|
148 |
Constant("List.list.Cons"),
|
wneuper@5090
|
149 |
Variable("x"),
|
wneuper@5090
|
150 |
Constant("List.list.Nil")))
|
wneuper@5090
|
151 |
var rhs =
|
wneuper@5090
|
152 |
Appl(List(
|
wneuper@5090
|
153 |
Constant("_list"),
|
wneuper@5090
|
154 |
Variable("x")))
|
wneuper@5097
|
155 |
assertEquals(Ast.matches(ast, lhs), Some((Map("x" -> Variable("bbb")),List())))
|
wneuper@5097
|
156 |
// //--------------- tests BEFORE made local to normalize ---------------\\
|
wneuper@5097
|
157 |
//assertEquals(Ast.xtry(ast, "List.list.Cons"), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
158 |
//assertEquals(Ast.try_rules(XSyntax.print_rules("List.list.Cons"), ast), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
159 |
//assertEquals(Ast.try_rules(List((lhs, rhs)), ast), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
160 |
|
wneuper@5097
|
161 |
//assertEquals(Ast.rewrite(ast), Some(Appl(List(Constant("_list"), Variable("bbb")))))
|
wneuper@5097
|
162 |
//assertEquals(Ast.norm_root(ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5097
|
163 |
//assertEquals(Ast.norm(ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5097
|
164 |
//assertEquals(Ast.normal(ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5097
|
165 |
// \\--------------- tests BEFORE made local to normalize ---------------//
|
wneuper@5097
|
166 |
assertEquals(Ast.normalize(XSyntax.print_rules, ast), Appl(List(Constant("_list"), Variable("bbb"))))
|
wneuper@5090
|
167 |
|
wneuper@5090
|
168 |
//------- whole ast calling try_rules:
|
wneuper@5090
|
169 |
ast =
|
wneuper@5090
|
170 |
Ast.Appl(List(
|
wneuper@5090
|
171 |
Ast.Constant("List.list.Cons"),
|
wneuper@5083
|
172 |
Ast.Variable("aaa"),
|
wneuper@5083
|
173 |
Ast.Appl(List(
|
wneuper@5090
|
174 |
Ast.Constant("List.list.Cons"),
|
wneuper@5083
|
175 |
Ast.Variable("bbb"),
|
wneuper@5083
|
176 |
Ast.Appl(List(
|
wneuper@5083
|
177 |
Ast.Constant("List.list.Cons"),
|
wneuper@5083
|
178 |
Ast.Variable("ccc"),
|
wneuper@5090
|
179 |
Ast.Constant("List.list.Nil")))))))
|
wneuper@5097
|
180 |
assertEquals(Ast.matches(ast, lhs), None) //--> None: the rewriter calls try_rules!
|
wneuper@5097
|
181 |
// //--------------- tests BEFORE made local to normalize ---------------\\
|
wneuper@5097
|
182 |
//assertEquals(Ast.xtry(ast, "List.list.Cons"), None)
|
wneuper@5097
|
183 |
//assertEquals(Ast.try_rules(XSyntax.print_rules("List.list.Cons"), ast), None)
|
wneuper@5097
|
184 |
//assertEquals(Ast.try_rules(List((lhs, rhs)), ast), None)
|
wneuper@5080
|
185 |
|
wneuper@5097
|
186 |
//assertEquals(Ast.rewrite(ast), None)
|
wneuper@5097
|
187 |
//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
|
188 |
//assertEquals(Ast.normal(ast), Appl(List(Constant("_list"), Appl(List(Constant("_args"), Variable("aaa"), Appl(List(Constant("_args"), Variable("bbb"), Variable("ccc"))))))))
|
wneuper@5097
|
189 |
//assertEquals(Ast.normal(ast), Appl(List(Constant("_list"), Appl(List(Constant("_args"), Variable("aaa"), Appl(List(Constant("_args"), Variable("bbb"), Variable("ccc"))))))))
|
wneuper@5097
|
190 |
// \\--------------- tests BEFORE made local to normalize ---------------//
|
wneuper@5097
|
191 |
assertEquals(Ast.normalize(XSyntax.print_rules, ast),
|
wneuper@5097
|
192 |
Appl(List(
|
wneuper@5097
|
193 |
Constant("_list"), Appl(List(
|
wneuper@5097
|
194 |
Constant("_args"), Variable("aaa"), Appl(List(
|
wneuper@5097
|
195 |
Constant("_args"), Variable("bbb"), Variable("ccc"))))))))
|
wneuper@5098
|
196 |
|
wneuper@5098
|
197 |
/* output from Isabelle_Isac adds types to above structure:
|
wneuper@5098
|
198 |
Appl(List(
|
wneuper@5098
|
199 |
/*_list*/Constant("_list"), Appl(List(
|
wneuper@5098
|
200 |
/*_args*/ Constant("_args"), Appl(List(
|
wneuper@5098
|
201 |
Constant("_constrain"), Appl(List(
|
wneuper@5098
|
202 |
/* aaa */ Constant("_free"), Variable("aaa"))), Appl(List(
|
wneuper@5098
|
203 |
Constant("_ofsort"), Appl(List(
|
wneuper@5098
|
204 |
Constant("_tfree"), Variable("'a"))), Constant("\\<^class>HOL.type"))))), Appl(List(
|
wneuper@5098
|
205 |
/*_args*/ Constant("_args"), Appl(List(
|
wneuper@5098
|
206 |
Constant("_constrain"), Appl(List(
|
wneuper@5098
|
207 |
/* bbb */ Constant("_free"), Variable("bbb"))), Appl(List(
|
wneuper@5098
|
208 |
Constant("_ofsort"), Appl(List(
|
wneuper@5098
|
209 |
Constant("_tfree"), Variable("'a"))), Constant("\\<^class>HOL.type"))))), Appl(List(
|
wneuper@5098
|
210 |
Constant("_constrain"), Appl(List(
|
wneuper@5098
|
211 |
/* ccc */ Constant("_free"), Variable("ccc"))), Appl(List(
|
wneuper@5098
|
212 |
Constant("_ofsort"), Appl(List(
|
wneuper@5098
|
213 |
Constant("_tfree"), Variable("'a"))), Constant("\\<^class>HOL.type")))))))))))
|
wneuper@5098
|
214 |
*/
|
wneuper@5103
|
215 |
|
wneuper@5103
|
216 |
ast =
|
wneuper@5103
|
217 |
Appl(List(
|
wneuper@5103
|
218 |
Constant("_list"), Appl(List(
|
wneuper@5103
|
219 |
Constant("_args"), Variable("aaa"), Appl(List(
|
wneuper@5103
|
220 |
Constant("_args"), Variable("bbb"), Variable("ccc")))))))
|
wneuper@5103
|
221 |
assertEquals("[aaa, bbb, ccc]", Ast.math_string_of(ast))
|
wneuper@5097
|
222 |
|
wneuper@5097
|
223 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_list_normal");
|
wneuper@5067
|
224 |
}
|
wneuper@5085
|
225 |
|
wneuper@5085
|
226 |
val ast =
|
wneuper@5085
|
227 |
/*List()*/ Appl(List(
|
wneuper@5085
|
228 |
/*List(1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5085
|
229 |
/*List(2)*/ Appl(List(
|
wneuper@5085
|
230 |
/*List(2,1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5085
|
231 |
/*List(2,2)*/ Variable("a"),
|
wneuper@5085
|
232 |
/*List(2,3)*/ Appl(List(
|
wneuper@5085
|
233 |
/*List(2,3,1)*/ Constant("Groups.plus_class.plus"),
|
wneuper@5085
|
234 |
/*List(2,3,2)*/ Variable("b"),
|
wneuper@5085
|
235 |
/*List(2,3,3)*/ Variable("c"))) )),
|
wneuper@5085
|
236 |
/*List(3)*/ Variable("d")))
|
wneuper@5085
|
237 |
|
wneuper@5085
|
238 |
def test_update() {
|
wneuper@5085
|
239 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_update");
|
wneuper@5085
|
240 |
|
wneuper@5085
|
241 |
assertEquals("a + (b + c) + d", math_string_of(ast))
|
wneuper@5100
|
242 |
assertEquals("X + d", math_string_of(add(List(2), Constant("X"), ast)))
|
wneuper@5100
|
243 |
assertEquals("X + (b + c) + d", math_string_of(add(List(2,2), Constant("X"), ast)))
|
wneuper@5100
|
244 |
assertEquals("a + (X + c) + d", math_string_of(add(List(2,3,2), Constant("X"), ast)))
|
wneuper@5100
|
245 |
assertEquals("a + (b + X ) + d", math_string_of(add(List(2,3,3), Constant("X"), ast)))
|
wneuper@5100
|
246 |
assertEquals("a + (b + c) + X ", math_string_of(add(List(3), Constant("X"), ast)))
|
wneuper@5085
|
247 |
|
wneuper@5100
|
248 |
assertEquals("X + Y + d", math_string_of(add(List(2),
|
wneuper@5086
|
249 |
Appl(List(
|
wneuper@5086
|
250 |
Constant("Groups.plus_class.plus"),
|
wneuper@5086
|
251 |
Variable("X"),
|
wneuper@5086
|
252 |
Variable("Y"))), ast)))
|
wneuper@5086
|
253 |
|
wneuper@5085
|
254 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_update");
|
wneuper@5085
|
255 |
}
|
wneuper@5085
|
256 |
|
wneuper@5123
|
257 |
def test_math_string_of_arbitrary() {
|
wneuper@5123
|
258 |
println("/--BEGIN isac.gui.mawen.asttrans.TestAst#test_math_string_of_arbitrary");
|
wneuper@5123
|
259 |
|
wneuper@5123
|
260 |
val arbitrary = Appl(List(Variable("a"), Constant("b"),
|
wneuper@5123
|
261 |
Appl(List(Constant("Groups.plus_class.plus"), Variable("c"),Variable("d"))),
|
wneuper@5123
|
262 |
Appl(List(Variable("y"),Variable("x"))) ))
|
wneuper@5123
|
263 |
assertEquals("a b (c + d) (y (x))", math_string_of(arbitrary))
|
wneuper@5123
|
264 |
|
wneuper@5123
|
265 |
println("\\--END isac.gui.mawen.asttrans.TestAst#test_math_string_of_arbitrary");
|
wneuper@5123
|
266 |
}
|
wneuper@5085
|
267 |
} |