001/* 002 * $Id: FactorTest.java 5813 2018-04-25 21:29:28Z kredel $ 003 */ 004 005package edu.jas.ufd; 006 007 008import edu.jas.arith.BigInteger; 009import edu.jas.arith.BigRational; 010import edu.jas.arith.ModInteger; 011import edu.jas.arith.ModIntegerRing; 012import edu.jas.arith.ModLong; 013import edu.jas.arith.ModLongRing; 014import edu.jas.kern.ComputerThreads; 015import edu.jas.poly.AlgebraicNumber; 016import edu.jas.poly.AlgebraicNumberRing; 017import edu.jas.poly.GenPolynomial; 018import edu.jas.poly.GenPolynomialRing; 019import edu.jas.poly.TermOrder; 020import edu.jas.structure.RingFactory; 021 022import junit.framework.Test; 023import junit.framework.TestCase; 024import junit.framework.TestSuite; 025 026 027/** 028 * Factor tests with JUnit. 029 * @see edu.jas.application.FactorTest 030 * @author Heinz Kredel 031 */ 032 033public 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 public void testDummy() { 092 } 093 094 095 /** 096 * Test factory. 097 */ 098 public void testFactory() { 099 ModIntegerRing mi = new ModIntegerRing(19, true); 100 Factorization<ModInteger> ufdm = FactorFactory.getImplementation(mi); 101 //System.out.println("ufdm = " + ufdm); 102 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular); 103 104 ModLongRing ml = new ModLongRing(19, true); 105 Factorization<ModLong> ufdml = FactorFactory.getImplementation(ml); 106 //System.out.println("ufdml = " + ufdml); 107 assertTrue("ufd != Modular " + ufdml, ufdml instanceof FactorModular); 108 109 BigInteger bi = new BigInteger(1); 110 Factorization<BigInteger> ufdi = FactorFactory.getImplementation(bi); 111 //System.out.println("ufdi = " + ufdi); 112 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger); 113 114 BigRational br = new BigRational(1); 115 Factorization<BigRational> ufdr = FactorFactory.getImplementation(br); 116 //System.out.println("ufdr = " + ufdr); 117 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational); 118 119 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 120 GenPolynomial<ModInteger> pm = pmfac.univariate(0); 121 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true); 122 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.getImplementation(am); 123 //System.out.println("ufdam = " + ufdam); 124 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic); 125 126 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1); 127 GenPolynomial<BigRational> pr = prfac.univariate(0); 128 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true); 129 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.getImplementation(ar); 130 //System.out.println("ufdar = " + ufdar); 131 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic); 132 133 prfac = new GenPolynomialRing<BigRational>(br, 2); 134 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac); 135 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.getImplementation(qrfac); 136 //System.out.println("ufdqr = " + ufdqr); 137 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient); 138 } 139 140 141 /** 142 * Test factory generic. 143 */ 144 @SuppressWarnings("unchecked") 145 public void testFactoryGeneric() { 146 ModIntegerRing mi = new ModIntegerRing(19, true); 147 Factorization<ModInteger> ufdm = FactorFactory.getImplementation((RingFactory) mi); 148 //System.out.println("ufdm = " + ufdm); 149 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular); 150 151 BigInteger bi = new BigInteger(1); 152 Factorization<BigInteger> ufdi = FactorFactory.getImplementation((RingFactory) bi); 153 //System.out.println("ufdi = " + ufdi); 154 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger); 155 156 BigRational br = new BigRational(1); 157 Factorization<BigRational> ufdr = FactorFactory.getImplementation((RingFactory) br); 158 //System.out.println("ufdr = " + ufdr); 159 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational); 160 161 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 162 GenPolynomial<ModInteger> pm = pmfac.univariate(0); 163 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true); 164 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.getImplementation((RingFactory) am); 165 //System.out.println("ufdam = " + ufdam); 166 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic); 167 168 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1); 169 GenPolynomial<BigRational> pr = prfac.univariate(0); 170 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true); 171 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.getImplementation((RingFactory) ar); 172 //System.out.println("ufdar = " + ufdar); 173 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic); 174 175 prfac = new GenPolynomialRing<BigRational>(br, 2); 176 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac); 177 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.getImplementation((RingFactory) qrfac); 178 //System.out.println("ufdqr = " + ufdqr); 179 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient); 180 181 pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 182 QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac); 183 Factorization<Quotient<ModInteger>> ufdqm = FactorFactory.getImplementation((RingFactory) qmfac); 184 //System.out.println("ufdqm = " + ufdqm); 185 assertTrue("ufd != Quotient<ModInteger> " + ufdqm, ufdqm instanceof FactorQuotient); 186 187 prfac = new GenPolynomialRing<BigRational>(br, 2); 188 GenPolynomialRing<GenPolynomial<BigRational>> rrfac = new GenPolynomialRing<GenPolynomial<BigRational>>( 189 prfac, 1); 190 Factorization<BigRational> ufdrr = FactorFactory.getImplementation((RingFactory) rrfac); 191 //System.out.println("ufdrr = " + ufdrr); 192 assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr, 193 ufdrr instanceof FactorRational); 194 } 195 196 197 /** 198 * Test factory specific. 199 */ 200 public void testFactorySpecific() { 201 ModIntegerRing mi = new ModIntegerRing(19, true); 202 Factorization<ModInteger> ufdm = FactorFactory.getImplementation(mi); 203 //System.out.println("ufdm = " + ufdm); 204 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular); 205 206 BigInteger bi = new BigInteger(1); 207 Factorization<BigInteger> ufdi = FactorFactory.getImplementation(bi); 208 //System.out.println("ufdi = " + ufdi); 209 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger); 210 211 BigRational br = new BigRational(1); 212 Factorization<BigRational> ufdr = FactorFactory.getImplementation(br); 213 //System.out.println("ufdr = " + ufdr); 214 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational); 215 216 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 217 GenPolynomial<ModInteger> pm = pmfac.univariate(0); 218 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true); 219 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.<ModInteger> getImplementation(am); 220 //System.out.println("ufdam = " + ufdam); 221 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic); 222 223 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1); 224 GenPolynomial<BigRational> pr = prfac.univariate(0); 225 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true); 226 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.<BigRational> getImplementation(ar); 227 //System.out.println("ufdar = " + ufdar); 228 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic); 229 230 prfac = new GenPolynomialRing<BigRational>(br, 2); 231 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac); 232 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.<BigRational> getImplementation(qrfac); 233 //System.out.println("ufdqr = " + ufdqr); 234 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient); 235 236 pmfac = new GenPolynomialRing<ModInteger>(mi, 1); 237 QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac); 238 Factorization<Quotient<ModInteger>> ufdqm = FactorFactory.<ModInteger> getImplementation(qmfac); 239 //System.out.println("ufdqm = " + ufdqm); 240 assertTrue("ufd != Quotient<ModInteger> " + ufdqm, ufdqm instanceof FactorQuotient); 241 242 prfac = new GenPolynomialRing<BigRational>(br, 2); 243 //GenPolynomialRing<GenPolynomial<BigRational>> rrfac = new GenPolynomialRing<GenPolynomial<BigRational>>( 244 // prfac, 1); 245 Factorization<BigRational> ufdrr = FactorFactory.<BigRational> getImplementation(prfac); 246 //System.out.println("ufdrr = " + ufdrr); 247 assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr, 248 ufdrr instanceof FactorRational); 249 } 250 251 252 /** 253 * Test rational absolute factorization, for elementary integration. 254 */ 255 public void testBaseRationalAbsoluteFactorization() { 256 TermOrder to = new TermOrder(TermOrder.INVLEX); 257 BigRational cfac = new BigRational(1); 258 //String[] alpha = new String[] { "alpha" }; 259 String[] vars = new String[] { "x" }; 260 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, vars); 261 GenPolynomial<BigRational> agen = pfac.univariate(0, 4); 262 agen = agen.sum(pfac.fromInteger(4)); // x^4 + 4 263 264 // GenPolynomial<BigRational> x6 = pfac.univariate(0, 6); 265 // GenPolynomial<BigRational> x4 = pfac.univariate(0, 4); 266 // GenPolynomial<BigRational> x2 = pfac.univariate(0, 2); 267 // // x^6 - 5 x^4 + 5 x^2 + 4 268 // agen = x6.subtract(x4.multiply(pfac.fromInteger(5))); 269 // agen = agen.sum(x2.multiply(pfac.fromInteger(5))); 270 // agen = agen.sum(pfac.fromInteger(4)); 271 272 // GenPolynomial<BigRational> x3 = pfac.univariate(0, 3); 273 // GenPolynomial<BigRational> x = pfac.univariate(0); 274 // // x^3 + x 275 // agen = x3.sum(x); 276 277 // GenPolynomial<BigRational> x2 = pfac.univariate(0, 2); 278 // // x^2 - 2 279 // agen = x2.subtract(pfac.fromInteger(2)); 280 281 GenPolynomial<BigRational> N = pfac.getONE(); 282 FactorRational engine = new FactorRational(); 283 PartialFraction<BigRational> F = engine.baseAlgebraicPartialFraction(N, agen); 284 //System.out.println("\npartial fraction: " + F.toScript()); 285 assertTrue("is partial fraction: " + F, F.isPartialFraction()); 286 } 287 288}