9 [ .name = "gb-groebner_basis_of-01", .fn = gb01 ],
10 [ .name = "gb-groebner_basis_of-02", .fn = gb02 ],
11 [ .name = "gb-lcm-01", .fn = lcm01 ],
12 [ .name = "gb-lcm-02", .fn = lcm02 ],
17 var inputs : (byte[:][:], byte[:][:])[:] = [
19 Gröbner bases are not unique, so any change to the
20 algorithm may distort these. Therefore, we try not to
21 copy too many input/outputs exactly.
23 ([ "x" ][:], [ "x" ][:]),
28 ([ "x", "x", "x", "x", "x^2", "x", "x^34", "x", "x^2", ][:],
31 ([ "x^3 - 2*x*y", "x^2*y - 2*y^2 + x" ][:],
32 [ "x^2", "x*y", "y^2 - 1/2 x" ][:]),
34 ([ "x^2 - y", "x^3 - x" ][:],
35 [ "x^2 - y", "x*y - x", "y^2 - y" ][:]),
41 std.slpush(&F, std.try(yakmo.polynomialfromS(ss)))
46 std.slpush(&Gexp, std.try(yakmo.polynomialfromS(ss)))
50 var Gact = yakmo.groebner_basis_of(F)
51 testr.check(c, Gexp.len == Gact.len, "expected Gröbner basis for {} to be {}, was {}", Fs, Gexp, Gact)
53 for var j = 0; j < Gexp.len; ++j
54 testr.check(c, std.eq(Gexp[j], Gact[j]), "expected Gröbner basis, elt {} for {} to be {}, was {}", j, Fs, Gexp[j], Gact[j])
60 var inputs : byte[:][:][:] = [
61 [ "x^2 - 2*y^2", "x*y - 3" ][:],
62 [ "-1 + 2*x*z - x^2", "3*x - 2*y + y*z", "1 + 2*y - x*z" ][:],
63 [ "x + 1", "x + 2", "3*y - 2*x", "2*y - x" ][:],
64 [ "x + 1", "x + 2", "3*y - 2*x", "2*y - x", "z" ][:],
65 [ "x^5 - x^4*y + 3*x^4*z - x^3*y*z - x^2*z^2 + 2*x^3*z^2 + x*y*z^2 - 3*x*z^3 + y*z^3 - 2*z^4", "x*y + 2*x^2*y + x^3*y - z - 2*x*z - x^2*z", ][:],
66 [ "x*y - y + z", "y", ][:],
67 [ "x^2*y - x*y^2", "y^3 + x*y^2*z", ][:],
68 [ "x^2*y - x*y^2 - x*z + y*z", "4*x*y^3 - 4*y^4 + x*y^2*z + 7*y^3*z + 4*x*y*z^2 - 2*y^2*z^2 + x*z^3 + 7*y*z^3 + 2*z^4", "16*y^4 + 8*y^3*z + 17*y^2*z^2 + 8*y*z^3 + z^4", ][:],
69 [ "x^4*y - x^2*y^2 + x^3*y*z - x*y^2*z", "x^2 + x^3 + 2*x*z + 2*x^2*z + z^2 + x*z^2", "-2*x*y + 3*x^2*y + 2*z - 3*x*z", "x*y + 2*x^2*y + x^3*y - z - 2*x*z - x^2*z", ][:],
70 [ "x^2*y + x^3*y - x*y^2", "x*y^3 + x*y*z^2", "-2*x^3 + 3*x^4 + 2*z^2 - 3*x*z^2", "-2*x^3 + 3*x^4 + 2*z^2", ][:],
71 [ "4*x^2*y^2 - 4*x*y^3 + x^2*y*z + 7*x*y^2*z + 2*x*y*z^2", "x^2*y^3 - x*y^4 - x*y^2*z + y^3*z + x^2*y*z^2 - x*y^2*z^2 - x*z^3 + y*z^3", "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z + 2*x^3*y*z - y^2*z - 2*x*y^2*z - 2*x^2*z^2 + 2*y*z^2", "x^2*y - x*y^2 + 2*x*y*z", ][:],
72 [ "x^4 - x^3*y - x*z^2 + y*z^2", "x^5*y - x^4*y^2 - x^4*z + x^3*y*z + 2*x^4*y*z - 2*x^3*z^2 - x^2*y*z^2 + x*y^2*z^2 + x*z^3 - y*z^3 - 2*x*y*z^3 + 2*z^4", "x^2*y^3 - x*y^4 + x^2*y*z^2 - x*y^2*z^2", "x^4*y + x^5*y - x^3*z - x^4*z - x*y*z^2 - x^2*y*z^2 + z^3 + x*z^3", ][:],
73 [ "x^5*y - x^4*y^2", "x^2*y + x^3*y - x*y^2", "x^4*y^3 + x^4*y*z^2", ][:],
74 [ "x^2 - x - x^2*z^2", "x^3 - x*z^2", "x*y - z", ][:],
75 [ "x^2 - x^2*z^2", "x^3 - x*z^2", "x*y - z", ][:],
76 [ "x^2 - x - x^2*z^2", "x^4*y^3 + x^3 - x*y^3*z^2 - x", "x*y - z", ][:],
79 There should be nothing wrong with these random
80 tests, but they take forever. Save them for when you
81 get a real implementation.
83 // [ "x^5*y - x^4*y^2 - x^2*y*z^2 + x*y^2*z^2", "x^2*y + x^3*y - x*y^2 - x^2*y^2", "x^4*y^3 + x^4*y*z^2 - x*y^3*z^2 - x*y*z^4", "x*y + x^2*y - z - x*z", ][:],
84 // [ "t^5*X^2 - 2*t^5*X*Y + t^5*Y^2", "X^2 Y + X^2 Z + 2 X Y^2 + 2 X Y Z + Y^3 + Y^2 Z - t^5 X^2 Y - t^5 X^2 Z - 2 t^5 X Y^2 - 2 t^5 X Y Z - t^5 Y^3 - t^5 Y^2 Z", ][:],
85 // [ "x z + y z + 2 x^2 z + 2 x y z + x^3 z + x^2 y z", "-x^2 + 2 x y - y^2 + x^3 - 2 x^2 y + x y^2 + x^2 z - 2 x y z + y^2 z - x^3 z + 2 x^2 y z - x y^2 z"][:],
86 // [ "x^2*y + x^3*y - x*y^2 - x^2*y^2 + 2*x*y*z + 2*x^2*y*z", "x*y^3 + x*y*z^2", "-2*x^3 + 3*x^4 + 2*z^2 - 3*x*z^2", "-2*x^3 + 3*x^4 + 2*z^2 - 3*x*z^2", ][:],
87 // [ "x^5 - x^4*y + 3*x^4*z - x^3*y*z - x^2*z^2 + 2*x^3*z^2 + x*y*z^2 - 3*x*z^3 + y*z^3 - 2*z^4", "x^4*y - x^3*z - x*y*z^2 + z^3", "4*x^2*y^2 - 4*x*y^3 + x^2*y*z + 7*x*y^2*z + 2*x*y*z^2", "x^3*y^2 - x^2*y^3 - x^2*y*z + x*y^2*z", ][:],
88 // [ "-2*x*y^2 + 3*x^2*y^2 + 2*y^3 - 3*x*y^3 - 4*y^2*z + 6*x*y^2*z - 2*x*z^2 + 3*x^2*z^2 + 2*y*z^2 - 3*x*y*z^2 - 4*z^3 + 6*x*z^3", "x^6*y - x^4*y^2 - x^5*z + x^3*y*z - x^3*y*z^2 + x*y^2*z^2 + x^2*z^3 - y*z^3", "4*x^4*y + x^4*z + 4*x^3*y*z + x^3*z^2 - 4*x*y*z^2 - x*z^3 - 4*y*z^3 - z^4", "4*x^4*y + x^4*z + 4*x^3*y*z + x^3*z^2 - 4*x*y*z^2 - x*z^3 - 4*y*z^3 - z^4", ][:],
89 // [ "x^3 + x^4 - x*y - 2*x^2*y - x^3*y + y^2 + x*y^2 + 2*x^2*z + 2*x^3*z - 2*y*z - 2*x*y*z", "1 + x", "x^3 + x^4 - x*y - 2*x^2*y - x^3*y + y^2 + x*y^2", "x^4*y + x^5*y - x^3*z - x^4*z - x*y*z^2 - x^2*y*z^2 + z^3 + x*z^3", ][:],
90 // [ "x^2*y - x*y^2 - x*z + y*z", "-2*x^3 + x^4 + 3*x^5 + 2*z^2 - x*z^2 - 3*x^2*z^2", "x^5*y - x^4*y^2 - x^4*z + x^3*y*z + 2*x^4*y*z - 2*x^3*z^2 - x^2*y*z^2 + x*y^2*z^2 + x*z^3 - y*z^3 - 2*x*y*z^3 + 2*z^4", "-2 - x + 4*x^2 + 3*x^3", ][:],
92 // [ "-2*x^3 + 3*x^4 + 2*z^2 - 3*x*z^2", "x^3*y - x*y^2", "x^3*y^2 + x^4*y^2 + x^3*z^2 + x^4*z^2 - y^2*z^2 - x*y^2*z^2 - z^4 - x*z^4", "-2*x + x^2 + 3*x^3 + 2*y - x*y - 3*x^2*y - 4*z + 2*x*z + 6*x^2*z", ][:],
93 // [ "x^6*y - x^4*y^2 - x^3*y*z^2 + x*y^2*z^2", "x^4*y^3 + x^4*y*z^2 - x*y^3*z^2 - x*y*z^4", "4*x^4*y + x^4*z + 4*x^3*y*z + x^3*z^2 - 4*x*y*z^2 - x*z^3 - 4*y*z^3 - z^4", "x^2 + x^3 + 2*x*z + 2*x^2*z + z^2 + x*z^2", ][:],
94 // [ "x^4*y^3 + x^4*y*z^2 - x*y^3*z^2 - x*y*z^4", "x^3*y^2 + x^4*y^2 + x^3*z^2 + x^4*z^2 - y^2*z^2 - x*y^2*z^2 - z^4 - x*z^4", "x^5 - 2*x^4*y + x^3*y^2 - x^2*z^2 + 2*x*y*z^2 - y^2*z^2", "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z + 2*x^3*y*z - y^2*z - 2*x*y^2*z - 2*x^2*z^2 + 2*y*z^2", ][:],
95 // [ "", "x^4*y^2 - x^3*y^3 + 2*x^3*y^2*z + x^4*z^2 - x^3*y*z^2 - x*y^2*z^2 + y^3*z^2 + 2*x^3*z^3 - 2*y^2*z^3 - x*z^4 + y*z^4 - 2*z^5", "x^2 - 2*x*y + y^2", "-2 - x + 4*x^2 + 3*x^3", ][:],
96 // [ "16*x^2*y^2 - 16*y^3 + 8*x^2*y*z - 8*y^2*z + x^2*z^2 - y*z^2", "x^3*y^2 - x*y^3 - x^2*y^3 + y^4 + 2*x^2*y^2*z - 2*y^3*z + x^3*z^2 - x*y*z^2 - x^2*y*z^2 + y^2*z^2 + 2*x^2*z^3 - 2*y*z^3", "-2*x + x^2 + 3*x^3 + 2*y - x*y - 3*x^2*y - 4*z + 2*x*z + 6*x^2*z", "x^3*y^3 - x^2*y^2*z", ][:],
97 // [ "x^3 + x^4 - x*y - 2*x^2*y - x^3*y + y^2 + x*y^2", "x^3 - z^2", "x^4 + x^5 - x^3*y - x^4*y - x*z^2 - x^2*z^2 + y*z^2 + x*y*z^2", "x^4*y - x^2*y^2 + x^3*y*z - x*y^2*z", ][:],
98 // [ "4*x^2*y^2 - 4*x*y^3 + x^2*y*z + 7*x*y^2*z + 2*x*y*z^2", "x^3*y - x^2*y^2 - x^2*z + x*y*z + x^2*y*z - x*y^2*z - x*z^2 + y*z^2", "x^2 + 2*x^3 + x^4 - y - 2*x*y - x^2*y", "x^3 + x^4 - x*y - 2*x^2*y - x^3*y + y^2 + x*y^2 + 2*x^2*z + 2*x^3*z - 2*y*z - 2*x*y*z", ][:],
99 // [ "-2*x^3 + 3*x^4 + 2*x*y - x^2*y - 3*x^3*y - 2*y^2 + 3*x*y^2", "-2*x^4*y + 3*x^5*y + 2*x^3*z - 3*x^4*z + 2*x*y*z^2 - 3*x^2*y*z^2 - 2*z^3 + 3*x*z^3", "x^5*y - x^4*y^2 - x^4*z + x^3*y*z + 2*x^4*y*z - 2*x^3*z^2 - x^2*y*z^2 + x*y^2*z^2 + x*z^3 - y*z^3 - 2*x*y*z^3 + 2*z^4", "x^3*y - 2*x^2*y^2 + x*y^3 - x^2*z + 2*x*y*z + 4*x^2*y*z - y^2*z - 4*x*y^2*z - 4*x*z^2 + 4*y*z^2 + 4*x*y*z^2 - 4*z^3", ][:],
100 // [ "-2*x*y^2 + 3*x^2*y^2 - 2*y^2*z + 3*x*y^2*z - 2*x*z^2 + 3*x^2*z^2 - 2*z^3 + 3*x*z^3", "x*y + x^2*y", "x^3*y - x*y^2 - x^2*z + y*z", "16*x*y^3 - 16*y^2*z + 8*x*y^2*z - 8*y*z^2 + x*y*z^2 - z^3", ][:],
101 // [ "x^5 - x^4*y + 3*x^4*z - x^3*y*z - x^2*z^2 + 2*x^3*z^2 + x*y*z^2 - 3*x*z^3 + y*z^3 - 2*z^4", "4*y^3 + y^2*z + 4*y*z^2 + z^3", "x^4*y^2 - x^3*y^3 + 2*x^3*y^2*z + x^4*z^2 - x^3*y*z^2 - x*y^2*z^2 + y^3*z^2 + 2*x^3*z^3 - 2*y^2*z^3 - x*z^4 + y*z^4 - 2*z^5", "x*y + 2*x^2*y + x^3*y - z - 2*x*z - x^2*z", ][:],
102 // [ "4*x*y + 4*x^2*y - 4*y^2 - 4*x*y^2 + x*z + x^2*z + 7*y*z + 7*x*y*z + 2*z^2 + 2*x*z^2", "x^4*y - x^2*y^2 + x^3*y*z - x*y^2*z", "4*x^2*y - 4*x*y^2 + x^2*z + 11*x*y*z - 4*y^2*z + 3*x*z^2 + 7*y*z^2 + 2*z^3", "x^6*y - x^4*y^2 - x^3*y*z^2 + x*y^2*z^2", ][:],
103 // [ "x^6*y - x^4*y^2 - x^5*z + x^3*y*z - x^3*y*z^2 + x*y^2*z^2 + x^2*z^3 - y*z^3", "x^3*y - x^2*z + 2*x^2*y*z - 2*x*z^2 + x*y*z^2 - z^3", "4*x^4*y + x^4*z + 4*x^3*y*z + x^3*z^2 - 4*x*y*z^2 - x*z^3 - 4*y*z^3 - z^4", "4*x^2*y - 8*x*y^2 + 4*y^3 + x^2*z - 2*x*y*z + y^2*z", ][:],
104 // [ "x^2*y^3 - x*y^4 - x*y^2*z + y^3*z + x^2*y*z^2 - x*y^2*z^2 - x*z^3 + y*z^3", "x^4*y - x^3*z - x*y*z^2 + z^3", "x^2*y^3 + x*y^3*z + x^2*y*z^2 + x*y*z^3", "x^4*y^3 + x^4*y*z^2 - x*y^3*z^2 - x*y*z^4", ][:],
105 // [ "x^3*y - x*y^2 - x^2*z + y*z", "x^4 + x^5 - x^3*y - x^4*y - x*z^2 - x^2*z^2 + y*z^2 + x*y*z^2", "-2 - x + 4*x^2 + 3*x^3", "x^3*y - 2*x^2*y^2 + x*y^3 - x^2*z + 2*x*y*z + 4*x^2*y*z - y^2*z - 4*x*y^2*z - 4*x*z^2 + 4*y*z^2 + 4*x*y*z^2 - 4*z^3", ][:],
106 // [ "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z + 2*x^3*y*z - y^2*z - 2*x*y^2*z - 2*x^2*z^2 + 2*y*z^2", "x^3 + x^4 - x*y - 2*x^2*y - x^3*y + y^2 + x*y^2 + 2*x^2*z + 2*x^3*z - 2*y*z - 2*x*y*z", "x*y^2 - y^3 + 2*y^2*z + x*z^2 - y*z^2 + 2*z^3", "1 + x", ][:],
107 // [ "x^3 - z^2", "x^3*y - 2*x^2*y^2 + x*y^3 - x^2*z + 2*x*y*z + 4*x^2*y*z - y^2*z - 4*x*y^2*z - 4*x*z^2 + 4*y*z^2 + 4*x*y*z^2 - 4*z^3", "-2*x^3 + 3*x^4 + 2*z^2 - 3*x*z^2", "x^3*y - x*y^2", ][:],
108 // [ "x^2*y^2 - 2*x*y^3 + y^4 + 4*x*y^2*z - 4*y^3*z + x^2*z^2 - 2*x*y*z^2 + 5*y^2*z^2 + 4*x*z^3 - 4*y*z^3 + 4*z^4", "x^2*y + x^3*y - x*y^2 - x^2*y^2 + 2*x*y*z + 2*x^2*y*z", "x^3*y - x^2*y^2 + 3*x^2*y*z - x*y^2*z + 2*x*y*z^2", "x^3*y^2 - x^2*y^3 - 2*x^2*y*z + 2*x*y^2*z + x*z^2 - y*z^2", ][:],
109 // [ "x^2*y - x*y^2 - x*z + y*z", "x^3*y^2 + x^4*y^2 + x^3*z^2 + x^4*z^2 - y^2*z^2 - x*y^2*z^2 - z^4 - x*z^4", "x^2*y + x^3*y - x*y^2 - x^2*y^2 + 2*x*y*z + 2*x^2*y*z", "x*y + 2*x^2*y + x^3*y - z - 2*x*z - x^2*z", ][:],
110 // [ "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z - y^2*z", "x*y^2 - y^3 + 2*y^2*z + x*z^2 - y*z^2 + 2*z^3", "x^5*y - x^4*y^2 - x^4*z + x^3*y*z + 2*x^4*y*z - 2*x^3*z^2 - x^2*y*z^2 + x*y^2*z^2 + x*z^3 - y*z^3 - 2*x*y*z^3 + 2*z^4", "x^3*y - 2*x^2*y^2 + x*y^3 - x^2*z + 2*x*y*z - y^2*z", ][:],
111 // [ "x^5*y - x^4*y^2 - x^4*z + x^3*y*z + 2*x^4*y*z - 2*x^3*z^2 - x^2*y*z^2 + x*y^2*z^2 + x*z^3 - y*z^3 - 2*x*y*z^3 + 2*z^4", "x^4*y + x^5*y - x^3*z - x^4*z - x*y*z^2 - x^2*y*z^2 + z^3 + x*z^3", "x^6*y - x^4*y^2 - x^5*z + x^3*y*z - x^3*y*z^2 + x*y^2*z^2 + x^2*z^3 - y*z^3", "-2*x + x^2 + 3*x^3 + 2*y - x*y - 3*x^2*y - 4*z + 2*x*z + 6*x^2*z", ][:],
112 // [ "x^3*y^2 + x^4*y^2 + x^3*z^2 + x^4*z^2 - y^2*z^2 - x*y^2*z^2 - z^4 - x*z^4", "x^4*y^2 - x^3*y^3 + 2*x^3*y^2*z + x^4*z^2 - x^3*y*z^2 - x*y^2*z^2 + y^3*z^2 + 2*x^3*z^3 - 2*y^2*z^3 - x*z^4 + y*z^4 - 2*z^5", "x^3 + x^4 - x*y - 2*x^2*y - x^3*y + y^2 + x*y^2 + 2*x^2*z + 2*x^3*z - 2*y*z - 2*x*y*z", "x^4*y - x^2*y^2 + x^3*y*z - x*y^2*z", ][:],
113 // [ "4*x^2*y^2 + x^2*y*z + 4*x*y^2*z + x*y*z^2", "4*x*y^4 - 4*y^3*z + x*y^3*z - y^2*z^2 + 4*x*y^2*z^2 - 4*y*z^3 + x*y*z^3 - z^4", "4*x^2*y^2 - 4*x*y^3 + x^2*y*z + 7*x*y^2*z + 2*x*y*z^2", "x^5 - 2*x^3*y - x^4*y + x*y^2 + 2*x^2*y^2 - y^3", ][:],
114 // [ "x^4 - x^3*y - x*z^2 + y*z^2", "x^3*y^2 - x^2*y^3 - x^2*y*z + x*y^2*z", "x^2 - x*y + x*z - y*z", "x^3*y^2 - x^2*y^3 - x^2*y*z + x*y^2*z", ][:],
115 // [ "4*x^2*y^2 + x^2*y*z + 4*x*y^2*z + x*y*z^2", "4*x^2*y - 4*x*y^2 + x^2*z + 11*x*y*z - 4*y^2*z + 3*x*z^2 + 7*y*z^2 + 2*z^3", "x^2*y^3 - x*y^4 + x^2*y*z^2 - x*y^2*z^2", "x^3 + 2*x^4 + x^5 - z^2 - 2*x*z^2 - x^2*z^2", ][:],
116 // [ "x^3*y^2 - x*y^3 - x^2*y^3 + y^4 + 2*x^2*y^2*z - 2*y^3*z + x^3*z^2 - x*y*z^2 - x^2*y*z^2 + y^2*z^2 + 2*x^2*z^3 - 2*y*z^3", "1 + x", "-2 - x + 4*x^2 + 3*x^3", "x^6*y - x^4*y^2 - x^5*z + x^3*y*z - x^3*y*z^2 + x*y^2*z^2 + x^2*z^3 - y*z^3", ][:],
117 // [ "x^5 - x^4*y + 3*x^4*z - x^3*y*z - x^2*z^2 + 2*x^3*z^2 + x*y*z^2 - 3*x*z^3 + y*z^3 - 2*z^4", "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z + 2*x^3*y*z - y^2*z - 2*x*y^2*z - 2*x^2*z^2 + 2*y*z^2", "16*x^2*y^2 - 16*y^3 + 8*x^2*y*z - 8*y^2*z + x^2*z^2 - y*z^2", "x^5*y - x^4*y^2 - x^4*z + x^3*y*z + 2*x^4*y*z - 2*x^3*z^2 - x^2*y*z^2 + x*y^2*z^2 + x*z^3 - y*z^3 - 2*x*y*z^3 + 2*z^4", ][:],
118 // [ "x^2 - 2*x*y + y^2", "x^3*y^2 - x^2*y^3 - x^2*y*z + x*y^2*z", "4*x^2*y - 4*x*y^2 + x^2*z + 11*x*y*z - 4*y^2*z + 3*x*z^2 + 7*y*z^2 + 2*z^3", "x^5 - 2*x^4*y + x^3*y^2 - x^2*z^2 + 2*x*y*z^2 - y^2*z^2", ][:],
119 // [ "x^3*y - x*y^2 - x^2*z + y*z", "x^4 - x^2*y - 2*x^3*y + 2*x*y^2 + x^2*y^2 - y^3 + 2*x^3*z - 2*x*y*z - 2*x^2*y*z + 2*y^2*z", "x^3*y - x^2*y^2 - x^2*z + x*y*z + x^2*y*z - x*y^2*z - x*z^2 + y*z^2", "4*x^5*y - 4*x^3*y^2 + x^5*z - x^3*y*z - 4*x^2*y*z^2 + 4*y^2*z^2 - x^2*z^3 + y*z^3", ][:],
120 // [ "4*x^2*y^2 + x^2*y*z + 4*x*y^2*z + x*y*z^2", "", "x^2*y - x*y^2 - x*z + y*z", "x^3*y^2 - x^2*y^3 - x^2*y*z + x*y^2*z", ][:],
121 // [ "x^2 + 2*x^3 + x^4 - y - 2*x*y - x^2*y", "4*x^5*y - 4*x^3*y^2 + x^5*z - x^3*y*z - 4*x^2*y*z^2 + 4*y^2*z^2 - x^2*z^3 + y*z^3", "4*x*y^3 - 4*y^4 + x*y^2*z + 7*y^3*z + 4*x*y*z^2 - 2*y^2*z^2 + x*z^3 + 7*y*z^3 + 2*z^4", "x^2*y + x^3*y - x*y^2 - x^2*y^2", ][:],
122 // [ "x^2*y + x^3*y - x*y^2 - x^2*y^2", "x^3*y^2 + x^4*y^2 + x^3*z^2 + x^4*z^2 - y^2*z^2 - x*y^2*z^2 - z^4 - x*z^4", "x^5 - 2*x^4*y + x^3*y^2 - x^2*z^2 + 2*x*y*z^2 - y^2*z^2", "x^3*y^2 - x^2*y^3 - 2*x^2*y*z + 2*x*y^2*z + x*z^2 - y*z^2", ][:],
123 // [ "4*x^4*y + x^4*z + 4*x^3*y*z + x^3*z^2 - 4*x*y*z^2 - x*z^3 - 4*y*z^3 - z^4", "x^2*y - x*y^2 - x*z + y*z", "x^4*y - x^2*y^2 + x^3*y*z - x*y^2*z", "x^3 + x^4 - x*y - 2*x^2*y - x^3*y + y^2 + x*y^2", ][:],
124 // [ "x^2*y + x^3*y - x*y^2 - x^2*y^2 + 2*x*y*z + 2*x^2*y*z", "x^4*y^3 + x^4*y*z^2 - x*y^3*z^2 - x*y*z^4", "-2*x^3 + x^4 + 3*x^5 + 2*z^2 - x*z^2 - 3*x^2*z^2", "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z + 2*x^3*y*z - y^2*z - 2*x*y^2*z - 2*x^2*z^2 + 2*y*z^2", ][:],
125 // [ "x^5 + x^6 - x^3*y - x^4*y - x^2*z^2 - x^3*z^2 + y*z^2 + x*y*z^2", "x^2*y^3 - x*y^4 - x*y^2*z + y^3*z + x^2*y*z^2 - x*y^2*z^2 - x*z^3 + y*z^3", "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z - y^2*z", "x*y + x^2*y", ][:],
126 // [ "x^2*y^2 - 2*x*y^3 + y^4 + 4*x*y^2*z - 4*y^3*z + x^2*z^2 - 2*x*y*z^2 + 5*y^2*z^2 + 4*x*z^3 - 4*y*z^3 + 4*z^4", "4*x*y^4 - 4*y^3*z + x*y^3*z - y^2*z^2 + 4*x*y^2*z^2 - 4*y*z^3 + x*y*z^3 - z^4", "x^2*y^2 + x^3*y^2 - x*y*z - x^2*y*z", "x*y + x^2*y", ][:],
127 // [ "x^3*y - x^2*y^2 - x^2*z + x*y*z + x^2*y*z - x*y^2*z - x*z^2 + y*z^2", "x^3 - z^2", "x^3*y - 2*x^2*y^2 + x*y^3 + 2*x^2*y*z - 2*x*y^2*z", "-2*x*y^2 + 3*x^2*y^2 - 2*y^2*z + 3*x*y^2*z - 2*x*z^2 + 3*x^2*z^2 - 2*z^3 + 3*x*z^3", ][:],
128 // [ "x^4*y^2 + x^3*y^2*z + x^4*z^2 - x*y^2*z^2 + x^3*z^3 - y^2*z^3 - x*z^4 - z^5", "x^2*y^2 + x^3*y^2 - x*y*z - x^2*y*z", "x^4*y + x^5*y - x^3*z - x^4*z - x*y*z^2 - x^2*y*z^2 + z^3 + x*z^3", "4*x*y^4 - 4*y^3*z + x*y^3*z - y^2*z^2 + 4*x*y^2*z^2 - 4*y*z^3 + x*y*z^3 - z^4", ][:],
129 // [ "-2*x + x^2 + 3*x^3 + 2*y - x*y - 3*x^2*y - 4*z + 2*x*z + 6*x^2*z", "x^3*y - x^2*y^2 + 3*x^2*y*z - x*y^2*z + 2*x*y*z^2", "x^6*y - x^4*y^2 - x^3*y*z^2 + x*y^2*z^2", "x^4*y - x^2*y^2 - x^3*y^2 + x*y^3 - x^3*z + x*y*z + x^2*y*z + 2*x^3*y*z - y^2*z - 2*x*y^2*z - 2*x^2*z^2 + 2*y*z^2", ][:],
130 // [ "4*x^2*y^2 + x^2*y*z + 4*x*y^2*z + x*y*z^2", "x^4 - x^2*y - x^3*y + x*y^2 + 3*x^3*z - 3*x*y*z - x^2*y*z + y^2*z + 2*x^2*z^2 - 2*y*z^2", "4*x^5*y - 4*x^3*y^2 + x^5*z - x^3*y*z - 4*x^2*y*z^2 + 4*y^2*z^2 - x^2*z^3 + y*z^3", "x^2 + x^3 + 2*x*z + 2*x^2*z + z^2 + x*z^2", ][:],
135 var F : yakmo.polynomial#[:] = [][:]
137 std.slpush(&F, std.try(yakmo.polynomialfromS(s)))
140 /* Dup f to make sure groebner_basis_of doesn't change it from under us */
141 var G : yakmo.polynomial#[:] = yakmo.groebner_basis_of(t.dup(F))
143 /* First, check G doesn't have any 0s in it */
146 testr.fail(c, "Groebner basis of {} contained zero polynomial", ls)
151 Now, check that G is a Gröbner basis: every leading
152 term of F needs to be contained in the ideal of
160 var lt = t.dup(p.terms[p.terms.len - 1])
162 var this_okay = false
164 match yakmo.positive_monomial_division(<, &q.terms[q.terms.len - 1])
165 | `std.Some quotient:
176 testr.fail(c, "For {}, leading term of {} not contained in LT(G); G = {}", ls, p, G)
180 Now, check that G is monic.
183 testr.check(c, yakmo.eqQ(p.terms[p.terms.len - 1].coeff, 1, 1), "For {}, G was non-monic {}", ls, G)
187 Now, check that G is reduced: for every monomial m in
188 every polynomial of p, m is not contained in the
191 for var j = 0; j < G.len; ++j
192 var p : yakmo.polynomial# = G[j]
193 for var k = 0; k < p.terms.len; ++k
194 var mon : yakmo.monomial# = &p.terms[k]
195 for var l = 0; l < G.len; ++l
200 var q : yakmo.polynomial# = G[l]
201 match yakmo.positive_monomial_division(mon, &q.terms[q.terms.len - 1])
203 testr.fail(c, "For {}, G = {} was non-reduced, proven by {}", ls, G, p)
213 var inputs : (byte[:], byte[:], byte[:], byte[:])[:] = [
214 ("01", "x", "y", "x y" ),
215 ("02", "x z", "y z", "x y z"),
219 "- x^3 - y*x^2 + y^2*x + y^3"),
222 /* All trivial LCM */
225 "x^3 + 3*x^2*y + 3*x*y^2 + y^3",
226 "x^3*y + 3*x^2*y^2 + 3*x*y^3 + y^4 + x^3*z + 3*x^2*y*z + 3*x*y^2*z + y^3*z"),
229 "y - 2*x*y + x^2*y + z - 2*x*z + x^2*z",
230 "x*y - x^2*y - x^3*y + x^4*y + y^2 - x*y^2 - x^2*y^2 + x^3*y^2 + x*z - x^2*z - x^3*z + x^4*z + y*z - x*y*z - x^2*y*z + x^3*y*z"),
232 "-x + x^2 + y - x*y",
233 "x + 2*x^2 + x^3 + y + 2*x*y + x^2*y",
234 "x^2 + x^3 - x^4 - x^5 - y^2 - x*y^2 + x^2*y^2 + x^3*y^2"),
238 "-x^2 - x^3 + y^2 + x*y^2"),
240 "x + 2*x^2 + x^3 + y + 2*x*y + x^2*y",
241 "-x^2 + x^3 + 2*x*y - 2*x^2*y - y^2 + x*y^2",
242 "-x^3 - x^4 + x^5 + x^6 + x^2*y + x^3*y - x^4*y - x^5*y + x*y^2 + x^2*y^2 - x^3*y^2 - x^4*y^2 - y^3 - x*y^3 + x^2*y^3 + x^3*y^3"),
244 "x^2 + x^3 - y^2 - x*y^2",
246 "- x^2 + x^3 + x^4 - x^5 + y^2 - x*y^2 - x^2*y^2 + x^3*y^2"),
249 "w^2*x + 2*w*x^2 + x^3 + w^2*y + 2*w*x*y + x^2*y",
250 "w^4*x - 2*w^2*x^3 + x^5 + w^4*y - 2*w^2*x^2*y + x^4*y"),
254 "y^2 + 2*y*z + z^2"),
257 "-1 + 3*x - 3*x^2 + x^3",
258 "-y + 2*x*y - 2*x^3*y + x^4*y - z + 2*x*z - 2*x^3*z + x^4*z"),
261 "x*y - y^2 + x*z - y*z",
262 "- x^2*y - x^3*y + y^3 + x*y^3 - x^2*z - x^3*z + y^2*z + x*y^2*z"),
264 "y^2 + x*y^2 + 2*y*z + 2*x*y*z + z^2 + x*z^2",
266 "- x*y^2 - x^2*y^2 + y^3 + x*y^3 - 2*x*y*z - 2*x^2*y*z + 2*y^2*z + 2*x*y^2*z - x*z^2 - x^2*z^2 + y*z^2 + x*y*z^2"),
268 "-x + x^2 - y + x*y",
270 "x^2 - x^3 - y^2 + x*y^2"),
272 /* All non-trivial LCM, (this may be something as lame as a sign flip) */
274 "x*y^2 - 2*x^2*y^2 + x^3*y^2",
275 "-x^2 - x*y + x*z + y*z",
276 "- x^3*y^2 + 2*x^4*y^2 - x^5*y^2 - x^2*y^3 + 2*x^3*y^3 - x^4*y^3 + x^2*y^2*z - 2*x^3*y^2*z + x^4*y^2*z + x*y^3*z - 2*x^2*y^3*z + x^3*y^3*z"),
279 "-x^3 + 3*x^2*z - 3*x*z^2 + z^3",
280 "- x^7*y^4*z + 3*x^6*y^4*z^2 - 3*x^5*y^4*z^3 + x^4*y^4*z^4"),
283 "x*y^3*z + 2*x*y^2*z^2 + x*y*z^3",
284 "- x^4*y^3*z + x^2*y^5*z - 2*x^4*y^2*z^2 + 2*x^2*y^4*z^2 - x^4*y*z^3 + x^2*y^3*z^3"),
286 "-x + x^3 + y - x^2*y",
287 "-x + x^3 + y - x^2*y",
288 "x - x^3 - y + x^2*y"),
291 "-x^4 - x^3*y + x^3*z + x^2*y*z",
292 "x^5*y^2 - x^3*y^4 - x^4*y^2*z + x^2*y^4*z"),
295 "x^3 + x^2*y - 2*x^2*z - 2*x*y*z + x*z^2 + y*z^2",
296 "x^3 + x^2*y - 2*x^2*z - 2*x*y*z + x*z^2 + y*z^2"),
298 "x^3*y^4 + x^3*y^3*z",
300 "x^4*y^4*z + x^3*y^5*z + x^4*y^3*z^2 + x^3*y^4*z^2"),
304 "- x^5*y - x^6*y + x^4*y^2 + x^5*y^2"),
306 "x^4*y - 2*x^3*y^2 + x^2*y^3",
307 "x^2*y*z + x^3*y*z + x*y^2*z + x^2*y^2*z",
308 "x^5*y*z + x^6*y*z - x^4*y^2*z - x^5*y^2*z - x^3*y^3*z - x^4*y^3*z + x^2*y^4*z + x^3*y^4*z"),
310 "x - x^3 - z + x^2*z",
311 "-x + 2*x^2 - x^3 + z - 2*x*z + x^2*z",
312 "-x + x^2 + x^3 - x^4 + z - x*z - x^2*z + x^3*z"),
316 "x^2*y^3*z + x^3*y^3*z"),
318 "-x + x^3 - y + x^2*y",
319 "x^3 + x^2*y - 2*x^2*z - 2*x*y*z + x*z^2 + y*z^2",
320 "-x^3 + x^5 - x^2*y + x^4*y + 2*x^2*z - 2*x^4*z + 2*x*y*z - 2*x^3*y*z - x*z^2 + x^3*z^2 - y*z^2 + x^2*y*z^2"),
323 "x^2 + x^3 - 2*x*y - 2*x^2*y + y^2 + x*y^2",
324 "x^2*y + x^3*y - 2*x*y^2 - 2*x^2*y^2 + y^3 + x*y^3 + x^2*z + x^3*z - 2*x*y*z - 2*x^2*y*z + y^2*z + x*y^2*z"),
328 "- x^4*y^2*z - x^5*y^2*z + x^3*y^3*z + x^4*y^3*z"),
336 "x^4*y^2 + x^5*y^2 + x^4*y*z + x^5*y*z"),
339 "x*y^3*z + 2*x*y^2*z^2 + x*y*z^3",
340 "x^5*y^3*z + x^4*y^4*z + 2*x^5*y^2*z^2 + 2*x^4*y^3*z^2 + x^5*y*z^3 + x^4*y^2*z^3"),
343 "-x^3 + x^4 + x^2*y - x^3*y",
344 "x^5 - x^6 - x^4*y + x^5*y"),
346 "-x^3 - x^4 + x^2*z + x^3*z",
347 "x^2 - x^3 - x*y + x^2*y - x*z + x^2*z + y*z - x*y*z",
348 "-x^4 + x^6 + x^3*y - x^5*y + x^3*z - x^5*z - x^2*y*z + x^4*y*z"),
350 "x^3*y^3*z + x^2*y^4*z",
351 "-x^3 - x^4 + x^2*z + x^3*z",
352 "- x^4*y^3*z - x^5*y^3*z - x^3*y^4*z - x^4*y^4*z + x^3*y^3*z^2 + x^4*y^3*z^2 + x^2*y^4*z^2 + x^3*y^4*z^2"),
354 "x^3*y^2*z + x^3*y*z^2",
356 "x^3*y^2*z + x^3*y*z^2"),
359 "x*y + y^2 + x*z + y*z",
360 "x^4*y^3 + x^3*y^4 + x^4*y^2*z + x^3*y^3*z"),
363 "x*y^2 + 2*x^2*y^2 + x^3*y^2",
364 "x^4*y^3 + 2*x^5*y^3 + x^6*y^3 + x^3*y^4 + 2*x^4*y^4 + x^5*y^4"),
366 "-x^3 + 3*x^2*z - 3*x*z^2 + z^3",
368 "x^5 - x^7 - 3*x^4*z + 3*x^6*z + 3*x^3*z^2 - 3*x^5*z^2 - x^2*z^3 + x^4*z^3"),
372 "x^4*y^3 + x^5*y^3"),
374 "-x^2 - x^3 + x*y + x^2*y + x*z + x^2*z - y*z - x*y*z",
376 "x^4*y*z + x^5*y*z - x^2*y^3*z - x^3*y^3*z - x^3*y*z^2 - x^4*y*z^2 + x*y^3*z^2 + x^2*y^3*z^2"),
378 "x^2*y^2*z + x*y^3*z + x^2*y*z^2 + x*y^2*z^2",
379 "x^2*y^2*z^2 + x^3*y^2*z^2",
380 "x^3*y^3*z^2 + x^4*y^3*z^2 + x^2*y^4*z^2 + x^3*y^4*z^2 + x^3*y^2*z^3 + x^4*y^2*z^3 + x^2*y^3*z^3 + x^3*y^3*z^3"),
383 "x*y^2*z + x^2*y^2*z + x*y*z^2 + x^2*y*z^2",
384 "x^5*y^3*z + x^6*y^3*z + x^5*y^2*z^2 + x^6*y^2*z^2"),
386 "-x^3 + x*y^2 + x^2*z - y^2*z",
388 "x^4*y^2 - x^2*y^4 - x^3*y^2*z + x*y^4*z"),
390 "-x - x^2 + z + x*z",
392 "- x^5*y^2 - x^6*y^2 - x^4*y^3 - x^5*y^3 + x^4*y^2*z + x^5*y^2*z + x^3*y^3*z + x^4*y^3*z"),
396 "-x^6*y^2 + x^4*y^4"),
398 "x^4*y^2*z + x^3*y^3*z",
400 "x^5*y^2*z + x^4*y^3*z"),
403 "x^4*y - 2*x^3*y^2 + x^2*y^3",
404 "x^6*y^2*z^2 - 2*x^5*y^3*z^2 + x^4*y^4*z^2"),
406 "x^3*y*z + 2*x^2*y^2*z + x*y^3*z",
407 "x^3*y^3*z - x^2*y^4*z",
408 "- x^5*y^3*z - x^4*y^4*z + x^3*y^5*z + x^2*y^6*z"),
410 "-x^2 - x*y + x*z + y*z",
412 "- x^5*y^3 - x^4*y^4 + x^4*y^3*z + x^3*y^4*z"),
416 "x^5 - x^3*y^2 - x^4*z + x^2*y^2*z"),
419 "x^2*y^4*z + x^2*y^3*z^2",
420 "-x^4*y^4*z + x^3*y^5*z - x^4*y^3*z^2 + x^3*y^4*z^2"),
421 ("55", "1", "1", "1"),
422 ("55", "2", "3", "1"),
426 for (id, fs, gs, exps) : inputs
427 var f = auto std.try(yakmo.polynomialfromS(fs))
428 var g = auto std.try(yakmo.polynomialfromS(gs))
429 var exp = auto std.try(yakmo.polynomialfromS(exps))
431 var act = yakmo.lcm(f, g)
432 testr.check(c, std.eq(exp, act), "{}: expected lcm( {} , {} ) to be {}, was {}", id, fs, gs, exp, act)
437 var a_str = std.strjoin([
438 "19104670425305164606640959687010349754528570061866115",
439 "26046033144178272757679170191595259851939658340508506",
440 "04628457416900266249028333602056540585550668802542632",
441 "48606225543691036168823145797323883329876304653072214",
442 "39891390745965121128977813098908621103772018491571031",
443 "71786948079915430420148613011746059467750134983407008",
444 "77358712515882121018468321606235121606262709444632613",
445 "13716698797703388154454187876651872630380019127528940",
446 "02662490928298442301687332710068169864741312886576707",
447 "39151023517856491368585673783910216357765605796880189",
448 "84554764848415406257121448083536319562662440652295253",
449 "80270183630160646028040916074226122535406844285214191",
450 "90374274469154055794278982790075068640288009649949851",
451 "24030823491716705281794499539762805718545501654739403",
452 "15744225794206368770257662228643122409522247384780267",
453 "13086964546856430932978920642908624770455318423385061",
454 "17489512813259080533500496687811090052050663507923168",
455 "45482213224576436061130351262021502810238931168149922",
456 "66436086308684093211917306197487317939394321593421373",
457 "33058538840796877054636781033459627694062854752324993",
458 "54731331139096582654289934040495590165267304002945914",
459 "62527936606870140737937111986089072688610529730388162",
460 "13023944164349778320828796366203845913098289590424454",
461 "98981842382953923172644100653249094555260875718425505",
462 "81855009112898127593082276475900261221232578617369568",
463 "65176769477121708728356351606428598074827351976058015",
464 "90627964047498322605289995869696461412066552046028432",
465 "56573564590727863271976858193188890689253792122561989",
466 "82023278560667087835485360603050343830737882471647447",
467 "21140068315946464845310666121995484847062875913905593",
468 "02306171450156853663300036179979894268374622640701071",
469 "38979658865857942540674312992217018977399372424354460",
470 "87327526649148555309810194020252572168626245206435176",
471 "00787688636080560171680021701071760440397327367174261",
472 "36393256714074183782005612877312887490791951972230505",
473 "46789923597823270977826230908694387602694980375424092",
474 "01600099711191023176253133385122417674417936012025603",
475 "62129834026230143314711896785090099951842051024764270",
476 "08918145200749840120479652987103375946463517687290288",
477 "98292890910573669422806303838517225334302689446311111",
478 "68390986181110828211605390830961361777258851338924631",
479 "44879850611640855405046477093239467273001021222606583",
480 "30936460940366115093317564862209609677929177724711514",
481 "27757355115066248168184349231234919635812455348701390",
482 "87205322361975735937289012761326495566956652864619277",
483 "32579944377606186055680121123108381629244694807530722",
484 "68487817261980872196055695764982043925759762218202345",
485 "60043413306199019749216259539822590393874382988033836",
486 "49147205544147769272788770279390901184318950635986887",
487 "43954154124805793949597020405237956618132614165809382",
488 "76409706341996695817015245582544204465190842892081370",
489 "09791521084533069895193697888908955206436367592377623",
490 "39435989450755183597431209034488898684267377902704402",
491 "38662856236716417263007430572626968509227204564808308",
492 "11849782598489350090699062334202619884625435285106247",
493 "90963375764385967557832039766794447718441817283741759",
494 "51460042892131830992469482613848329609839756569266412",
495 "00054859634288421513332369871507172166404646689515726",
496 "85568306913802119547556763169364356408232733979665579",
497 "0305629390406402471330117561685935726465463810301002",
499 var b_str = std.strjoin([
500 "47761676063262911516602399217525874386321425154665288",
501 "15115082860445681894197925478988149629849145851271265",
502 "11571143542250665622570834005141351463876672006356581",
503 "21515563859227590422057864493309708324690761632680535",
504 "99728476864912802822444532747271552759430046228927579",
505 "29467370199788576050371532529365148669375337458517521",
506 "93396781289705302546170804015587804015656773611581532",
507 "84291746994258470386135469691629681575950047818822350",
508 "06656227320746105754218331775170424661853282216453580",
509 "65118148374602730789292890088436127799192248462538157",
510 "76171592220367477514113981813653827598879760324678015",
511 "72569856934779854551039387447180998052960720088078298",
512 "42486705399640002154282828138332380855908419701919315",
513 "02855524771559401066085266481423224233184788362596214",
514 "39753616711901860991324869331091946538920682695124802",
515 "33719653300233933573028597737029655482519780558972068",
516 "41761255888349979620722669682379502906421413721274536",
517 "07774880279600751561700075952352952194746453979290876",
518 "06643353537819940644614346346590629348820966261361536",
519 "18621718551829108419152857610777116856221800841892805",
520 "54896006553469590353145911744527918191690198246905490",
521 "08776081137158263008676945661337677696858836060625930",
522 "00581424521378490526686848392051316637950699748991409",
523 "97048436055200446594903714717200168715334823804386248",
524 "94114717962858589975244350229780928217044677081910810",
525 "10053040285027441278009566098641725724410502962651983",
526 "63378189596000577100868533735270549253221004238630110",
527 "34410951016223541591647505563407428973527480862730419",
528 "48215419973738776139123660977545095685691592364042285",
529 "72402422245210061447962179132483232416738707244968666",
530 "15382463529233092119349386365840829919388146375142434",
531 "92251769719620118604245696007319248735435765087168721",
532 "73816633031653209518688172019063193821707171208006318",
533 "10314592152327618572654822230646091394187603281830003",
534 "67882788417029612294479753218148244558786225211270430",
535 "45790288018336089099176286245633831419169671095017866",
536 "38622399641099027175118634426688825552372925472967936",
537 "14601046311341360206178941376456435552044889045555886",
538 "37635772559572879390630570340582421089174267059560715",
539 "92287217926929420512849362802122104770057272317401878",
540 "59135427046675986730664719255646646397096873355840994",
541 "58004283168449927332759192791832329997748257711081749",
542 "54597553268672156753140531672573737613066211881553092",
543 "03889089688821313658206999054353222567308795097833296",
544 "43416055667258561768990862941439862150867248450664003",
545 "05255462550283686482441560101688961892391651209427520",
546 "11382297126051476478287137158164324634775338021281466",
547 "45195693925800435870896147592790092451606074857395888",
548 "31150920176000392037177984559567254014388345256461299",
549 "00294381200771954440643352341394536370784392549170280",
550 "16765366044736880797006711488664713556913490609498901",
551 "54308916480821203853215685949910005729466899434331462",
552 "77967667330640003307996836786156595366016851000657389",
553 "30298314558992450342884430917553475004549808753299358",
554 "99403507520649449537235572123014892303371660075494187",
555 "87542003580910131906007046129152017846498253473093230",
556 "64464058711933149092574093956748207461240934546482067",
557 "59438789833656044800729445020310853023788651682061298",
558 "70144239526669133440641565177676466580598106832762906",
559 "0689094700957629172391295771295877146289233486907065",
562 var p1 = std.try(yakmo.polynomialfromS(a_str))
563 var p2 = std.try(yakmo.polynomialfromS(b_str))
566 The test here is really that this completes without the
567 test-runner getting impatient and killing it.
569 var lcm = yakmo.lcm(p1, p2)
570 var act = std.fmt("{}", lcm)
572 testr.check(c, std.eq(exp, act), "expected lcm(<huge 1>, <huge 2>) to be {}, was {}", exp, act)