001 /*
002 * $Id: FactorTest.java 3676 2011-07-02 10:51:16Z kredel $
003 */
004
005 package edu.jas.application;
006
007
008 import junit.framework.Test;
009 import junit.framework.TestCase;
010 import junit.framework.TestSuite;
011
012 import edu.jas.arith.BigInteger;
013 import edu.jas.arith.BigRational;
014 import edu.jas.arith.ModInteger;
015 import edu.jas.arith.ModIntegerRing;
016 import edu.jas.arith.ModLong;
017 import edu.jas.arith.ModLongRing;
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.structure.RingFactory;
025 import edu.jas.ufd.FactorRational;
026 import edu.jas.ufd.Factorization;
027 import edu.jas.ufd.Quotient;
028 import edu.jas.ufd.QuotientRing;
029 import edu.jas.ufd.FactorAlgebraic;
030 import edu.jas.ufd.FactorQuotient;
031 import edu.jas.ufd.FactorModular;
032 import edu.jas.ufd.FactorInteger;
033
034
035 /**
036 * Factor tests with JUnit.
037 * @see edu.jas.ufd.FactorTest
038 * @author Heinz Kredel.
039 */
040
041 public class FactorTest extends TestCase {
042
043
044 /**
045 * main.
046 */
047 public static void main(String[] args) {
048 //BasicConfigurator.configure();
049 junit.textui.TestRunner.run(suite());
050 }
051
052
053 /**
054 * Constructs a <CODE>FactorTest</CODE> object.
055 * @param name String.
056 */
057 public FactorTest(String name) {
058 super(name);
059 }
060
061
062 /**
063 */
064 public static Test suite() {
065 TestSuite suite = new TestSuite(FactorTest.class);
066 return suite;
067 }
068
069
070 int rl = 3;
071
072
073 int kl = 5;
074
075
076 int ll = 5;
077
078
079 int el = 3;
080
081
082 float q = 0.3f;
083
084
085 @Override
086 protected void setUp() {
087 }
088
089
090 @Override
091 protected void tearDown() {
092 ComputerThreads.terminate();
093 }
094
095
096 /**
097 * Test dummy for Junit.
098 */
099 public void testDummy() {
100 }
101
102
103 /**
104 * Test factory.
105 */
106 public void testFactory() {
107 ModIntegerRing mi = new ModIntegerRing(19, true);
108 Factorization<ModInteger> ufdm = FactorFactory.getImplementation(mi);
109 //System.out.println("ufdm = " + ufdm);
110 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular);
111
112 ModLongRing ml = new ModLongRing(19, true);
113 Factorization<ModLong> ufdml = FactorFactory.getImplementation(ml);
114 //System.out.println("ufdml = " + ufdml);
115 assertTrue("ufd != Modular " + ufdml, ufdml instanceof FactorModular);
116
117 BigInteger bi = new BigInteger(1);
118 Factorization<BigInteger> ufdi = FactorFactory.getImplementation(bi);
119 //System.out.println("ufdi = " + ufdi);
120 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger);
121
122 BigRational br = new BigRational(1);
123 Factorization<BigRational> ufdr = FactorFactory.getImplementation(br);
124 //System.out.println("ufdr = " + ufdr);
125 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational);
126
127 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
128 GenPolynomial<ModInteger> pm = pmfac.univariate(0);
129 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
130 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.getImplementation(am);
131 //System.out.println("ufdam = " + ufdam);
132 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic);
133
134 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1);
135 GenPolynomial<BigRational> pr = prfac.univariate(0);
136 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true);
137 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.getImplementation(ar);
138 //System.out.println("ufdar = " + ufdar);
139 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic);
140
141 prfac = new GenPolynomialRing<BigRational>(br, 2);
142 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac);
143 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.getImplementation(qrfac);
144 //System.out.println("ufdqr = " + ufdqr);
145 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient);
146 }
147
148
149 /**
150 * Test factory generic.
151 */
152 @SuppressWarnings("unchecked")
153 public void testFactoryGeneric() {
154 ModIntegerRing mi = new ModIntegerRing(19, true);
155 Factorization<ModInteger> ufdm = FactorFactory.getImplementation((RingFactory) mi);
156 //System.out.println("ufdm = " + ufdm);
157 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular);
158
159 BigInteger bi = new BigInteger(1);
160 Factorization<BigInteger> ufdi = FactorFactory.getImplementation((RingFactory) bi);
161 //System.out.println("ufdi = " + ufdi);
162 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger);
163
164 BigRational br = new BigRational(1);
165 Factorization<BigRational> ufdr = FactorFactory.getImplementation((RingFactory) br);
166 //System.out.println("ufdr = " + ufdr);
167 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational);
168
169 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
170 GenPolynomial<ModInteger> pm = pmfac.univariate(0);
171 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
172 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.getImplementation((RingFactory) am);
173 //System.out.println("ufdam = " + ufdam);
174 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic);
175
176 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1);
177 GenPolynomial<BigRational> pr = prfac.univariate(0);
178 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true);
179 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.getImplementation((RingFactory) ar);
180 //System.out.println("ufdar = " + ufdar);
181 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic);
182
183 prfac = new GenPolynomialRing<BigRational>(br, 2);
184 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac);
185 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.getImplementation((RingFactory) qrfac);
186 //System.out.println("ufdqr = " + ufdqr);
187 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient);
188
189 pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
190 QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac);
191 Factorization<Quotient<ModInteger>> ufdqm = FactorFactory.getImplementation((RingFactory) qmfac);
192 //System.out.println("ufdqm = " + ufdqm);
193 assertTrue("ufd != Quotient<ModInteger> " + ufdqm, ufdqm instanceof FactorQuotient);
194
195 prfac = new GenPolynomialRing<BigRational>(br, 2);
196 GenPolynomialRing<GenPolynomial<BigRational>> rrfac = new GenPolynomialRing<GenPolynomial<BigRational>>(
197 prfac, 1);
198 Factorization<BigRational> ufdrr = FactorFactory.getImplementation((RingFactory) rrfac);
199 //System.out.println("ufdrr = " + ufdrr);
200 assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr,
201 ufdrr instanceof FactorRational);
202 }
203
204
205 /**
206 * Test factory specific.
207 */
208 public void testFactorySpecific() {
209 ModIntegerRing mi = new ModIntegerRing(19, true);
210 Factorization<ModInteger> ufdm = FactorFactory.getImplementation(mi);
211 //System.out.println("ufdm = " + ufdm);
212 assertTrue("ufd != Modular " + ufdm, ufdm instanceof FactorModular);
213
214 BigInteger bi = new BigInteger(1);
215 Factorization<BigInteger> ufdi = FactorFactory.getImplementation(bi);
216 //System.out.println("ufdi = " + ufdi);
217 assertTrue("ufd != Integer " + ufdi, ufdi instanceof FactorInteger);
218
219 BigRational br = new BigRational(1);
220 Factorization<BigRational> ufdr = FactorFactory.getImplementation(br);
221 //System.out.println("ufdr = " + ufdr);
222 assertTrue("ufd != Rational " + ufdr, ufdr instanceof FactorRational);
223
224 GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
225 GenPolynomial<ModInteger> pm = pmfac.univariate(0);
226 AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
227 Factorization<AlgebraicNumber<ModInteger>> ufdam = FactorFactory.<ModInteger> getImplementation(am);
228 //System.out.println("ufdam = " + ufdam);
229 assertTrue("ufd != AlgebraicNumber<ModInteger> " + ufdam, ufdam instanceof FactorAlgebraic);
230
231 GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1);
232 GenPolynomial<BigRational> pr = prfac.univariate(0);
233 AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true);
234 Factorization<AlgebraicNumber<BigRational>> ufdar = FactorFactory.<BigRational> getImplementation(ar);
235 //System.out.println("ufdar = " + ufdar);
236 assertTrue("ufd != AlgebraicNumber<BigRational> " + ufdar, ufdar instanceof FactorAlgebraic);
237
238 prfac = new GenPolynomialRing<BigRational>(br, 2);
239 QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac);
240 Factorization<Quotient<BigRational>> ufdqr = FactorFactory.<BigRational> getImplementation(qrfac);
241 //System.out.println("ufdqr = " + ufdqr);
242 assertTrue("ufd != Quotient<BigRational> " + ufdqr, ufdqr instanceof FactorQuotient);
243
244 pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
245 QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac);
246 Factorization<Quotient<ModInteger>> ufdqm = FactorFactory.<ModInteger> getImplementation(qmfac);
247 //System.out.println("ufdqm = " + ufdqm);
248 assertTrue("ufd != Quotient<ModInteger> " + ufdqm, ufdqm instanceof FactorQuotient);
249
250 prfac = new GenPolynomialRing<BigRational>(br, 2);
251 GenPolynomialRing<GenPolynomial<BigRational>> rrfac = new GenPolynomialRing<GenPolynomial<BigRational>>(
252 prfac, 1);
253 Factorization<BigRational> ufdrr = FactorFactory.<BigRational> getImplementation(prfac);
254 //System.out.println("ufdrr = " + ufdrr);
255 assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr,
256 ufdrr instanceof FactorRational);
257 }
258
259 }