diff options
Diffstat (limited to 'macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua')
-rw-r--r-- | macros/luatex/latex/luacas/tex/test/expressions/autosimplify.lua | 199 |
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 |