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