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    }