001/*
002 * $Id: SquarefreeTest.java 3789 2011-10-01 18:54:43Z 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        //BasicConfigurator.configure();
039        junit.textui.TestRunner.run(suite());
040    }
041
042
043    /**
044     * Constructs a <CODE>SquarefreeTest</CODE> object.
045     * @param name String.
046     */
047    public SquarefreeTest(String name) {
048        super(name);
049    }
050
051
052    /**
053     */
054    public static Test suite() {
055        TestSuite suite = new TestSuite(SquarefreeTest.class);
056        return suite;
057    }
058
059
060    @Override
061    protected void setUp() {
062    }
063
064
065    @Override
066    protected void tearDown() {
067        ComputerThreads.terminate();
068    }
069
070
071    /**
072     * Test factory specific.
073     * 
074     */
075    public void testFactorySpecific() {
076        ModIntegerRing mi = new ModIntegerRing(19, true);
077        Squarefree<ModInteger> sqfm = SquarefreeFactory.getImplementation(mi);
078        //System.out.println("sqfm = " + sqfm);
079        assertTrue("sqf != Modular " + sqfm, sqfm instanceof SquarefreeFiniteFieldCharP);
080
081        ModLongRing ml = new ModLongRing(19, true);
082        Squarefree<ModLong> sqfml = SquarefreeFactory.getImplementation(ml);
083        //System.out.println("sqfml = " + sqfml);
084        assertTrue("sqf != Modular " + sqfml, sqfml instanceof SquarefreeFiniteFieldCharP);
085
086        BigInteger bi = new BigInteger(1);
087        Squarefree<BigInteger> sqfi = SquarefreeFactory.getImplementation(bi);
088        //System.out.println("sqfi = " + sqfi);
089        assertTrue("sqf != Integer " + sqfi, sqfi instanceof SquarefreeRingChar0);
090
091        BigRational br = new BigRational(1);
092        Squarefree<BigRational> sqfr = SquarefreeFactory.getImplementation(br);
093        //System.out.println("sqfr = " + sqfr);
094        assertTrue("sqf != Rational " + sqfr, sqfr instanceof SquarefreeFieldChar0);
095
096        GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
097        GenPolynomial<ModInteger> pm = pmfac.univariate(0);
098        AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
099        Squarefree<AlgebraicNumber<ModInteger>> sqfam = SquarefreeFactory.<ModInteger> getImplementation(am);
100        //System.out.println("sqfam = " + sqfam);
101        assertTrue("sqf != AlgebraicNumber<ModInteger> " + sqfam, sqfam instanceof SquarefreeFiniteFieldCharP);
102
103        GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1);
104        GenPolynomial<BigRational> pr = prfac.univariate(0);
105        AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true);
106        Squarefree<AlgebraicNumber<BigRational>> sqfar = SquarefreeFactory
107                .<BigRational> getImplementation(ar);
108        //System.out.println("sqfar = " + sqfar);
109        assertTrue("sqf != AlgebraicNumber<BigRational> " + sqfar, sqfar instanceof SquarefreeFieldChar0);
110
111        prfac = new GenPolynomialRing<BigRational>(br, 2);
112        QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac);
113        Squarefree<Quotient<BigRational>> sqfqr = SquarefreeFactory.<BigRational> getImplementation(qrfac);
114        //System.out.println("sqfqr = " + sqfqr);
115        assertTrue("sqf != Quotient<BigRational> " + sqfqr, sqfqr instanceof SquarefreeFieldChar0);
116
117        pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
118        QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac);
119        Squarefree<Quotient<ModInteger>> sqfqm = SquarefreeFactory.<ModInteger> getImplementation(qmfac);
120        //System.out.println("sqfqm = " + sqfqm);
121        assertTrue("sqf != Quotient<ModInteger> " + sqfqm, sqfqm instanceof SquarefreeInfiniteFieldCharP);
122    }
123
124
125    /**
126     * Test factory generic.
127     * 
128     */
129    @SuppressWarnings("unchecked")
130    public void testFactoryGeneric() {
131        ModIntegerRing mi = new ModIntegerRing(19, true);
132        Squarefree<ModInteger> sqfm = SquarefreeFactory.getImplementation((RingFactory) mi);
133        //System.out.println("sqfm = " + sqfm);
134        assertTrue("sqf != Modular " + sqfm, sqfm instanceof SquarefreeFiniteFieldCharP);
135
136        ModLongRing ml = new ModLongRing(19, true);
137        Squarefree<ModLong> sqfml = SquarefreeFactory.getImplementation((RingFactory) ml);
138        //System.out.println("sqfml = " + sqfml);
139        assertTrue("sqf != Modular " + sqfml, sqfml instanceof SquarefreeFiniteFieldCharP);
140
141        BigInteger bi = new BigInteger(1);
142        Squarefree<BigInteger> sqfi = SquarefreeFactory.getImplementation((RingFactory) bi);
143        //System.out.println("sqfi = " + sqfi);
144        assertTrue("sqf != Integer " + sqfi, sqfi instanceof SquarefreeRingChar0);
145
146        BigRational br = new BigRational(1);
147        Squarefree<BigRational> sqfr = SquarefreeFactory.getImplementation((RingFactory) br);
148        //System.out.println("sqfr = " + sqfr);
149        assertTrue("sqf != Rational " + sqfr, sqfr instanceof SquarefreeFieldChar0);
150
151        GenPolynomialRing<ModInteger> pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
152        GenPolynomial<ModInteger> pm = pmfac.univariate(0);
153        AlgebraicNumberRing<ModInteger> am = new AlgebraicNumberRing<ModInteger>(pm, true);
154        Squarefree<AlgebraicNumber<ModInteger>> sqfam = SquarefreeFactory.getImplementation((RingFactory) am);
155        //System.out.println("sqfam = " + sqfam);
156        assertTrue("sqf != AlgebraicNumber<ModInteger> " + sqfam, sqfam instanceof SquarefreeFiniteFieldCharP);
157
158        GenPolynomialRing<BigRational> prfac = new GenPolynomialRing<BigRational>(br, 1);
159        GenPolynomial<BigRational> pr = prfac.univariate(0);
160        AlgebraicNumberRing<BigRational> ar = new AlgebraicNumberRing<BigRational>(pr, true);
161        Squarefree<AlgebraicNumber<BigRational>> sqfar = SquarefreeFactory
162                .getImplementation((RingFactory) ar);
163        //System.out.println("sqfar = " + sqfar);
164        assertTrue("sqf != AlgebraicNumber<BigRational> " + sqfar, sqfar instanceof SquarefreeFieldChar0);
165
166        prfac = new GenPolynomialRing<BigRational>(br, 2);
167        QuotientRing<BigRational> qrfac = new QuotientRing<BigRational>(prfac);
168        Squarefree<Quotient<BigRational>> sqfqr = SquarefreeFactory.getImplementation((RingFactory) qrfac);
169        //System.out.println("sqfqr = " + sqfqr);
170        assertTrue("sqf != Quotient<BigRational> " + sqfqr, sqfqr instanceof SquarefreeFieldChar0);
171
172        pmfac = new GenPolynomialRing<ModInteger>(mi, 1);
173        QuotientRing<ModInteger> qmfac = new QuotientRing<ModInteger>(pmfac);
174        Squarefree<Quotient<ModInteger>> sqfqm = SquarefreeFactory.getImplementation((RingFactory) qmfac);
175        //System.out.println("sqfqm = " + sqfqm);
176        assertTrue("sqf != Quotient<ModInteger> " + sqfqm, sqfqm instanceof SquarefreeInfiniteFieldCharP);
177    }
178
179}