001/*
002 * $Id$
003 */
004
005package edu.jas.ufd;
006
007
008import edu.jas.arith.BigInteger;
009import edu.jas.arith.BigRational;
010import edu.jas.arith.ModInteger;
011import edu.jas.arith.ModIntegerRing;
012import edu.jas.arith.ModLong;
013import edu.jas.arith.ModLongRing;
014import edu.jas.kern.ComputerThreads;
015import edu.jas.poly.AlgebraicNumber;
016import edu.jas.poly.AlgebraicNumberRing;
017import edu.jas.poly.GenPolynomial;
018import edu.jas.poly.GenPolynomialRing;
019import edu.jas.structure.RingFactory;
020
021import junit.framework.Test;
022import junit.framework.TestCase;
023import junit.framework.TestSuite;
024
025
026/**
027 * Squarefree Factory tests with JUnit.
028 * @author Heinz Kredel
029 */
030
031public class SquarefreeTest extends TestCase {
032
033
034    /**
035     * main.
036     */
037    public static void main(String[] args) {
038        junit.textui.TestRunner.run(suite());
039    }
040
041
042    /**
043     * Constructs a <CODE>SquarefreeTest</CODE> object.
044     * @param name String.
045     */
046    public SquarefreeTest(String name) {
047        super(name);
048    }
049
050
051    /**
052     */
053    public static Test suite() {
054        TestSuite suite = new TestSuite(SquarefreeTest.class);
055        return suite;
056    }
057
058
059    @Override
060    protected void setUp() {
061    }
062
063
064    @Override
065    protected void tearDown() {
066        ComputerThreads.terminate();
067    }
068
069
070    /**
071     * Test factory specific.
072     */
073    public void testFactorySpecific() {
074        ModIntegerRing mi = new ModIntegerRing(19, true);
075        Squarefree<ModInteger> sqfm = SquarefreeFactory.getImplementation(mi);
076        //System.out.println("sqfm = " + sqfm);
077        assertTrue("sqf != Modular " + sqfm, sqfm instanceof SquarefreeFiniteFieldCharP);
078
079        ModLongRing ml = new ModLongRing(19, true);
080        Squarefree<ModLong> sqfml = SquarefreeFactory.getImplementation(ml);
081        //System.out.println("sqfml = " + sqfml);
082        assertTrue("sqf != Modular " + sqfml, sqfml instanceof SquarefreeFiniteFieldCharP);
083
084        BigInteger bi = new BigInteger(1);
085        Squarefree<BigInteger> sqfi = SquarefreeFactory.getImplementation(bi);
086        //System.out.println("sqfi = " + sqfi);
087        assertTrue("sqf != Integer " + sqfi, sqfi instanceof SquarefreeRingChar0);
088
089        BigRational br = new BigRational(1);
090        Squarefree<BigRational> sqfr = SquarefreeFactory.getImplementation(br);
091        //System.out.println("sqfr = " + sqfr);
092        assertTrue("sqf != Rational " + sqfr, sqfr instanceof SquarefreeFieldChar0);
093
094        GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
095        GenPolynomial<ModInteger> pm = pmfac.univariate(0);
096        AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
097        Squarefree<AlgebraicNumber<ModInteger>> sqfam = SquarefreeFactory.<ModInteger> getImplementation(am);
098        //System.out.println("sqfam = " + sqfam);
099        assertTrue("sqf != AlgebraicNumber<ModInteger> " + sqfam,
100                        sqfam instanceof SquarefreeFiniteFieldCharP);
101
102        GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1);
103        GenPolynomial<BigRational> pr = prfac.univariate(0);
104        AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true);
105        Squarefree<AlgebraicNumber<BigRational>> sqfar = SquarefreeFactory
106                        .<BigRational> getImplementation(ar);
107        //System.out.println("sqfar = " + sqfar);
108        assertTrue("sqf != AlgebraicNumber<BigRational> " + sqfar, sqfar instanceof SquarefreeFieldChar0);
109
110        prfac = new GenPolynomialRing<BigRational>(br, 2);
111        QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac);
112        Squarefree<Quotient<BigRational>> sqfqr = SquarefreeFactory.<BigRational> getImplementation(qrfac);
113        //System.out.println("sqfqr = " + sqfqr);
114        assertTrue("sqf != Quotient<BigRational> " + sqfqr, sqfqr instanceof SquarefreeFieldChar0);
115
116        pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
117        QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac);
118        Squarefree<Quotient<ModInteger>> sqfqm = SquarefreeFactory.<ModInteger> getImplementation(qmfac);
119        //System.out.println("sqfqm = " + sqfqm);
120        assertTrue("sqf != Quotient<ModInteger> " + sqfqm, sqfqm instanceof SquarefreeInfiniteFieldCharP);
121    }
122
123
124    /**
125     * Test factory generic.
126     */
127    @SuppressWarnings("unchecked")
128    public void testFactoryGeneric() {
129        ModIntegerRing mi = new ModIntegerRing(19, true);
130        Squarefree<ModInteger> sqfm = SquarefreeFactory.getImplementation((RingFactory) mi);
131        //System.out.println("sqfm = " + sqfm);
132        assertTrue("sqf != Modular " + sqfm, sqfm instanceof SquarefreeFiniteFieldCharP);
133
134        ModLongRing ml = new ModLongRing(19, true);
135        Squarefree<ModLong> sqfml = SquarefreeFactory.getImplementation((RingFactory) ml);
136        //System.out.println("sqfml = " + sqfml);
137        assertTrue("sqf != Modular " + sqfml, sqfml instanceof SquarefreeFiniteFieldCharP);
138
139        BigInteger bi = new BigInteger(1);
140        Squarefree<BigInteger> sqfi = SquarefreeFactory.getImplementation((RingFactory) bi);
141        //System.out.println("sqfi = " + sqfi);
142        assertTrue("sqf != Integer " + sqfi, sqfi instanceof SquarefreeRingChar0);
143
144        BigRational br = new BigRational(1);
145        Squarefree<BigRational> sqfr = SquarefreeFactory.getImplementation((RingFactory) br);
146        //System.out.println("sqfr = " + sqfr);
147        assertTrue("sqf != Rational " + sqfr, sqfr instanceof SquarefreeFieldChar0);
148
149        GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
150        GenPolynomial<ModInteger> pm = pmfac.univariate(0);
151        AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
152        Squarefree<AlgebraicNumber<ModInteger>> sqfam = SquarefreeFactory.getImplementation((RingFactory) am);
153        //System.out.println("sqfam = " + sqfam);
154        assertTrue("sqf != AlgebraicNumber<ModInteger> " + sqfam,
155                        sqfam instanceof SquarefreeFiniteFieldCharP);
156
157        GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1);
158        GenPolynomial<BigRational> pr = prfac.univariate(0);
159        AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true);
160        Squarefree<AlgebraicNumber<BigRational>> sqfar = SquarefreeFactory
161                        .getImplementation((RingFactory) ar);
162        //System.out.println("sqfar = " + sqfar);
163        assertTrue("sqf != AlgebraicNumber<BigRational> " + sqfar, sqfar instanceof SquarefreeFieldChar0);
164
165        prfac = new GenPolynomialRing<BigRational>(br, 2);
166        QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac);
167        Squarefree<Quotient<BigRational>> sqfqr = SquarefreeFactory.getImplementation((RingFactory) qrfac);
168        //System.out.println("sqfqr = " + sqfqr);
169        assertTrue("sqf != Quotient<BigRational> " + sqfqr, sqfqr instanceof SquarefreeFieldChar0);
170
171        pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
172        QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac);
173        Squarefree<Quotient<ModInteger>> sqfqm = SquarefreeFactory.getImplementation((RingFactory) qmfac);
174        //System.out.println("sqfqm = " + sqfqm);
175        assertTrue("sqf != Quotient<ModInteger> " + sqfqm, sqfqm instanceof SquarefreeInfiniteFieldCharP);
176    }
177
178}