summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/luacas/tex/test/polynomials/polynomialmod.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/luacas/tex/test/polynomials/polynomialmod.lua')
-rw-r--r--macros/luatex/latex/luacas/tex/test/polynomials/polynomialmod.lua76
1 files changed, 76 insertions, 0 deletions
diff --git a/macros/luatex/latex/luacas/tex/test/polynomials/polynomialmod.lua b/macros/luatex/latex/luacas/tex/test/polynomials/polynomialmod.lua
new file mode 100644
index 0000000000..1906ad2d72
--- /dev/null
+++ b/macros/luatex/latex/luacas/tex/test/polynomials/polynomialmod.lua
@@ -0,0 +1,76 @@
+local a = PolynomialRing({IntegerModN(Integer(1), Integer(11)),
+ IntegerModN(Integer(6), Integer(11)),
+ IntegerModN(Integer(1), Integer(11)),
+ IntegerModN(Integer(9), Integer(11)),
+ IntegerModN(Integer(1), Integer(11))}, "y")
+
+local b = PolynomialRing({IntegerModN(Integer(7), Integer(11)),
+ IntegerModN(Integer(7), Integer(11)),
+ IntegerModN(Integer(6), Integer(11)),
+ IntegerModN(Integer(2), Integer(11)),
+ IntegerModN(Integer(1), Integer(11))}, "y")
+
+local q = PolynomialRing({IntegerModN(Integer(2), Integer(13)),
+ IntegerModN(Integer(6), Integer(13)),
+ IntegerModN(Integer(4), Integer(13))}, "z")
+
+local p = PolynomialRing({IntegerModN(Integer(4), Integer(13)),
+ IntegerModN(Integer(11), Integer(13)),
+ IntegerModN(Integer(1), Integer(13)),
+ IntegerModN(Integer(12), Integer(13)),
+ IntegerModN(Integer(1), Integer(13))}, "x")
+
+local r = PolynomialRing({IntegerModN(Integer(1), Integer(3)),
+ IntegerModN(Integer(0), Integer(3)),
+ IntegerModN(Integer(0), Integer(3)),
+ IntegerModN(Integer(2), Integer(3)),
+ IntegerModN(Integer(0), Integer(3)),
+ IntegerModN(Integer(0), Integer(3)),
+ IntegerModN(Integer(1), Integer(3))}, "x")
+
+local s = PolynomialRing({IntegerModN(Integer(1), Integer(5)),
+ IntegerModN(Integer(1), Integer(5)),
+ IntegerModN(Integer(1), Integer(5)),
+ IntegerModN(Integer(1), Integer(5)),
+ IntegerModN(Integer(1), Integer(5))}, "x")
+
+local t = PolynomialRing({IntegerModN(Integer(1), Integer(7))}, "x"):multiplyDegree(7) - PolynomialRing({IntegerModN(Integer(1), Integer(7))}, "x"):multiplyDegree(1)
+
+local u = PolynomialRing({IntegerModN(Integer(1), Integer(13)),
+ IntegerModN(Integer(5), Integer(13)),
+ IntegerModN(Integer(6), Integer(13)),
+ IntegerModN(Integer(5), Integer(13)),
+ IntegerModN(Integer(1), Integer(13))}, "x")
+
+local v = PolynomialRing({IntegerModN(Integer(24), Integer(7)),
+ IntegerModN(Integer(50), Integer(7)),
+ IntegerModN(Integer(59), Integer(7)),
+ IntegerModN(Integer(60), Integer(7)),
+ IntegerModN(Integer(36), Integer(7)),
+ IntegerModN(Integer(10), Integer(7)),
+ IntegerModN(Integer(1), Integer(7))}, "z")
+
+starttest("modular polynomial operations")
+testeq(q*q, "3z^4+9z^3+0z^2+11z^1+4z^0")
+testeq(PolynomialRing.gcd(a, b), "1y^0")
+local Q, R, S = PolynomialRing.extendedgcd(a, b)
+testeq(Q, "1y^0")
+testeq(R, "4y^3+5y^2+1y^1+3y^0")
+testeq(S, "7y^3+0y^2+7y^1+6y^0")
+endtest()
+
+starttest("modular square free factoring")
+testeq(p:squarefreefactorization(), Integer(1) * BinaryOperation.POWEXP({(PolynomialRing({Integer(2), Integer(6), Integer(1)}, SymbolExpression("x"))), Integer(2)}))
+testeq(r:squarefreefactorization(), Integer(1) * BinaryOperation.POWEXP({(PolynomialRing({Integer(1), Integer(0), Integer(0), Integer(1)}, SymbolExpression("x"))), Integer(2)}))
+testeq(q:squarefreefactorization(), Integer(4) * BinaryOperation.POWEXP({(PolynomialRing({Integer(7), Integer(8), Integer(1)}, SymbolExpression("z"))), Integer(1)}))
+testeq(s:squarefreefactorization(), Integer(1) * BinaryOperation.POWEXP({(PolynomialRing({Integer(4), Integer(1)}, SymbolExpression("x"))), Integer(4)}))
+endtest()
+
+starttest("modular polynomial factoring")
+testeq(q:factor(), BinaryOperation.MULEXP({Integer(4), BinaryOperation.POWEXP({PolynomialRing({Integer(7), Integer(1)}, SymbolExpression("z")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(1), Integer(1)}, SymbolExpression("z")), Integer(1)})}), q)
+testeq(p:factor(), Integer(1) * BinaryOperation.POWEXP({PolynomialRing({Integer(2), Integer(6), Integer(1)}, SymbolExpression("x")), Integer(2)}), p)
+testeq(r:factor(), Integer(1) * BinaryOperation.POWEXP({(PolynomialRing({Integer(1), Integer(0), Integer(0), Integer(1)}, SymbolExpression("x"))), Integer(2)}), r)
+testeq(t:factor(), BinaryOperation.MULEXP({Integer(1), BinaryOperation.POWEXP({PolynomialRing({Integer(0), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(6), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(5), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(4), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(3), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(2), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(1), Integer(1)}, SymbolExpression("x")), Integer(1)})}), t)
+testeq(u:factor(), BinaryOperation.MULEXP({Integer(1), BinaryOperation.POWEXP({PolynomialRing({Integer(11), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(10), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(6), Integer(1)}, SymbolExpression("x")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(4), Integer(1)}, SymbolExpression("x")), Integer(1)})}), u)
+testeq(v:factor(), BinaryOperation.MULEXP({Integer(1), BinaryOperation.POWEXP({PolynomialRing({Integer(1), Integer(1)}, SymbolExpression("z")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(2), Integer(1)}, SymbolExpression("z")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(1), Integer(0), Integer(1)}, SymbolExpression("z")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(4), Integer(1)}, SymbolExpression("z")), Integer(1)}), BinaryOperation.POWEXP({PolynomialRing({Integer(3), Integer(1)}, SymbolExpression("z")), Integer(1)})}), v)
+endtest() \ No newline at end of file