001 /* 002 * $Id: FactorGenericTest.java 3356 2010-10-23 16:41:01Z kredel $ 003 */ 004 005 package edu.jas.ufd; 006 007 008 import java.util.SortedMap; 009 010 import junit.framework.Test; 011 import junit.framework.TestCase; 012 import junit.framework.TestSuite; 013 014 import edu.jas.arith.BigRational; 015 import edu.jas.kern.ComputerThreads; 016 import edu.jas.poly.AlgebraicNumber; 017 import edu.jas.poly.AlgebraicNumberRing; 018 import edu.jas.poly.GenPolynomial; 019 import edu.jas.poly.GenPolynomialRing; 020 import edu.jas.poly.TermOrder; 021 022 023 /** 024 * Factor rational tests with JUnit. 025 * @author Heinz Kredel. 026 */ 027 028 public class FactorGenericTest extends TestCase { 029 030 031 /** 032 * main. 033 */ 034 public static void main(String[] args) { 035 //BasicConfigurator.configure(); 036 junit.textui.TestRunner.run(suite()); 037 } 038 039 040 /** 041 * Constructs a <CODE>FactorGenericTest</CODE> object. 042 * @param name String. 043 */ 044 public FactorGenericTest(String name) { 045 super(name); 046 } 047 048 049 /** 050 */ 051 public static Test suite() { 052 TestSuite suite = new TestSuite(FactorGenericTest.class); 053 return suite; 054 } 055 056 057 int rl = 3; 058 059 060 int kl = 5; 061 062 063 int ll = 5; 064 065 066 int el = 3; 067 068 069 float q = 0.3f; 070 071 072 @Override 073 protected void setUp() { 074 } 075 076 077 @Override 078 protected void tearDown() { 079 ComputerThreads.terminate(); 080 } 081 082 083 /** 084 * Test dummy for Junit. 085 * 086 */ 087 public void xtestDummy() { 088 } 089 090 091 /** 092 * Test generic factorization. 093 * 094 */ 095 public void testGenericFactorization() { 096 097 TermOrder to = new TermOrder(TermOrder.INVLEX); 098 BigRational cfac = new BigRational(1); 099 100 String[] var_w2 = new String[] { "w2" }; 101 GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, 1, to, var_w2); 102 //System.out.println("pfac = " + pfac.toScript()); 103 104 GenPolynomial<BigRational> w2 = pfac.parse(" w2^2 - 2 "); 105 //System.out.println("w2 = " + w2); 106 107 AlgebraicNumberRing<BigRational> a2fac = new AlgebraicNumberRing<BigRational>(w2, true); 108 //System.out.println("a2fac = " + a2fac.toScript()); 109 110 String[] var_x = new String[] { "x" }; 111 GenPolynomialRing<AlgebraicNumber<BigRational>> apfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>( 112 a2fac, 1, to, var_x); 113 //System.out.println("apfac = " + apfac.toScript()); 114 115 QuotientRing<AlgebraicNumber<BigRational>> qfac = new QuotientRing<AlgebraicNumber<BigRational>>( 116 apfac); 117 //System.out.println("qfac = " + qfac.toScript()); 118 119 String[] var_wx = new String[] { "wx" }; 120 GenPolynomialRing<Quotient<AlgebraicNumber<BigRational>>> pqfac = new GenPolynomialRing<Quotient<AlgebraicNumber<BigRational>>>( 121 qfac, 1, to, var_wx); 122 //System.out.println("pqfac = " + pqfac.toScript()); 123 124 GenPolynomial<Quotient<AlgebraicNumber<BigRational>>> wx = pqfac.parse(" wx^2 - { x } "); 125 //System.out.println("wx = " + wx); 126 127 AlgebraicNumberRing<Quotient<AlgebraicNumber<BigRational>>> axfac = new AlgebraicNumberRing<Quotient<AlgebraicNumber<BigRational>>>( 128 wx, true); 129 //System.out.println("axfac = " + axfac.toScript()); 130 131 String[] var_y = new String[] { "y" }; 132 GenPolynomialRing<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>> apqfac = new GenPolynomialRing<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>>( 133 axfac, 1, to, var_y); 134 //System.out.println("apqfac = " + apqfac.toScript()); 135 136 // ( y^2 - x ) * ( y^2 - 2 ), need {} for recursive coefficients 137 GenPolynomial<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>> f; 138 f = apqfac.parse(" ( y^2 - { { x } } ) * ( y^2 - 2 )^2 "); 139 //System.out.println("f = " + f); 140 141 FactorAbstract<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>> engine = FactorFactory 142 .getImplementation(axfac); 143 //System.out.println("engine = " + engine); 144 145 SortedMap<GenPolynomial<AlgebraicNumber<Quotient<AlgebraicNumber<BigRational>>>>, Long> F = engine 146 .factors(f); 147 //System.out.println("factors(f) = " + F); 148 149 assertTrue("#facs >= 4", F.size() >= 4); 150 151 boolean t = engine.isFactorization(f, F); 152 //System.out.println("t = " + t); 153 assertTrue("prod(factor(a)) = a", t); 154 } 155 156 }