001 /* 002 * $Id: FactorComplexTest.java 3364 2010-10-24 12:56:06Z 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 org.apache.log4j.BasicConfigurator; 015 016 import edu.jas.arith.BigRational; 017 import edu.jas.kern.ComputerThreads; 018 import edu.jas.poly.Complex; 019 import edu.jas.poly.ComplexRing; 020 import edu.jas.poly.GenPolynomial; 021 import edu.jas.poly.GenPolynomialRing; 022 import edu.jas.poly.TermOrder; 023 024 025 /** 026 * Factor complex via algebraic tests with JUnit. 027 * @author Heinz Kredel. 028 */ 029 030 public class FactorComplexTest extends TestCase { 031 032 033 /** 034 * main. 035 */ 036 public static void main(String[] args) { 037 //BasicConfigurator.configure(); 038 junit.textui.TestRunner.run(suite()); 039 } 040 041 042 /** 043 * Constructs a <CODE>FactorComplexTest</CODE> object. 044 * @param name String. 045 */ 046 public FactorComplexTest(String name) { 047 super(name); 048 } 049 050 051 /** 052 */ 053 public static Test suite() { 054 TestSuite suite = new TestSuite(FactorComplexTest.class); 055 return suite; 056 } 057 058 059 int rl = 3; 060 061 062 int kl = 5; 063 064 065 int ll = 5; 066 067 068 int el = 3; 069 070 071 float q = 0.3f; 072 073 074 @Override 075 protected void setUp() { 076 } 077 078 079 @Override 080 protected void tearDown() { 081 ComputerThreads.terminate(); 082 } 083 084 085 /** 086 * Test dummy for Junit. 087 * 088 */ 089 public void testDummy() { 090 } 091 092 093 /** 094 * Test complex via algebraic factorization. 095 * 096 */ 097 public void testComplexFactorization() { 098 099 TermOrder to = new TermOrder(TermOrder.INVLEX); 100 BigRational rfac = new BigRational(1); 101 ComplexRing<BigRational> cfac = new ComplexRing<BigRational>(rfac); 102 GenPolynomialRing<Complex<BigRational>> cpfac = new GenPolynomialRing<Complex<BigRational>>(cfac, 1, 103 to); 104 //System.out.println("cfac = " + cfac); 105 //System.out.println("cpfac = " + cpfac); 106 107 FactorComplex<BigRational> fac = new FactorComplex<BigRational>(cfac); 108 109 for (int i = 1; i < 3; i++) { 110 int facs = 0; 111 GenPolynomial<Complex<BigRational>> a; 112 GenPolynomial<Complex<BigRational>> c = cpfac.random(2, ll + i, el + i, q); 113 //a = a.monic(); 114 GenPolynomial<Complex<BigRational>> b = cpfac.random(2, ll + i, el + i, q); 115 if (b.degree() == 0) { 116 b = b.multiply(cpfac.univariate(0)); 117 } 118 if (c.degree() > 0) { 119 facs++; 120 } 121 b = b.multiply(b); 122 if (b.degree() > 0) { 123 facs++; 124 } 125 a = c.multiply(b); 126 //a = a.monic(); 127 //System.out.println("\na = " + a); 128 //System.out.println("b = " + b.monic()); 129 //System.out.println("c = " + c.monic()); 130 131 SortedMap<GenPolynomial<Complex<BigRational>>, Long> sm = fac.baseFactors(a); 132 //System.out.println("\na = " + a); 133 //System.out.println("sm = " + sm); 134 if (sm.size() >= facs) { 135 assertTrue("#facs < " + facs, sm.size() >= facs); 136 } else { 137 System.out.println("sm.size() < facs = " + facs); 138 } 139 boolean t = fac.isFactorization(a, sm); 140 //System.out.println("t = " + t); 141 assertTrue("prod(factor(a)) = a", t); 142 } 143 } 144 145 146 /** 147 * Test complex absolute via algebraic factorization. 148 * 149 */ 150 public void testComplexAbsoluteFactorization() { 151 152 TermOrder to = new TermOrder(TermOrder.INVLEX); 153 BigRational rfac = new BigRational(1); 154 ComplexRing<BigRational> cfac = new ComplexRing<BigRational>(rfac); 155 GenPolynomialRing<Complex<BigRational>> cpfac = new GenPolynomialRing<Complex<BigRational>>(cfac, 1, 156 to); 157 //System.out.println("cfac = " + cfac); 158 //System.out.println("cpfac = " + cpfac); 159 160 FactorComplex<BigRational> fac = new FactorComplex<BigRational>(cfac); 161 162 for (int i = 1; i < 2; i++) { 163 int facs = 0; 164 GenPolynomial<Complex<BigRational>> a; 165 GenPolynomial<Complex<BigRational>> c = cpfac.random(2, ll, el, q); 166 //a = a.monic(); 167 GenPolynomial<Complex<BigRational>> b = cpfac.random(2, ll, el, q); 168 if (b.degree() == 0) { 169 b = b.multiply(cpfac.univariate(0)); 170 } 171 if (c.degree() > 0) { 172 facs++; 173 } 174 b = b.multiply(b); 175 if (b.degree() > 0) { 176 facs++; 177 } 178 a = c.multiply(b); 179 //a = a.monic(); 180 //System.out.println("\na = " + a); 181 //System.out.println("b = " + b.monic()); 182 //System.out.println("c = " + c.monic()); 183 184 FactorsMap<Complex<BigRational>> sm = fac.baseFactorsAbsolute(a); 185 //System.out.println("\na = " + a); 186 //System.out.println("sm = " + sm); 187 boolean t = fac.isAbsoluteFactorization(sm); 188 //System.out.println("t = " + t); 189 assertTrue("prod(factor(a)) = a", t); 190 } 191 } 192 193 194 /** 195 * Test bivariate complex via algebraic factorization. 196 * 197 */ 198 public void testBivariateComplexFactorization() { 199 200 TermOrder to = new TermOrder(TermOrder.INVLEX); 201 BigRational rfac = new BigRational(1); 202 ComplexRing<BigRational> cfac = new ComplexRing<BigRational>(rfac); 203 GenPolynomialRing<Complex<BigRational>> cpfac = new GenPolynomialRing<Complex<BigRational>>(cfac, 2, 204 to); 205 //System.out.println("cfac = " + cfac); 206 //System.out.println("cpfac = " + cpfac); 207 208 FactorComplex<BigRational> fac = new FactorComplex<BigRational>(cfac); 209 210 for (int i = 1; i < 2; i++) { 211 int facs = 0; 212 GenPolynomial<Complex<BigRational>> a; 213 GenPolynomial<Complex<BigRational>> c = cpfac.random(2, ll + i, el, q); 214 //a = a.monic(); 215 GenPolynomial<Complex<BigRational>> b = cpfac.random(2, ll + i, el, q); 216 if (b.degree() == 0) { 217 b = b.multiply(cpfac.univariate(0)); 218 } 219 if (c.degree() > 0) { 220 facs++; 221 } 222 if (b.degree() > 0) { 223 facs++; 224 } 225 a = c.multiply(b); 226 //a = a.monic(); 227 //System.out.println("\na = " + a); 228 //System.out.println("b = " + b.monic()); 229 //System.out.println("c = " + c.monic()); 230 231 SortedMap<GenPolynomial<Complex<BigRational>>, Long> sm = fac.factors(a); 232 //System.out.println("\na = " + a); 233 //System.out.println("sm = " + sm); 234 if (sm.size() >= facs) { 235 assertTrue("#facs < " + facs, sm.size() >= facs); 236 } else { 237 System.out.println("sm.size() < facs = " + facs); 238 } 239 boolean t = fac.isFactorization(a, sm); 240 //System.out.println("t = " + t); 241 assertTrue("prod(factor(a)) = a", t); 242 } 243 } 244 245 }