001    /*
002     * $Id: PolyUtilAppTest.java 3368 2010-10-24 13:53:32Z 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 org.apache.log4j.BasicConfigurator;
013    
014    import edu.jas.arith.BigRational;
015    import edu.jas.arith.Product;
016    import edu.jas.arith.ProductRing;
017    import edu.jas.poly.AlgebraicNumber;
018    import edu.jas.poly.AlgebraicNumberRing;
019    import edu.jas.poly.GenPolynomial;
020    import edu.jas.poly.GenPolynomialRing;
021    import edu.jas.poly.PolyUtil;
022    import edu.jas.poly.TermOrder;
023    
024    
025    /**
026     * PolyUtilApp tests with JUnit.
027     * @author Heinz Kredel.
028     */
029    
030    public class PolyUtilAppTest extends TestCase {
031    
032    
033        /**
034         * main.
035         */
036        public static void main(String[] args) {
037            BasicConfigurator.configure();
038            junit.textui.TestRunner.run(suite());
039        }
040    
041    
042        /**
043         * Constructs a <CODE>PolyUtilAppTest</CODE> object.
044         * @param name String.
045         */
046        public PolyUtilAppTest(String name) {
047            super(name);
048        }
049    
050    
051        /**
052         */
053        public static Test suite() {
054            TestSuite suite = new TestSuite(PolyUtilAppTest.class);
055            return suite;
056        }
057    
058    
059        //private final static int bitlen = 100;
060    
061        TermOrder to = new TermOrder(TermOrder.INVLEX);
062    
063    
064        GenPolynomialRing<BigRational> dfac;
065    
066    
067        GenPolynomialRing<BigRational> cfac;
068    
069    
070        GenPolynomialRing<GenPolynomial<BigRational>> rfac;
071    
072    
073        BigRational ai;
074    
075    
076        BigRational bi;
077    
078    
079        BigRational ci;
080    
081    
082        BigRational di;
083    
084    
085        BigRational ei;
086    
087    
088        GenPolynomial<BigRational> a;
089    
090    
091        GenPolynomial<BigRational> b;
092    
093    
094        GenPolynomial<BigRational> c;
095    
096    
097        GenPolynomial<BigRational> d;
098    
099    
100        GenPolynomial<BigRational> e;
101    
102    
103        GenPolynomial<GenPolynomial<BigRational>> ar;
104    
105    
106        GenPolynomial<GenPolynomial<BigRational>> br;
107    
108    
109        GenPolynomial<GenPolynomial<BigRational>> cr;
110    
111    
112        GenPolynomial<GenPolynomial<BigRational>> dr;
113    
114    
115        GenPolynomial<GenPolynomial<BigRational>> er;
116    
117    
118        int rl = 5;
119    
120    
121        int kl = 5;
122    
123    
124        int ll = 5;
125    
126    
127        int el = 5;
128    
129    
130        float q = 0.6f;
131    
132    
133        @Override
134        protected void setUp() {
135            a = b = c = d = e = null;
136            ai = bi = ci = di = ei = null;
137            ar = br = cr = dr = er = null;
138            dfac = new GenPolynomialRing<BigRational>(new BigRational(1), rl, to);
139            cfac = null; //new GenPolynomialRing<BigRational>(new BigRational(1),rl-1,to);
140            rfac = null; //new GenPolynomialRing<GenPolynomial<BigRational>>(cfac,1,to);
141        }
142    
143    
144        @Override
145        protected void tearDown() {
146            a = b = c = d = e = null;
147            ai = bi = ci = di = ei = null;
148            ar = br = cr = dr = er = null;
149            dfac = null;
150            cfac = null;
151            rfac = null;
152        }
153    
154    
155        /**
156         * Test primitive element.
157         * 
158         */
159        public void testPrimitiveElement() {
160            String[] va = new String[] { "alpha" };
161            String[] vb = new String[] { "beta" };
162            GenPolynomialRing<BigRational> aufac, bufac;
163    
164            // x^3 - 2
165            aufac = new GenPolynomialRing<BigRational>(new BigRational(1), 1, va);
166            GenPolynomial<BigRational> m;
167            m = aufac.univariate(0, 3);
168            m = m.subtract(aufac.fromInteger(2));
169            //System.out.println("m = " + m);
170    
171            // x^2 - 3
172            bufac = new GenPolynomialRing<BigRational>(new BigRational(1), 1, vb);
173            GenPolynomial<BigRational> n;
174            n = bufac.univariate(0, 2);
175            n = n.subtract(bufac.fromInteger(3));
176            //System.out.println("n = " + n);
177    
178            AlgebraicNumberRing<BigRational> afac = new AlgebraicNumberRing<BigRational>(m);
179            //System.out.println("afac = " + afac);
180    
181            AlgebraicNumberRing<BigRational> bfac = new AlgebraicNumberRing<BigRational>(n);
182            //System.out.println("bfac = " + bfac);
183    
184            PrimitiveElement<BigRational> pe;
185            pe = PolyUtilApp.<BigRational> primitiveElement(afac, bfac);
186            //System.out.println("pe = " + pe);
187            AlgebraicNumberRing<BigRational> cfac = pe.primitiveElem;
188    
189            AlgebraicNumber<BigRational> a = afac.getGenerator();
190            AlgebraicNumber<BigRational> b = bfac.getGenerator();
191    
192            // convert to primitive element field
193            AlgebraicNumber<BigRational> as = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.A, a);
194            AlgebraicNumber<BigRational> bs = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.B, b);
195    
196            // test alpha+(t)beta == gamma
197            AlgebraicNumber<BigRational> cs = as.sum(bs);
198            //System.out.println("cs  = " + cs);
199            assertEquals("alpha+beta == gamma", cs, cfac.getGenerator());
200        }
201    
202    
203        /**
204         * Test primitive element of extension tower.
205         * 
206         */
207        public void testPrimitiveElementTower() {
208            String[] va = new String[] { "alpha" };
209            String[] vb = new String[] { "beta" };
210            GenPolynomialRing<BigRational> ufac;
211            ufac = new GenPolynomialRing<BigRational>(new BigRational(1), 1, va);
212    
213            GenPolynomial<BigRational> m;
214            m = ufac.univariate(0, 3);
215            m = m.subtract(ufac.fromInteger(2));
216            //System.out.println("m = " + m);
217    
218            AlgebraicNumberRing<BigRational> afac;
219            afac = new AlgebraicNumberRing<BigRational>(m);
220            //System.out.println("afac = " + afac);
221    
222            GenPolynomialRing<AlgebraicNumber<BigRational>> aufac;
223            aufac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(afac, 1, vb);
224    
225            GenPolynomial<AlgebraicNumber<BigRational>> n;
226            n = aufac.univariate(0, 2);
227            n = n.subtract(aufac.getONE().multiply(afac.getGenerator()));
228            //System.out.println("n = " + n);
229    
230            AlgebraicNumberRing<AlgebraicNumber<BigRational>> bfac;
231            bfac = new AlgebraicNumberRing<AlgebraicNumber<BigRational>>(n);
232            //System.out.println("bfac = " + bfac);
233    
234            PrimitiveElement<BigRational> pe;
235            pe = PolyUtilApp.<BigRational> primitiveElement(bfac);
236            //System.out.println("pe = " + pe);
237            AlgebraicNumberRing<BigRational> cfac = pe.primitiveElem;
238    
239            AlgebraicNumber<BigRational> a = afac.getGenerator();
240            AlgebraicNumber<AlgebraicNumber<BigRational>> b = bfac.getGenerator();
241    
242            // convert to primitive element ring
243            AlgebraicNumber<BigRational> as = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.A, a);
244            AlgebraicNumber<BigRational> bs = PolyUtilApp.<BigRational> convertToPrimitiveElem(cfac, pe.A, pe.B,
245                    b);
246    
247            // test alpha+(t)beta == gamma
248            AlgebraicNumber<BigRational> cs = as.sum(bs);
249            //System.out.println("cs  = " + cs);
250            assertEquals("alpha+beta == gamma", cs, cfac.getGenerator());
251    
252            // test for polynomials, too simple
253            String[] vx = new String[] { "x" };
254            GenPolynomialRing<AlgebraicNumber<BigRational>> rafac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(
255                    afac, 1, vx);
256            GenPolynomialRing<AlgebraicNumber<AlgebraicNumber<BigRational>>> rbfac = new GenPolynomialRing<AlgebraicNumber<AlgebraicNumber<BigRational>>>(
257                    bfac, 1, vx);
258            GenPolynomial<AlgebraicNumber<BigRational>> ap = rafac.getGenerators().get(0).multiply(a);
259            GenPolynomial<AlgebraicNumber<AlgebraicNumber<BigRational>>> bp = rbfac.getGenerators().get(0)
260                    .multiply(b);
261    
262            GenPolynomial<AlgebraicNumber<BigRational>> asp = PolyUtilApp.<BigRational> convertToPrimitiveElem(
263                    cfac, pe.A, ap);
264            GenPolynomial<AlgebraicNumber<BigRational>> bsp = PolyUtilApp.<BigRational> convertToPrimitiveElem(
265                    cfac, pe.A, pe.B, bp);
266            //System.out.println("asp = " + asp);
267            //System.out.println("bsp = " + bsp);
268    
269            // test alpha+(t)beta == gamma
270            GenPolynomial<AlgebraicNumber<BigRational>> csp = asp.sum(bsp);
271            //System.out.println("csp = " + csp);
272            assertEquals("alpha+beta == gamma", csp.leadingBaseCoefficient(), cfac.getGenerator());
273        }
274    
275    }