1comment factorizer test file; 2 3array a(20); 4 5factorize(x**2-1); % To make sure factorizer is loaded. 6 7algebraic procedure test(prob,nfac); 8 begin integer m; scalar p,q,r; 9 scalar basetime; 10 p := for i:=1:nfac product a(i); 11 Write "Problem number ",prob; 12 symbolic (basetime := time()); 13 r := factorize p; 14 symbolic (basetime := time() - basetime); 15 q := for each j in r product first j^second j; 16 m := for each j in r sum second j; 17 if m=nfac and p=q then return ok; 18 write "This example failed:"; 19 write r 20 end; 21 22% Wang test case 1; 23 24a(1) := x*y+z+10$ 25a(2) := x*z+y+30$ 26a(3) := x+y*z+20$ 27test(1,3); 28 29% Wang test case 2; 30 31a(1) := x**3*z+x**3*y+z-11$ 32a(2) := x**2*z**2+x**2*y**2+y+90$ 33test(2,2); 34 35 36% Wang test case 3; 37 38a(1) := x**3*y**2+x*z**4+x+z$ 39a(2) := x**3+x*y*z+y**2+y*z**3$ 40test(3,2); 41 42 43% Wang test case 4; 44 45a(1) := x**2*z+y**4*z**2+5$ 46a(2) := x*y**3+z**2$ 47a(3) := -x**3*y+z**2+3$ 48a(4) := x**3*y**4+z**2$ 49test(4,4); 50 51 52% Wang test case 5; 53 54a(1) := 3*u**2*x**3*y**4*z+x*z**2+y**2*z**2+19*y**2$ 55a(2) := u**2*y**4*z**2+x**2*z+5$ 56a(3) := u**2+x**3*y**4+z**2$ 57test(5,3); 58 59 60% Wang test case 6; 61 62a(1) := w**4*x**5*y**6-w**4*z**3+w**2*x**3*y+x*y**2*z**2$ 63a(2) := w**4*z**6-w**3*x**3*y-w**2*x**2*y**2*z**2+x**5*z 64 -x**4*y**2+y**2*z**3$ 65a(3) := -x**5*z**3+x**2*y**3+y*z$ 66test(6,3); 67 68 69% Wang test case 7; 70 71a(1) := x+y+z-2$ 72a(2) := x+y+z-2$ 73a(3) := x+y+z-3$ 74a(4) := x+y+z-3$ 75a(5) := x+y+z-3$ 76test(7,5); 77 78 79% Wang test case 8; 80 81a(1) := -z**31-w**12*z**20+y**18-y**14+x**2*y**2+x**21+w**2$ 82a(2) := -15*y**2*z**16+29*w**4*x**12*z**3+21*x**3*z**2+3*w**15*y**20$ 83 84% Commented out, since it can take a long time. 85 86% TEST(8,2); 87 88 89 90% Wang test case 9; 91 92a(1) := 18*u**2*w**3*x*z**2+10*u**2*w*x*y**3+15*u*z**2+6*w**2*y**3*z**2$ 93a(2) := x$ 94a(3) := 25*u**2*w**3*y*z**4+32*u**2*w**4*y**4*z**3- 95 48*u**2*x**2*y**3*z**3-2*u**2*w*x**2*y**2+44*u*w*x*y**4*z**4- 96 8*u*w*x**3*z**4+4*w**2*x+11*w**2*x**3*y+12*y**3*z**2$ 97a(4) := z$ 98a(5) := z$ 99a(6) := u$ 100a(7) := u$ 101a(8) := u$ 102a(9) := u$ 103test(9,9); 104 105 106 107% Wang test case 10; 108 109a(1) := 31*u**2*x*z+35*w**2*y**2+40*w*x**2+6*x*y$ 110a(2) := 42*u**2*w**2*y**2+47*u**2*w**2*z+22*u**2*w**2+9*u**2*w*x**2+21 111 *u**2*w*x*y*z+37*u**2*y**2*z+u**2*w**2*x*y**2*z**2+8*u**2*w**2 112 *z**2+24*u**2*w*x*y**2*z**2+24*u**2*x**2*y*z**2+12*u**2*x*y**2 113 *z**2+13*u*w**2*x**2*y**2+27*u*w**2*x**2*y+39*u*w*x*z+43*u* 114 x**2*y+44*u*w**2* z**2+37*w**2*x*y+29*w**2*y**2+31*w**2*y*z**2 115 +12*w*x**2*y*z+43*w*x*y*z**2+22*x*y**2+23*x*y*z+24*x*y+41*y**2 116 *z$ 117test(10,2); 118 119 120 121% Wang test case 11; 122 123a(1) := -36*u**2*w**3*x*y*z**3-31*u**2*w**3*y**2+20*u**2*w**2*x**2*y**2 124 *z**2-36*u**2*w*x*y**3*z+46*u**2*w*x+9*u**2*y**2-36*u*w**2*y**3 125 +9*u*w*y**3-5*u*w*x**2*y**3+48*u*w*x**3*y**2*z+23*u*w*x**3*y**2 126 -43*u*x**3*y**3*z**3-46*u*x**3*y**2+29*w**3*x*y**3*z**2- 127 14*w**3*x**3*y**3*z**2-45*x**3-8*x*y**2$ 128a(2) := 13*u**3*w**2*x*y*z**3-4*u*x*y**2-w**3*z**3-47*x*y$ 129a(3) := x$ 130a(4) := y$ 131test(11,4); 132 133 134 135 136% Wang test case 12; 137a(1) := x+y+z-3$ 138a(2) := x+y+z-3$ 139a(3) := x+y+z-3$ 140test(12,3); 141 142 143 144 145% Wang test case 13; 146 147a(1) := 2*w*z+45*x**3-9*y**3-y**2+3*z**3$ 148a(2) := w**2*z**3-w**2+47*x*y$ 149test(13,2); 150 151 152 153 154% Wang test case 14; 155 156a(1) := 18*x**4*y**5+41*x**4*y**2-37*x**4+26*x**3*y**4+38*x**2*y**4-29* 157 x**2*y**3-22*y**5$ 158a(2) := 33*x**5*y**6-22*x**4+35*x**3*y+11*y**2$ 159test(14,2); 160 161 162 163 164% Wang test case 15; 165 166a(1) := 12*w**2*x*y*z**3-w**2*z**3+w**2-29*x-3*x*y**2$ 167a(2) := 14*w**2*y**2+2*w*z+18*x**3*y-8*x*y**2-y**2+3*z**3$ 168a(3) := z$ 169a(4) := z$ 170a(5) := y$ 171a(6) := y$ 172a(7) := y$ 173a(8) := x$ 174a(9) := x$ 175a(10) := x$ 176a(11) := x$ 177a(12) := x$ 178a(13) := x$ 179test(15,13); 180 181 182% Test 16 - the 40th degree polynomial that comes from 183% SIGSAM problem number 7; 184 185a(1) := 8192*y**10+20480*y**9+58368*y**8-161792*y**7+198656*y**6+ 186 199680*y**5-414848*y**4-4160*y**3+171816*y**2-48556*y+469$ 187a(2) := 8192*y**10+12288*y**9+66560*y**8-22528*y**7-138240*y**6+ 188 572928*y**5-90496*y**4-356032*y**3+113032*y**2+23420*y-8179$ 189a(3) := 4096*y**10+8192*y**9+1600*y**8-20608*y**7+20032*y**6+87360*y**5- 190 105904*y**4+18544*y**3+11888*y**2-3416*y+1$ 191a(4) := 4096*y**10+8192*y**9-3008*y**8-30848*y**7+21056*y**6+146496* 192 y**5-221360*y**4+1232*y**3+144464*y**2-78488*y+11993$ 193test(16,4); 194 195% Test 17 - taken from Erich Kaltofen's thesis. This polynomial 196% splits mod all possible primes p; 197 198a(1) := x**25-25*x**20-3500*x**15-57500*x**10+21875*x**5-3125$ 199test(17,1); 200 201% Test 18 - another 'hard-to-factorize' univariate; 202 203a(1) := x**18+9*x**17+45*x**16+126*x**15+189*x**14+27*x**13- 204 540*x**12-1215*x**11+1377*x**10+15444*x**9+46899*x**8+ 205 90153*x**7+133893*x**6+125388*x**5+29160*x**4- 206 32076*x**3+26244*x**2-8748*x+2916$ 207test(18,1); 208 209% Test 19 - another example chosen to lead to false splits mod p; 210 211a(1) := x**16+4*x**12-16*x**11+80*x**9+2*x**8+160*x**7+ 212 128*x**6-160*x**5+28*x**4-48*x**3+128*x**2-16*x+1$ 213a(2) := x**16+4*x**12+16*x**11-80*x**9+2*x**8-160*x**7+ 214 128*x**6+160*x**5+28*x**4+48*x**3+128*x**2+16*x+1$ 215test(19,2); 216 217 218% End of all tests; 219 220 221end; 222