001/*
002 * $Id: SquarefreeTest.java 5863 2018-07-20 11:13:34Z kredel $
003 */
004
005package edu.jas.ufd;
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.structure.RingFactory;
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     */
074    public void testFactorySpecific() {
075        ModIntegerRing mi = new ModIntegerRing(19, true);
076        Squarefree<ModInteger> sqfm = SquarefreeFactory.getImplementation(mi);
077        //System.out.println("sqfm = " + sqfm);
078        assertTrue("sqf != Modular " + sqfm, sqfm instanceof SquarefreeFiniteFieldCharP);
079
080        ModLongRing ml = new ModLongRing(19, true);
081        Squarefree<ModLong> sqfml = SquarefreeFactory.getImplementation(ml);
082        //System.out.println("sqfml = " + sqfml);
083        assertTrue("sqf != Modular " + sqfml, sqfml instanceof SquarefreeFiniteFieldCharP);
084
085        BigInteger bi = new BigInteger(1);
086        Squarefree<BigInteger> sqfi = SquarefreeFactory.getImplementation(bi);
087        //System.out.println("sqfi = " + sqfi);
088        assertTrue("sqf != Integer " + sqfi, sqfi instanceof SquarefreeRingChar0);
089
090        BigRational br = new BigRational(1);
091        Squarefree<BigRational> sqfr = SquarefreeFactory.getImplementation(br);
092        //System.out.println("sqfr = " + sqfr);
093        assertTrue("sqf != Rational " + sqfr, sqfr instanceof SquarefreeFieldChar0);
094
095        GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
096        GenPolynomial<ModInteger> pm = pmfac.univariate(0);
097        AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
098        Squarefree<AlgebraicNumber<ModInteger>> sqfam = SquarefreeFactory.<ModInteger> getImplementation(am);
099        //System.out.println("sqfam = " + sqfam);
100        assertTrue("sqf != AlgebraicNumber<ModInteger> " + sqfam, 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     */
128    @SuppressWarnings("unchecked")
129    public void testFactoryGeneric() {
130        ModIntegerRing mi = new ModIntegerRing(19, true);
131        Squarefree<ModInteger> sqfm = SquarefreeFactory.getImplementation((RingFactory) mi);
132        //System.out.println("sqfm = " + sqfm);
133        assertTrue("sqf != Modular " + sqfm, sqfm instanceof SquarefreeFiniteFieldCharP);
134
135        ModLongRing ml = new ModLongRing(19, true);
136        Squarefree<ModLong> sqfml = SquarefreeFactory.getImplementation((RingFactory) ml);
137        //System.out.println("sqfml = " + sqfml);
138        assertTrue("sqf != Modular " + sqfml, sqfml instanceof SquarefreeFiniteFieldCharP);
139
140        BigInteger bi = new BigInteger(1);
141        Squarefree<BigInteger> sqfi = SquarefreeFactory.getImplementation((RingFactory) bi);
142        //System.out.println("sqfi = " + sqfi);
143        assertTrue("sqf != Integer " + sqfi, sqfi instanceof SquarefreeRingChar0);
144
145        BigRational br = new BigRational(1);
146        Squarefree<BigRational> sqfr = SquarefreeFactory.getImplementation((RingFactory) br);
147        //System.out.println("sqfr = " + sqfr);
148        assertTrue("sqf != Rational " + sqfr, sqfr instanceof SquarefreeFieldChar0);
149
150        GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
151        GenPolynomial<ModInteger> pm = pmfac.univariate(0);
152        AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
153        Squarefree<AlgebraicNumber<ModInteger>> sqfam = SquarefreeFactory.getImplementation((RingFactory) am);
154        //System.out.println("sqfam = " + sqfam);
155        assertTrue("sqf != AlgebraicNumber<ModInteger> " + sqfam, 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}