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