001/*
002 * $Id: PolyUtilAppTest.java 3789 2011-10-01 18:54:43Z kredel $
003 */
004
005package edu.jas.application;
006
007
008import junit.framework.Test;
009import junit.framework.TestCase;
010import junit.framework.TestSuite;
011
012import org.apache.log4j.BasicConfigurator;
013
014import edu.jas.arith.BigRational;
015import edu.jas.arith.Product;
016import edu.jas.arith.ProductRing;
017import edu.jas.poly.AlgebraicNumber;
018import edu.jas.poly.AlgebraicNumberRing;
019import edu.jas.poly.GenPolynomial;
020import edu.jas.poly.GenPolynomialRing;
021import edu.jas.poly.PolyUtil;
022import edu.jas.poly.TermOrder;
023
024
025/**
026 * PolyUtilApp tests with JUnit.
027 * @author Heinz Kredel.
028 */
029
030public 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}