001/* 002 * $Id$ 003 */ 004 005package edu.jas.fd; 006 007 008 009import edu.jas.arith.BigComplex; 010import edu.jas.arith.BigInteger; 011import edu.jas.arith.BigRational; 012import edu.jas.arith.ModInteger; 013import edu.jas.arith.ModIntegerRing; 014import edu.jas.poly.AlgebraicNumber; 015import edu.jas.poly.AlgebraicNumberRing; 016import edu.jas.poly.GenPolynomial; 017import edu.jas.poly.GenPolynomialRing; 018import edu.jas.poly.GenSolvablePolynomial; 019import edu.jas.poly.GenSolvablePolynomialRing; 020import edu.jas.poly.TermOrder; 021import edu.jas.poly.TermOrderByName; 022 023// import java.util.Map; 024 025import junit.framework.Test; 026import junit.framework.TestCase; 027import junit.framework.TestSuite; 028 029 030/** 031 * Solvable GreatestCommonDivisor factory tests with JUnit. 032 * @author Heinz Kredel 033 */ 034 035public class SGCDFactoryTest extends TestCase { 036 037 038 /** 039 * main. 040 */ 041 public static void main(String[] args) { 042 junit.textui.TestRunner.run(suite()); 043 } 044 045 046 /** 047 * Constructs a <CODE>SGCDFactoryTest</CODE> object. 048 * @param name String. 049 */ 050 public SGCDFactoryTest(String name) { 051 super(name); 052 } 053 054 055 /** 056 */ 057 public static Test suite() { 058 TestSuite suite = new TestSuite(SGCDFactoryTest.class); 059 return suite; 060 } 061 062 063 TermOrder to = TermOrderByName.INVLEX; 064 065 066 GenSolvablePolynomialRing<BigInteger> dfac; 067 068 069 GenSolvablePolynomialRing<BigInteger> cfac; 070 071 072 GenSolvablePolynomialRing<GenPolynomial<BigInteger>> rfac; 073 074 075 BigInteger ai, bi, ci, di, ei; 076 077 078 GenSolvablePolynomial<BigInteger> a, b, c, d, e; 079 080 081 GenSolvablePolynomial<GenPolynomial<BigInteger>> ar, br, cr, dr, er; 082 083 084 int rl = 5; 085 086 087 int kl = 4; 088 089 090 int ll = 5; 091 092 093 int el = 3; 094 095 096 float q = 0.3f; 097 098 099 @Override 100 protected void setUp() { 101 a = b = c = d = e = null; 102 ai = bi = ci = di = ei = null; 103 ar = br = cr = dr = er = null; 104 dfac = new GenSolvablePolynomialRing<BigInteger>(new BigInteger(1), rl, to); 105 cfac = new GenSolvablePolynomialRing<BigInteger>(new BigInteger(1), rl - 1, to); 106 rfac = new GenSolvablePolynomialRing<GenPolynomial<BigInteger>>(cfac, 1, to); 107 } 108 109 110 @Override 111 protected void tearDown() { 112 a = b = c = d = e = null; 113 ai = bi = ci = di = ei = null; 114 ar = br = cr = dr = er = null; 115 dfac = null; 116 cfac = null; 117 rfac = null; 118 } 119 120 121 /** 122 * Test get BigInteger implementation. 123 */ 124 public void testBigInteger() { 125 BigInteger bi = new BigInteger(); 126 GreatestCommonDivisor<BigInteger> ufd; 127 128 ufd = SGCDFactory.getImplementation(bi); 129 //System.out.println("ufd = " + ufd); 130 assertTrue("ufd = Primitive " + ufd, ufd instanceof GreatestCommonDivisorPrimitive); 131 132 ufd = SGCDFactory.getProxy(bi); 133 //System.out.println("ufd = " + ufd); 134 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 135 assertTrue("ufd = Primitive " + ufd, ((SGCDParallelProxy)ufd).e1 instanceof GreatestCommonDivisorPrimitive); 136 } 137 138 139 /** 140 * Test get ModInteger implementation. 141 */ 142 public void testModInteger() { 143 ModIntegerRing mi = new ModIntegerRing(19, true); 144 GreatestCommonDivisor<ModInteger> ufd; 145 146 ufd = SGCDFactory.getImplementation(mi); 147 //System.out.println("ufd = " + ufd); 148 assertTrue("ufd = Simple " + ufd, ufd instanceof GreatestCommonDivisorSimple); 149 150 ufd = SGCDFactory.getProxy(mi); 151 //System.out.println("ufd = " + ufd); 152 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 153 assertTrue("ufd = Primitive " + ufd, ((SGCDParallelProxy)ufd).e2 instanceof GreatestCommonDivisorSimple); 154 155 mi = new ModIntegerRing(30); 156 ufd = SGCDFactory.getImplementation(mi); 157 //System.out.println("ufd = " + ufd); 158 assertTrue("ufd = Primitive " + ufd, ufd instanceof GreatestCommonDivisorPrimitive); 159 160 ufd = SGCDFactory.getProxy(mi); 161 //System.out.println("ufd = " + ufd); 162 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 163 assertTrue("ufd = Simple " + ufd, ((SGCDParallelProxy)ufd).e1 instanceof GreatestCommonDivisorPrimitive); 164 } 165 166 167 /** 168 * Test get BigRational implementation. 169 */ 170 public void testBigRational() { 171 BigRational b = new BigRational(); 172 GreatestCommonDivisor<BigRational> ufd; 173 174 ufd = SGCDFactory.getImplementation(b); 175 //System.out.println("ufd = " + ufd); 176 assertTrue("ufd = Simple " + ufd, ufd instanceof GreatestCommonDivisorSimple); 177 178 ufd = SGCDFactory.getProxy(b); 179 //System.out.println("ufd = " + ufd); 180 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 181 assertTrue("ufd = Simple " + ufd, ((SGCDParallelProxy)ufd).e2 instanceof GreatestCommonDivisorSimple); 182 } 183 184 185 /** 186 * Test get BigComplex implementation. 187 */ 188 public void testBigComplex() { 189 BigComplex b = new BigComplex(); 190 GreatestCommonDivisor<BigComplex> ufd; 191 192 ufd = SGCDFactory.<BigComplex> getImplementation(b); 193 //System.out.println("ufd = " + ufd); 194 assertTrue("ufd = Simple " + ufd, ufd instanceof GreatestCommonDivisorSimple); 195 196 ufd = SGCDFactory.<BigComplex> getProxy(b); 197 //System.out.println("ufd = " + ufd); 198 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 199 assertTrue("ufd = Simple " + ufd, ((SGCDParallelProxy)ufd).e1 instanceof GreatestCommonDivisorSimple); 200 } 201 202 203 /** 204 * Test get AlgebraicNumber<BigRational> implementation. 205 * 206 */ 207 public void testAlgebraicNumberBigRational() { 208 BigRational b = new BigRational(); 209 GenPolynomialRing<BigRational> fac; 210 fac = new GenPolynomialRing<BigRational>(b, 1); 211 GenPolynomial<BigRational> mo = fac.random(kl, ll, el, q); 212 while (mo.isZERO() || mo.isONE() || mo.isConstant()) { 213 mo = fac.random(kl, ll, el, q); 214 } 215 216 AlgebraicNumberRing<BigRational> afac; 217 afac = new AlgebraicNumberRing<BigRational>(mo); 218 219 GreatestCommonDivisor<AlgebraicNumber<BigRational>> ufd; 220 221 ufd = SGCDFactory.<AlgebraicNumber<BigRational>> getImplementation(afac); 222 //System.out.println("ufd1 = " + ufd); 223 assertTrue("ufd = Primitive " + ufd, ufd instanceof GreatestCommonDivisorPrimitive); 224 225 ufd = SGCDFactory.<AlgebraicNumber<BigRational>> getProxy(afac); 226 //System.out.println("ufd1 = " + ufd); 227 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 228 assertTrue("ufd = Primitive " + ufd, ((SGCDParallelProxy)ufd).e2 instanceof GreatestCommonDivisorPrimitive); 229 230 mo = fac.univariate(0).subtract(fac.getONE()); 231 afac = new AlgebraicNumberRing<BigRational>(mo, true); 232 233 ufd = SGCDFactory.<AlgebraicNumber<BigRational>> getImplementation(afac); 234 //System.out.println("ufd1 = " + ufd); 235 assertTrue("ufd = Simple " + ufd, ufd instanceof GreatestCommonDivisorSimple); 236 237 ufd = SGCDFactory.<AlgebraicNumber<BigRational>> getProxy(afac); 238 //System.out.println("ufd1 = " + ufd); 239 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 240 assertTrue("ufd = Simple " + ufd, ((SGCDParallelProxy)ufd).e1 instanceof GreatestCommonDivisorSimple); 241 } 242 243 244 /** 245 * Test get AlgebraicNumber<ModInteger> implementation. 246 */ 247 public void testAlgebraicNumberModInteger() { 248 ModIntegerRing b = new ModIntegerRing(19, true); 249 GenPolynomialRing<ModInteger> fac; 250 fac = new GenPolynomialRing<ModInteger>(b, 1); 251 GenPolynomial<ModInteger> mo = fac.random(kl, ll, el, q); 252 while (mo.isZERO() || mo.isONE() || mo.isConstant()) { 253 mo = fac.random(kl, ll, el, q); 254 } 255 256 AlgebraicNumberRing<ModInteger> afac; 257 afac = new AlgebraicNumberRing<ModInteger>(mo); 258 259 AlgebraicNumber<ModInteger> a = afac.getONE(); 260 assertTrue("a == 1 " + a, a.isONE()); 261 GreatestCommonDivisor<AlgebraicNumber<ModInteger>> ufd; 262 263 ufd = SGCDFactory.<AlgebraicNumber<ModInteger>> getImplementation(afac); 264 //System.out.println("ufd2 = " + ufd); 265 assertTrue("ufd = Primitive " + ufd, ufd instanceof GreatestCommonDivisorPrimitive); 266 267 ufd = SGCDFactory.<AlgebraicNumber<ModInteger>> getProxy(afac); 268 //System.out.println("ufd2 = " + ufd); 269 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 270 assertTrue("ufd = Primitive " + ufd, ((SGCDParallelProxy)ufd).e2 instanceof GreatestCommonDivisorPrimitive); 271 272 mo = fac.univariate(0).subtract(fac.getONE()); 273 afac = new AlgebraicNumberRing<ModInteger>(mo, true); 274 ufd = SGCDFactory.<AlgebraicNumber<ModInteger>> getImplementation(afac); 275 //System.out.println("ufd2 = " + ufd); 276 assertTrue("ufd = Simple " + ufd, ufd instanceof GreatestCommonDivisorSimple); 277 278 ufd = SGCDFactory.<AlgebraicNumber<ModInteger>> getProxy(afac); 279 //System.out.println("ufd2 = " + ufd); 280 assertTrue("ufd = Parallel Proxy " + ufd, ufd instanceof SGCDParallelProxy); 281 assertTrue("ufd = Primitive " + ufd, ((SGCDParallelProxy)ufd).e2 instanceof GreatestCommonDivisorPrimitive); 282 } 283 284}