001 /* 002 * $Id: FactorRealRealTest.java 3670 2011-06-25 19:04:28Z kredel $ 003 */ 004 005 package edu.jas.application; 006 007 008 import java.util.SortedMap; 009 import java.util.List; 010 011 import org.apache.log4j.BasicConfigurator; 012 013 import junit.framework.Test; 014 import junit.framework.TestCase; 015 import junit.framework.TestSuite; 016 017 import edu.jas.arith.BigRational; 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.poly.Complex; 025 import edu.jas.poly.ComplexRing; 026 import edu.jas.root.Interval; 027 import edu.jas.root.RootUtil; 028 029 030 /** 031 * Factor real algebraic tests with JUnit. 032 * @author Heinz Kredel. 033 */ 034 035 public class FactorRealRealTest extends TestCase { 036 037 038 /** 039 * main. 040 */ 041 public static void main(String[] args) { 042 BasicConfigurator.configure(); 043 junit.textui.TestRunner.run(suite()); 044 } 045 046 047 /** 048 * Constructs a <CODE>FactorRealRealTest</CODE> object. 049 * @param name String. 050 */ 051 public FactorRealRealTest(String name) { 052 super(name); 053 } 054 055 056 /** 057 */ 058 public static Test suite() { 059 TestSuite suite = new TestSuite(FactorRealRealTest.class); 060 return suite; 061 } 062 063 064 int rl = 1; 065 066 067 int kl = 5; 068 069 070 int ll = 5; 071 072 073 int el = 3; 074 075 076 float q = 0.3f; 077 078 079 @Override 080 protected void setUp() { 081 } 082 083 084 @Override 085 protected void tearDown() { 086 ComputerThreads.terminate(); 087 } 088 089 090 /** 091 * Test dummy for Junit. 092 */ 093 public void testDummy() { 094 } 095 096 097 /** 098 * Test real real algebraic factorization. 099 */ 100 public void testRealRealAlgebraicFactorization() { 101 102 TermOrder to = new TermOrder(TermOrder.INVLEX); 103 BigRational bfac = new BigRational(1); 104 105 ComplexRing<BigRational> cfac = new ComplexRing<BigRational>(bfac); 106 String[] vars = new String[] { "z" }; 107 GenPolynomialRing<Complex<BigRational>> dfac = new GenPolynomialRing<Complex<BigRational>>(cfac, to, vars); 108 GenPolynomial<Complex<BigRational>> ap = dfac.parse("z^3 - i2"); 109 110 List<Complex<RealAlgebraicNumber<BigRational>>> roots 111 = RootFactory.<BigRational> complexAlgebraicNumbersComplex(ap); 112 //System.out.println("ap = " + ap); 113 //System.out.println("roots = " + roots); 114 assertTrue("#roots == deg(ap) ", roots.size() == ap.degree(0)); 115 116 for ( Complex<RealAlgebraicNumber<BigRational>> root : roots ) { 117 RealAlgebraicRing<BigRational> rfac = root.getRe().ring; 118 FactorRealReal<BigRational> fac = new FactorRealReal<BigRational>(rfac); 119 String[] var = new String[] { "t" }; 120 GenPolynomialRing<RealAlgebraicNumber<BigRational>> rpfac 121 = new GenPolynomialRing<RealAlgebraicNumber<BigRational>>(rfac, to, var); // univariate 122 123 GenPolynomial<RealAlgebraicNumber<BigRational>> a; 124 GenPolynomial<RealAlgebraicNumber<BigRational>> b = rpfac.random(2, ll, el, q); 125 GenPolynomial<RealAlgebraicNumber<BigRational>> c = rpfac.random(2, ll, el, q); 126 if (b.degree() == 0) { 127 b = b.multiply(rpfac.univariate(0)); 128 } 129 //b = b.monic(); 130 int facs = 0; 131 if (c.degree() > 0) { 132 facs++; 133 } 134 if (b.degree() > 0) { 135 facs++; 136 } 137 a = c.multiply(b); 138 //a = c; 139 //a = a.monic(); 140 //System.out.println("\na = " + a); 141 //System.out.println("b = " + b); 142 //System.out.println("c = " + c); 143 //System.out.println("b = " + b.monic()); 144 //System.out.println("c = " + c.monic()); 145 146 SortedMap<GenPolynomial<RealAlgebraicNumber<BigRational>>, Long> sm = fac.baseFactors(a); 147 //System.out.println("\na = " + a); 148 //System.out.println("sm = " + sm); 149 if (sm.size() >= facs) { 150 assertTrue("#facs < " + facs, sm.size() >= facs); 151 } else { 152 System.out.println("sm.size() < facs = " + facs); 153 } 154 boolean t = fac.isFactorization(a, sm); 155 //System.out.println("t = " + t); 156 assertTrue("prod(factor(a)) = a", t); 157 break; 158 } 159 } 160 161 }