001/* 002 * $Id: FactorComplexTest.java 5049 2014-12-30 19:40:29Z kredel $ 003 */ 004 005package edu.jas.ufd; 006 007 008import java.util.SortedMap; 009 010import junit.framework.Test; 011import junit.framework.TestCase; 012import junit.framework.TestSuite; 013 014import edu.jas.arith.BigRational; 015import edu.jas.kern.ComputerThreads; 016import edu.jas.poly.Complex; 017import edu.jas.poly.ComplexRing; 018import edu.jas.poly.GenPolynomial; 019import edu.jas.poly.GenPolynomialRing; 020import edu.jas.poly.TermOrder; 021 022 023/** 024 * Factor complex via algebraic tests with JUnit. 025 * @author Heinz Kredel. 026 */ 027 028public class FactorComplexTest 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>FactorComplexTest</CODE> object. 042 * @param name String. 043 */ 044 public FactorComplexTest(String name) { 045 super(name); 046 } 047 048 049 /** 050 */ 051 public static Test suite() { 052 TestSuite suite = new TestSuite(FactorComplexTest.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 testDummy() { 088 } 089 090 091 /** 092 * Test complex via algebraic factorization. 093 * 094 */ 095 public void testComplexFactorization() { 096 097 TermOrder to = new TermOrder(TermOrder.INVLEX); 098 BigRational rfac = new BigRational(1); 099 ComplexRing<BigRational> cfac = new ComplexRing<BigRational>(rfac); 100 GenPolynomialRing<Complex<BigRational>> cpfac = new GenPolynomialRing<Complex<BigRational>>(cfac, 1, 101 to); 102 //System.out.println("cfac = " + cfac); 103 //System.out.println("cpfac = " + cpfac); 104 105 FactorComplex<BigRational> fac = new FactorComplex<BigRational>(cfac); 106 107 for (int i = 1; i < 3; i++) { 108 int facs = 0; 109 GenPolynomial<Complex<BigRational>> a; 110 GenPolynomial<Complex<BigRational>> c = cpfac.random(2, ll + i, el + i, q); 111 //a = a.monic(); 112 GenPolynomial<Complex<BigRational>> b = cpfac.random(2, ll + i, el + i, q); 113 if (b.degree() == 0) { 114 b = b.multiply(cpfac.univariate(0)); 115 } 116 if (c.degree() > 0) { 117 facs++; 118 } 119 b = b.multiply(b); 120 if (b.degree() > 0) { 121 facs++; 122 } 123 a = c.multiply(b); 124 //a = a.monic(); 125 //System.out.println("\na = " + a); 126 //System.out.println("b = " + b.monic()); 127 //System.out.println("c = " + c.monic()); 128 129 SortedMap<GenPolynomial<Complex<BigRational>>, Long> sm = fac.baseFactors(a); 130 //System.out.println("\na = " + a); 131 //System.out.println("sm = " + sm); 132 if (sm.size() >= facs) { 133 assertTrue("#facs < " + facs, sm.size() >= facs); 134 } else { 135 System.out.println("sm.size() < facs = " + facs); 136 } 137 boolean t = fac.isFactorization(a, sm); 138 //System.out.println("t = " + t); 139 assertTrue("prod(factor(a)) = a", t); 140 } 141 } 142 143 144 /** 145 * Test complex absolute via algebraic factorization. 146 * 147 */ 148 public void testComplexAbsoluteFactorization() { 149 150 TermOrder to = new TermOrder(TermOrder.INVLEX); 151 BigRational rfac = new BigRational(1); 152 ComplexRing<BigRational> cfac = new ComplexRing<BigRational>(rfac); 153 GenPolynomialRing<Complex<BigRational>> cpfac = new GenPolynomialRing<Complex<BigRational>>(cfac, 1, 154 to); 155 //System.out.println("cfac = " + cfac); 156 //System.out.println("cpfac = " + cpfac); 157 158 FactorComplex<BigRational> fac = new FactorComplex<BigRational>(cfac); 159 160 for (int i = 1; i < 2; i++) { 161 int facs = 0; 162 GenPolynomial<Complex<BigRational>> a; 163 GenPolynomial<Complex<BigRational>> c = cpfac.random(2, ll, el, q); 164 //a = a.monic(); 165 GenPolynomial<Complex<BigRational>> b = cpfac.random(2, ll, el, q); 166 if (b.degree() == 0) { 167 b = b.multiply(cpfac.univariate(0)); 168 } 169 if (c.degree() > 0) { 170 facs++; 171 } 172 b = b.multiply(b); 173 if (b.degree() > 0) { 174 facs++; 175 } 176 a = c.multiply(b); 177 //a = a.monic(); 178 //System.out.println("\na = " + a); 179 //System.out.println("b = " + b.monic()); 180 //System.out.println("c = " + c.monic()); 181 182 FactorsMap<Complex<BigRational>> sm = fac.baseFactorsAbsolute(a); 183 //System.out.println("\na = " + a); 184 //System.out.println("sm = " + sm); 185 boolean t = fac.isAbsoluteFactorization(sm); 186 //System.out.println("t = " + t); 187 assertTrue("prod(factor(a)) = a", t); 188 assertTrue("facs <= #sm", facs <= sm.length()); 189 } 190 } 191 192 193 /** 194 * Test bivariate complex via algebraic factorization. 195 * 196 */ 197 public void testBivariateComplexFactorization() { 198 199 TermOrder to = new TermOrder(TermOrder.INVLEX); 200 BigRational rfac = new BigRational(1); 201 ComplexRing<BigRational> cfac = new ComplexRing<BigRational>(rfac); 202 GenPolynomialRing<Complex<BigRational>> cpfac = new GenPolynomialRing<Complex<BigRational>>(cfac, 2, 203 to); 204 //System.out.println("cfac = " + cfac); 205 //System.out.println("cpfac = " + cpfac); 206 207 FactorComplex<BigRational> fac = new FactorComplex<BigRational>(cfac); 208 209 for (int i = 1; i < 2; i++) { 210 int facs = 0; 211 GenPolynomial<Complex<BigRational>> a; 212 GenPolynomial<Complex<BigRational>> c = cpfac.random(2, ll + i, el, q); 213 //a = a.monic(); 214 GenPolynomial<Complex<BigRational>> b = cpfac.random(2, ll + i, el, q); 215 if (b.degree() == 0) { 216 b = b.multiply(cpfac.univariate(0)); 217 } 218 if (c.degree() > 0) { 219 facs++; 220 } 221 if (b.degree() > 0) { 222 facs++; 223 } 224 a = c.multiply(b); 225 //a = a.monic(); 226 //System.out.println("\na = " + a); 227 //System.out.println("b = " + b.monic()); 228 //System.out.println("c = " + c.monic()); 229 230 SortedMap<GenPolynomial<Complex<BigRational>>, Long> sm = fac.factors(a); 231 //System.out.println("\na = " + a); 232 //System.out.println("sm = " + sm); 233 if (sm.size() >= facs) { 234 assertTrue("#facs < " + facs, sm.size() >= facs); 235 } else { 236 System.out.println("sm.size() < facs = " + facs); 237 } 238 boolean t = fac.isFactorization(a, sm); 239 //System.out.println("t = " + t); 240 assertTrue("prod(factor(a)) = a", t); 241 } 242 } 243 244}