001/*
002 * $Id$
003 */
004
005package edu.jas.application;
006
007
008import junit.framework.Test;
009import junit.framework.TestCase;
010import junit.framework.TestSuite;
011
012import edu.jas.arith.BigInteger;
013import edu.jas.arith.BigRational;
014import edu.jas.arith.ModInteger;
015import edu.jas.arith.ModIntegerRing;
016import edu.jas.arith.ModLong;
017import edu.jas.arith.ModLongRing;
018import edu.jas.kern.ComputerThreads;
019import edu.jas.poly.AlgebraicNumber;
020import edu.jas.poly.AlgebraicNumberRing;
021import edu.jas.poly.GenPolynomial;
022import edu.jas.poly.GenPolynomialRing;
023import edu.jas.poly.TermOrder;
024import edu.jas.structure.RingFactory;
025import edu.jas.ufd.FactorRational;
026import edu.jas.ufd.Factorization;
027import edu.jas.ufd.Quotient;
028import edu.jas.ufd.QuotientRing;
029import edu.jas.ufd.FactorAlgebraic;
030import edu.jas.ufd.FactorQuotient;
031import edu.jas.ufd.FactorModular;
032import edu.jas.ufd.FactorInteger;
033
034
035/**
036 * Factor tests with JUnit.
037 * @see edu.jas.ufd.FactorTest
038 * @author Heinz Kredel
039 */
040
041public class FactorTest extends TestCase {
042
043
044    /**
045     * main.
046     */
047    public static void main(String[] args) {
048        //
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        Factorization<BigRational> ufdrr = FactorFactory.<BigRational> getImplementation(prfac);
252        //System.out.println("ufdrr = " + ufdrr);
253        assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr,
254                ufdrr instanceof FactorRational);
255
256        //GenPolynomialRing<GenPolynomial<BigRational>> rrfac = new GenPolynomialRing<GenPolynomial<BigRational>>(
257        //        prfac, 1);
258        //RingFactory<GenPolynomial<BigRational>> rrfac1 = (RingFactory<GenPolynomial<BigRational>>) (RingFactory) rrfac;
259        //ufdrr = FactorFactory.<BigRational> getImplementation(rrfac1); //.coFac);
260        //ufdrr = FactorFactory.<GenPolynomial<BigRational>>getImplementation(rrfac1); //.coFac);
261        //ufdrr = FactorFactory.<BigRational>getImplementation(rrfac.coFac);
262        //System.out.println("ufdrr = " + ufdrr);
263        //assertTrue("ufd != GenPolynomial<GenPolynomialBigRational>> " + ufdrr,
264        //        ufdrr instanceof FactorRational);
265    }
266
267}