summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua')
-rw-r--r--macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua199
1 files changed, 199 insertions, 0 deletions
diff --git a/macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua b/macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua
new file mode 100644
index 0000000000..09ad9874cd
--- /dev/null
+++ b/macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua
@@ -0,0 +1,199 @@
+local a = BinaryOperation.ADDEXP
+ ({Integer(3),
+ Integer(5)})
+
+local b = BinaryOperation.MULEXP
+ ({BinaryOperation.ADDEXP
+ ({Integer(13),
+ Integer(12)}),
+ Integer(-4)})
+
+local c = BinaryOperation.DIVEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y")})
+
+local d = BinaryOperation.DIVEXP
+ ({BinaryOperation.ADDEXP
+ ({Integer(4),
+ Integer(-3)}),
+ SymbolExpression("y")})
+
+local e = BinaryOperation.ADDEXP
+ ({Integer(3),
+ Integer(4),
+ Integer(5),
+ Integer(6)})
+
+starttest("expression construction")
+testeq(a, "3 + 5")
+testeq(b, "(13 + 12) * -4")
+testeq(c, "x / y")
+testeq(d, "(4 + -3) / y")
+testeq(e, "3 + 4 + 5 + 6")
+endtest()
+
+starttest("expression evaluation...")
+testeq(a:evaluate(), dparse("8"))
+testeq(b:evaluate(), dparse("-100"))
+testeq(c:evaluate(), dparse("(x / y)"))
+testeq(d:evaluate(), dparse("(1 / y)"))
+testeq(e:evaluate(), dparse("18"))
+endtest()
+
+local g = BinaryOperation.POWEXP
+ ({Integer(0),
+ SymbolExpression("x")})
+
+local h = BinaryOperation.POWEXP
+ ({Integer(1),
+ SymbolExpression("x")})
+
+local i = BinaryOperation.POWEXP
+ ({SymbolExpression("x"),
+ Integer(0)})
+
+local j = BinaryOperation.POWEXP
+ ({SymbolExpression("x"),
+ Integer(1)})
+
+local k = BinaryOperation.POWEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y")})
+
+local l = BinaryOperation.POWEXP
+ ({BinaryOperation.POWEXP
+ ({BinaryOperation.POWEXP
+ ({SymbolExpression("x"),
+ Integer(3)}),
+ Integer(4)}),
+ Integer(5)})
+
+local m = BinaryOperation.POWEXP
+ ({BinaryOperation.MULEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y")}),
+ SymbolExpression("a")})
+
+ local n = BinaryOperation.MULEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y"),
+ Integer(0),
+ Integer(-2)
+ })
+
+local o = BinaryOperation.MULEXP
+ ({SymbolExpression("x"),
+ BinaryOperation.MULEXP
+ ({SymbolExpression("y"),
+ SymbolExpression("z")})})
+
+local p = BinaryOperation.MULEXP
+ ({SymbolExpression("x")})
+
+local q = BinaryOperation.MULEXP
+ ({SymbolExpression("x"), SymbolExpression("x"), SymbolExpression("x"), SymbolExpression("x")})
+
+local r = BinaryOperation.MULEXP
+ ({SymbolExpression("x"), Integer(3), SymbolExpression("a")})
+
+ local s = BinaryOperation.ADDEXP
+ ({SymbolExpression("x")})
+
+local t = BinaryOperation.ADDEXP
+ ({SymbolExpression("x"),
+ BinaryOperation.ADDEXP
+ ({Integer(3),
+ SymbolExpression("y")})})
+
+local u = BinaryOperation.ADDEXP
+ ({BinaryOperation.MULEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y")}),
+ BinaryOperation.MULEXP
+ ({SymbolExpression("y"),
+ SymbolExpression("x")})})
+
+local v = BinaryOperation.ADDEXP
+ ({Integer(3),
+ BinaryOperation.ADDEXP
+ ({BinaryOperation.MULEXP
+ ({Integer(2),
+ BinaryOperation.POWEXP
+ ({SymbolExpression("x"),
+ Integer(2)})}),
+ BinaryOperation.ADDEXP
+ ({BinaryOperation.MULEXP
+ ({Integer(1),
+ SymbolExpression("y")}),
+ BinaryOperation.MULEXP
+ ({Integer(0),
+ SymbolExpression("x")})})}),
+ Integer(6)})
+
+ local w = BinaryOperation.MULEXP
+ ({BinaryOperation.DIVEXP
+ ({Integer(1),
+ SymbolExpression("x")}),
+ SymbolExpression("x")})
+
+local x = BinaryOperation.MULEXP
+ ({BinaryOperation.DIVEXP
+ ({SymbolExpression("y"),
+ SymbolExpression("x")}),
+ BinaryOperation.DIVEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y")})})
+
+local y = BinaryOperation.MULEXP
+ ({BinaryOperation.DIVEXP
+ ({Integer(1),
+ Integer(3)}),
+ SymbolExpression("x")})
+
+local z = BinaryOperation.ADDEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y"),
+ BinaryOperation.SUBEXP
+ ({SymbolExpression("x"),
+ SymbolExpression("y")})})
+
+local A = dparse("(-aa-x)+(x+aa)")
+
+starttest("expression autosimplification")
+testeq(g:autosimplify(), parse("0"), g)
+testeq(h:autosimplify(), parse("1"), h)
+testeq(i:autosimplify(), parse("1"), i)
+testeq(j:autosimplify(), parse("x"), j)
+testeq(k:autosimplify(), parse("x ^ y"), k)
+testeq(l:autosimplify(), parse("(x ^ 60)"), l)
+testeq(m:autosimplify(), parse("((x * y) ^ a)"), m)
+testeq(n:autosimplify(), parse("0"), n)
+testeq(o:autosimplify(), parse("(x * y * z)"), o)
+testeq(p:autosimplify(), parse("x"), p)
+testeq(q:autosimplify(), parse("(x ^ 4)"), q)
+testeq(r:autosimplify(), parse("(3 * a * x)"), r)
+testeq(s:autosimplify(), parse("x"), s)
+testeq(t:autosimplify(), parse("(3 + x + y)"), t)
+testeq(u:autosimplify(), parse("(2 * x * y)"), u)
+testeq(v:autosimplify(), parse("(9 + (2 * (x ^ 2)) + y)"), v)
+testeq(w:autosimplify(), parse("1"), w)
+testeq(x:autosimplify(), parse("1"), x)
+testeq(y:autosimplify(), parse("(1/3 * x)"), y)
+testeq(z:autosimplify(), parse("(2 * x)"), z)
+testeq(A:autosimplify(), parse("0"), A)
+endtest()
+
+
+local aa = SymbolExpression("x") + SymbolExpression("y") + SymbolExpression("z")
+local ab = -(SymbolExpression("x") / SymbolExpression("y"))
+local ac = Integer(2)*SymbolExpression("x")*SymbolExpression("y") - Integer(3)*SymbolExpression("x")*SymbolExpression("z")
+
+starttest("metamethod expressions")
+
+testeq(aa, dparse("(x + y) + z"))
+testeq(aa:autosimplify(), parse("(x + y + z)"), aa)
+testeq(ab, dparse("- (x / y)"))
+testeq(ab:autosimplify(), parse("(-1 * x * (y ^ -1))"), ab)
+testeq(ac:autosimplify(), parse("((2 * x * y) + (-3 * x * z))"), ac)
+
+endtest() \ No newline at end of file