001 /* 002 * $Id: GCDProxyTest.java 3031 2010-03-08 23:18:01Z kredel $ 003 */ 004 005 package edu.jas.ufd; 006 007 008 //import java.util.Map; 009 010 import junit.framework.Test; 011 import junit.framework.TestCase; 012 import junit.framework.TestSuite; 013 014 import org.apache.log4j.BasicConfigurator; 015 016 import edu.jas.arith.BigComplex; 017 import edu.jas.arith.BigInteger; 018 import edu.jas.arith.BigRational; 019 import edu.jas.arith.ModInteger; 020 import edu.jas.arith.ModIntegerRing; 021 import edu.jas.kern.ComputerThreads; 022 import edu.jas.poly.AlgebraicNumber; 023 import edu.jas.poly.AlgebraicNumberRing; 024 import edu.jas.poly.GenPolynomial; 025 import edu.jas.poly.GenPolynomialRing; 026 import edu.jas.poly.PolyUtil; 027 import edu.jas.poly.TermOrder; 028 029 030 /** 031 * GreatestCommonDivisor proxy tests with JUnit. 032 * @author Heinz Kredel. 033 */ 034 035 public class GCDProxyTest extends TestCase { 036 037 038 /** 039 * main. 040 */ 041 public static void main(String[] args) { 042 BasicConfigurator.configure(); 043 junit.textui.TestRunner.run(suite()); 044 //ComputerThreads.terminate(); 045 //System.out.println("System.exit(0)"); 046 } 047 048 049 /** 050 * Constructs a <CODE>GCDProxyTest</CODE> object. 051 * @param name String. 052 */ 053 public GCDProxyTest(String name) { 054 super(name); 055 } 056 057 058 /** 059 */ 060 public static Test suite() { 061 TestSuite suite = new TestSuite(GCDProxyTest.class); 062 return suite; 063 } 064 065 066 //private final static int bitlen = 100; 067 068 TermOrder to = new TermOrder(TermOrder.INVLEX); 069 070 071 GenPolynomialRing<BigInteger> dfac; 072 073 074 GenPolynomialRing<BigInteger> cfac; 075 076 077 GenPolynomialRing<GenPolynomial<BigInteger>> rfac; 078 079 080 BigInteger ai; 081 082 083 BigInteger bi; 084 085 086 BigInteger ci; 087 088 089 BigInteger di; 090 091 092 BigInteger ei; 093 094 095 GenPolynomial<BigInteger> a; 096 097 098 GenPolynomial<BigInteger> b; 099 100 101 GenPolynomial<BigInteger> c; 102 103 104 GenPolynomial<BigInteger> d; 105 106 107 GenPolynomial<BigInteger> e; 108 109 110 GenPolynomial<GenPolynomial<BigInteger>> ar; 111 112 113 GenPolynomial<GenPolynomial<BigInteger>> br; 114 115 116 GenPolynomial<GenPolynomial<BigInteger>> cr; 117 118 119 GenPolynomial<GenPolynomial<BigInteger>> dr; 120 121 122 GenPolynomial<GenPolynomial<BigInteger>> er; 123 124 125 int rl = 5; 126 127 128 int kl = 5; 129 130 131 int ll = 7; 132 133 134 int el = 3; 135 136 137 float q = 0.3f; 138 139 140 @Override 141 protected void setUp() { 142 a = b = c = d = e = null; 143 ai = bi = ci = di = ei = null; 144 ar = br = cr = dr = er = null; 145 dfac = new GenPolynomialRing<BigInteger>(new BigInteger(1), rl, to); 146 cfac = new GenPolynomialRing<BigInteger>(new BigInteger(1), rl - 1, to); 147 rfac = new GenPolynomialRing<GenPolynomial<BigInteger>>(cfac, 1, to); 148 } 149 150 151 @Override 152 protected void tearDown() { 153 a = b = c = d = e = null; 154 ai = bi = ci = di = ei = null; 155 ar = br = cr = dr = er = null; 156 dfac = null; 157 cfac = null; 158 rfac = null; 159 ComputerThreads.terminate(); 160 } 161 162 163 /** 164 * Test get BigInteger implementation. 165 * 166 */ 167 public void testBigInteger() { 168 long t; 169 BigInteger bi = new BigInteger(); 170 171 GreatestCommonDivisor<BigInteger> ufd_par; 172 GreatestCommonDivisorAbstract<BigInteger> ufd; 173 174 ufd_par = GCDFactory./*<BigInteger>*/getProxy(bi); 175 //System.out.println("ufd_par = " + ufd_par); 176 assertTrue("ufd_par != null " + ufd_par, ufd_par != null); 177 178 ufd = new GreatestCommonDivisorSubres<BigInteger>(); 179 180 //System.out.println("ufd = " + ufd); 181 assertTrue("ufd != null " + ufd, ufd != null); 182 183 dfac = new GenPolynomialRing<BigInteger>(bi, 4, to); 184 185 for (int i = 0; i < 1; i++) { // 10-50 186 a = dfac.random(kl + i * 10, ll + i, el, q); 187 b = dfac.random(kl + i * 10, ll + i, el, q); 188 c = dfac.random(kl + 2, ll, el, q); 189 //c = dfac.getONE(); 190 //c = c.multiply( dfac.univariate(0) ); 191 c = ufd.primitivePart(c).abs(); 192 //System.out.println("a = " + a); 193 //System.out.println("b = " + b); 194 //System.out.println("c = " + c); 195 196 if (a.isZERO() || b.isZERO() || c.isZERO()) { 197 // skip for this turn 198 continue; 199 } 200 assertTrue("length( c" + i + " ) <> 0", c.length() > 0); 201 //assertTrue(" not isZERO( c"+i+" )", !c.isZERO() ); 202 //assertTrue(" not isONE( c"+i+" )", !c.isONE() ); 203 204 a = a.multiply(c); 205 b = b.multiply(c); 206 //System.out.println("a = " + a); 207 //System.out.println("b = " + b); 208 /* 209 System.out.println("\ni degrees: a = " + a.degree() 210 + ", b = " + b.degree() 211 + ", c = " + c.degree()); 212 */ 213 t = System.currentTimeMillis(); 214 d = ufd_par.gcd(a, b); 215 t = System.currentTimeMillis() - t; 216 //System.out.println("i proxy time = " + t); 217 //System.out.println("c = " + c); 218 //System.out.println("d = " + d); 219 //System.out.println("e = " + e); 220 221 e = PolyUtil.<BigInteger> basePseudoRemainder(d, c); 222 //System.out.println("e = " + e); 223 assertTrue("c | gcd(ac,bc) " + e, e.isZERO()); 224 } 225 // obsolete ((GCDProxy<BigInteger>)ufd_par).terminate(); 226 ComputerThreads.terminate(); 227 } 228 229 230 /** 231 * Test get ModInteger implementation. 232 * 233 */ 234 public void testModInteger() { 235 long t; 236 ModIntegerRing mi = new ModIntegerRing(19,true); 237 //ModIntegerRing mi = new ModIntegerRing(536870909, true); 238 239 GenPolynomial<ModInteger> a, b, c, d, e; 240 241 GreatestCommonDivisor<ModInteger> ufd_par; 242 GreatestCommonDivisorAbstract<ModInteger> ufd; 243 244 ufd_par = GCDFactory.getProxy(mi); 245 //System.out.println("ufd_par = " + ufd_par); 246 assertTrue("ufd_par != null " + ufd_par, ufd_par != null); 247 248 ufd = new GreatestCommonDivisorSubres<ModInteger>(); 249 250 //System.out.println("ufd = " + ufd); 251 assertTrue("ufd != null " + ufd, ufd != null); 252 253 GenPolynomialRing<ModInteger> dfac; 254 dfac = new GenPolynomialRing<ModInteger>(mi, 4, to); 255 256 for (int i = 0; i < 1; i++) { 257 a = dfac.random(kl + i * 2, ll + i, el, q); 258 b = dfac.random(kl + i * 2, ll + i, el, q); 259 c = dfac.random(kl, ll, el, q); 260 //a = dfac.random(kl,ll+i,el,q); 261 //b = dfac.random(kl,ll+i,el,q); 262 //c = dfac.random(kl,ll,el,q); 263 //c = dfac.getONE(); 264 //c = c.multiply( dfac.univariate(0) ); 265 c = ufd.primitivePart(c).abs(); 266 //System.out.println("a = " + a); 267 //System.out.println("b = " + b); 268 //System.out.println("c = " + c); 269 270 if (a.isZERO() || b.isZERO() || c.isZERO()) { 271 // skip for this turn 272 continue; 273 } 274 assertTrue("length( c" + i + " ) <> 0", c.length() > 0); 275 //assertTrue(" not isZERO( c"+i+" )", !c.isZERO() ); 276 //assertTrue(" not isONE( c"+i+" )", !c.isONE() ); 277 278 a = a.multiply(c); 279 b = b.multiply(c); 280 //System.out.println("a = " + a); 281 //System.out.println("b = " + b); 282 /* 283 System.out.println("\nm degrees: a = " + a.degree() 284 + ", b = " + b.degree() 285 + ", c = " + c.degree()); 286 */ 287 t = System.currentTimeMillis(); 288 d = ufd_par.gcd(a, b); 289 t = System.currentTimeMillis() - t; 290 //System.out.println("m proxy time = " + t); 291 //System.out.println("c = " + c); 292 //System.out.println("d = " + d); 293 //System.out.println("e = " + e); 294 295 e = PolyUtil.<ModInteger> basePseudoRemainder(d, c); 296 //System.out.println("e = " + e); 297 assertTrue("c | gcd(ac,bc) " + e, e.isZERO()); 298 } 299 // obsolete ((GCDProxy<ModInteger>)ufd_par).terminate(); 300 ComputerThreads.terminate(); 301 } 302 303 304 /** 305 * Test get BigRational implementation. 306 * 307 */ 308 public void testBigRational() { 309 BigRational b = new BigRational(); 310 GreatestCommonDivisor<BigRational> ufd; 311 312 ufd = GCDFactory./*<BigRational>*/getImplementation(b); 313 //System.out.println("ufd = " + ufd); 314 assertTrue("ufd = Primitive " + ufd, ufd instanceof GreatestCommonDivisorPrimitive); 315 } 316 317 318 /** 319 * Test get BigComplex implementation. 320 * 321 */ 322 public void testBigComplex() { 323 BigComplex b = new BigComplex(); 324 GreatestCommonDivisor<BigComplex> ufd; 325 326 ufd = GCDFactory.<BigComplex> getImplementation(b); 327 //System.out.println("ufd = " + ufd); 328 assertTrue("ufd != Simple " + ufd, ufd instanceof GreatestCommonDivisorSimple); 329 } 330 331 332 /** 333 * Test get AlgebraicNumber<BigRational> implementation. 334 * 335 */ 336 public void xtestAlgebraicNumberBigRational() { 337 BigRational b = new BigRational(); 338 GenPolynomialRing<BigRational> fac; 339 fac = new GenPolynomialRing<BigRational>(b, 1); 340 GenPolynomial<BigRational> mo = fac.random(kl, ll, el, q); 341 while (mo.isConstant() || mo.isZERO()) { 342 mo = fac.random(kl, ll, el, q); 343 } 344 345 AlgebraicNumberRing<BigRational> afac; 346 afac = new AlgebraicNumberRing<BigRational>(mo); 347 348 GreatestCommonDivisor<AlgebraicNumber<BigRational>> ufd; 349 350 ufd = GCDFactory.<AlgebraicNumber<BigRational>> getImplementation(afac); 351 //System.out.println("ufd = " + ufd); 352 assertTrue("ufd = Subres " + ufd, ufd instanceof GreatestCommonDivisorSubres); 353 354 mo = fac.univariate(0).subtract(fac.getONE()); 355 afac = new AlgebraicNumberRing<BigRational>(mo, true); 356 357 ufd = GCDFactory.<AlgebraicNumber<BigRational>> getImplementation(afac); 358 //System.out.println("ufd = " + ufd); 359 assertTrue("ufd = Simple " + ufd, ufd instanceof GreatestCommonDivisorSimple); 360 } 361 362 363 /** 364 * Test get AlgebraicNumber<ModInteger&glt; implementation. 365 * 366 */ 367 public void testAlgebraicNumberModInteger() { 368 ModIntegerRing b = new ModIntegerRing(19, true); 369 GenPolynomialRing<ModInteger> fac; 370 fac = new GenPolynomialRing<ModInteger>(b, 1); 371 GenPolynomial<ModInteger> mo = fac.random(kl, ll, el, q); 372 while (mo.isConstant() || mo.isZERO()) { 373 mo = fac.random(kl, ll, el, q); 374 } 375 376 AlgebraicNumberRing<ModInteger> afac; 377 afac = new AlgebraicNumberRing<ModInteger>(mo); 378 379 AlgebraicNumber<ModInteger> a = afac.getONE(); 380 GreatestCommonDivisor<AlgebraicNumber<ModInteger>> ufd; 381 382 ufd = GCDFactory.<AlgebraicNumber<ModInteger>> getImplementation(afac); 383 //System.out.println("ufd = " + ufd); 384 assertTrue("ufd = Subres " + ufd, ufd instanceof GreatestCommonDivisorSubres); 385 } 386 387 }