001 /* 002 * $Id: FactorTest.java 3673 2011-06-26 11:38:25Z kredel $ 003 */ 004 005 package edu.jas.ufd; 006 007 008 import junit.framework.Test; 009 import junit.framework.TestCase; 010 import junit.framework.TestSuite; 011 012 import edu.jas.arith.BigInteger; 013 import edu.jas.arith.BigRational; 014 import edu.jas.arith.ModInteger; 015 import edu.jas.arith.ModIntegerRing; 016 import edu.jas.arith.ModLong; 017 import edu.jas.arith.ModLongRing; 018 import edu.jas.kern.ComputerThreads; 019 import edu.jas.poly.AlgebraicNumber; 020 import edu.jas.poly.AlgebraicNumberRing; 021 import edu.jas.poly.GenPolynomial; 022 import edu.jas.poly.GenPolynomialRing; 023 import edu.jas.poly.TermOrder; 024 import edu.jas.structure.RingFactory; 025 026 027 /** 028 * Factor tests with JUnit. 029 * @see edu.jas.application.FactorTest 030 * @author Heinz Kredel. 031 */ 032 033 public class FactorTest 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>FactorTest</CODE> object. 047 * @param name String. 048 */ 049 public FactorTest(String name) { 050 super(name); 051 } 052 053 054 /** 055 */ 056 public static Test suite() { 057 TestSuite suite = new TestSuite(FactorTest.class); 058 return suite; 059 } 060 061 062 int rl = 3; 063 064 065 int kl = 5; 066 067 068 int ll = 5; 069 070 071 int el = 3; 072 073 074 float q = 0.3f; 075 076 077 @Override 078 protected void setUp() { 079 } 080 081 082 @Override 083 protected void tearDown() { 084 ComputerThreads.terminate(); 085 } 086 087 088 /** 089 * Test dummy for Junit. 090 * 091 */ 092 public void testDummy() { 093 } 094 095 096 /** 097 * Test factory. 098 * 099 */ 100 public void testFactory() { 101 ModIntegerRing mi = new ModIntegerRing(19, true); 102 Factorization<ModInteger> ufdm = FactorFactory.getImplementation(mi); 103 //System.out.println("ufdm = " + ufdm); 104 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular); 105 106 ModLongRing ml = new ModLongRing(19, true); 107 Factorization<ModLong> ufdml = FactorFactory.getImplementation(ml); 108 //System.out.println("ufdml = " + ufdml); 109 assertTrue("ufd != Modular " + ufdml, ufdml instanceof FactorModular); 110 111 BigInteger bi = new BigInteger(1); 112 Factorization<BigInteger> ufdi = FactorFactory.getImplementation(bi); 113 //System.out.println("ufdi = " + ufdi); 114 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger); 115 116 BigRational br = new BigRational(1); 117 Factorization<BigRational> ufdr = FactorFactory.getImplementation(br); 118 //System.out.println("ufdr = " + ufdr); 119 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational); 120 121 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 122 GenPolynomial<ModInteger> pm = pmfac.univariate(0); 123 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true); 124 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.getImplementation(am); 125 //System.out.println("ufdam = " + ufdam); 126 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic); 127 128 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1); 129 GenPolynomial<BigRational> pr = prfac.univariate(0); 130 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true); 131 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.getImplementation(ar); 132 //System.out.println("ufdar = " + ufdar); 133 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic); 134 135 prfac = new GenPolynomialRing<BigRational>(br, 2); 136 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac); 137 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.getImplementation(qrfac); 138 //System.out.println("ufdqr = " + ufdqr); 139 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient); 140 } 141 142 143 /** 144 * Test factory generic. 145 * 146 */ 147 @SuppressWarnings("unchecked") 148 public void testFactoryGeneric() { 149 ModIntegerRing mi = new ModIntegerRing(19, true); 150 Factorization<ModInteger> ufdm = FactorFactory.getImplementation((RingFactory) mi); 151 //System.out.println("ufdm = " + ufdm); 152 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular); 153 154 BigInteger bi = new BigInteger(1); 155 Factorization<BigInteger> ufdi = FactorFactory.getImplementation((RingFactory) bi); 156 //System.out.println("ufdi = " + ufdi); 157 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger); 158 159 BigRational br = new BigRational(1); 160 Factorization<BigRational> ufdr = FactorFactory.getImplementation((RingFactory) br); 161 //System.out.println("ufdr = " + ufdr); 162 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational); 163 164 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 165 GenPolynomial<ModInteger> pm = pmfac.univariate(0); 166 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true); 167 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.getImplementation((RingFactory) am); 168 //System.out.println("ufdam = " + ufdam); 169 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic); 170 171 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1); 172 GenPolynomial<BigRational> pr = prfac.univariate(0); 173 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true); 174 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.getImplementation((RingFactory) ar); 175 //System.out.println("ufdar = " + ufdar); 176 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic); 177 178 prfac = new GenPolynomialRing<BigRational>(br, 2); 179 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac); 180 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.getImplementation((RingFactory) qrfac); 181 //System.out.println("ufdqr = " + ufdqr); 182 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient); 183 184 pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 185 QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac); 186 Factorization<Quotient<ModInteger>> ufdqm = FactorFactory.getImplementation((RingFactory) qmfac); 187 //System.out.println("ufdqm = " + ufdqm); 188 assertTrue("ufd != Quotient<ModInteger> " + ufdqm, ufdqm instanceof FactorQuotient); 189 190 prfac = new GenPolynomialRing<BigRational>(br, 2); 191 GenPolynomialRing<GenPolynomial<BigRational>> rrfac = new GenPolynomialRing<GenPolynomial<BigRational>>( 192 prfac, 1); 193 Factorization<BigRational> ufdrr = FactorFactory.getImplementation((RingFactory) rrfac); 194 //System.out.println("ufdrr = " + ufdrr); 195 assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr, 196 ufdrr instanceof FactorRational); 197 } 198 199 200 /** 201 * Test factory specific. 202 * 203 */ 204 public void testFactorySpecific() { 205 ModIntegerRing mi = new ModIntegerRing(19, true); 206 Factorization<ModInteger> ufdm = FactorFactory.getImplementation(mi); 207 //System.out.println("ufdm = " + ufdm); 208 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular); 209 210 BigInteger bi = new BigInteger(1); 211 Factorization<BigInteger> ufdi = FactorFactory.getImplementation(bi); 212 //System.out.println("ufdi = " + ufdi); 213 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger); 214 215 BigRational br = new BigRational(1); 216 Factorization<BigRational> ufdr = FactorFactory.getImplementation(br); 217 //System.out.println("ufdr = " + ufdr); 218 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational); 219 220 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 221 GenPolynomial<ModInteger> pm = pmfac.univariate(0); 222 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true); 223 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.<ModInteger> getImplementation(am); 224 //System.out.println("ufdam = " + ufdam); 225 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic); 226 227 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1); 228 GenPolynomial<BigRational> pr = prfac.univariate(0); 229 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true); 230 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.<BigRational> getImplementation(ar); 231 //System.out.println("ufdar = " + ufdar); 232 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic); 233 234 prfac = new GenPolynomialRing<BigRational>(br, 2); 235 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac); 236 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.<BigRational> getImplementation(qrfac); 237 //System.out.println("ufdqr = " + ufdqr); 238 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient); 239 240 pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 241 QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac); 242 Factorization<Quotient<ModInteger>> ufdqm = FactorFactory.<ModInteger> getImplementation(qmfac); 243 //System.out.println("ufdqm = " + ufdqm); 244 assertTrue("ufd != Quotient<ModInteger> " + ufdqm, ufdqm instanceof FactorQuotient); 245 246 prfac = new GenPolynomialRing<BigRational>(br, 2); 247 GenPolynomialRing<GenPolynomial<BigRational>> rrfac = new GenPolynomialRing<GenPolynomial<BigRational>>( 248 prfac, 1); 249 Factorization<BigRational> ufdrr = FactorFactory.<BigRational> getImplementation(prfac); 250 //System.out.println("ufdrr = " + ufdrr); 251 assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr, 252 ufdrr instanceof FactorRational); 253 } 254 255 256 /** 257 * Test rational absolute factorization, Rothstein-Trager step. 258 * 259 */ 260 public void xtestBaseRationalAbsoluteFactorizationRoT() { 261 262 TermOrder to = new TermOrder(TermOrder.INVLEX); 263 BigRational cfac = new BigRational(1); 264 String[] alpha = new String[] { "alpha" }; 265 String[] vars = new String[] { "x" }; 266 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 267 GenPolynomial<BigRational> agen = pfac.univariate(0, 4); 268 agen = agen.sum(pfac.fromInteger(4)); // x^4 + 4 269 270 // GenPolynomial<BigRational> x6 = pfac.univariate(0, 6); 271 // GenPolynomial<BigRational> x4 = pfac.univariate(0, 4); 272 // GenPolynomial<BigRational> x2 = pfac.univariate(0, 2); 273 // // x^6 - 5 x^4 + 5 x^2 + 4 274 // agen = x6.subtract(x4.multiply(pfac.fromInteger(5))); 275 // agen = agen.sum(x2.multiply(pfac.fromInteger(5))); 276 // agen = agen.sum(pfac.fromInteger(4)); 277 278 // GenPolynomial<BigRational> x3 = pfac.univariate(0, 3); 279 // GenPolynomial<BigRational> x = pfac.univariate(0); 280 // // x^3 + x 281 // agen = x3.sum(x); 282 283 GenPolynomial<BigRational> x2 = pfac.univariate(0, 2); 284 // x^2 - 2 285 agen = x2.subtract(pfac.fromInteger(2)); 286 287 GenPolynomial<BigRational> N = pfac.getONE(); 288 289 FactorRational engine = new FactorRational(); 290 291 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, agen); 292 //System.out.println("\npartial fraction = " + F); 293 294 //boolean t = engine.isAbsoluteFactorization(F); 295 //System.out.println("t = " + t); 296 // assertTrue("prod(factor(a)) = a", t); 297 } 298 299 }