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