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 }