001/*
002 * $Id: RatGenSolvablePolynomialTest.java 5042 2014-12-29 12:32:59Z kredel $
003 */
004
005package edu.jas.poly;
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;
015
016
017/**
018 * BigRational coefficients GenSolvablePolynomial tests with JUnit.
019 * @author Heinz Kredel.
020 */
021
022public class RatGenSolvablePolynomialTest extends TestCase {
023
024
025    /**
026     * main.
027     */
028    public static void main(String[] args) {
029        BasicConfigurator.configure();
030        junit.textui.TestRunner.run(suite());
031    }
032
033
034    /**
035     * Constructs a <CODE>RatGenSolvablePolynomialTest</CODE> object.
036     * @param name String.
037     */
038    public RatGenSolvablePolynomialTest(String name) {
039        super(name);
040    }
041
042
043    /**
044     */
045    public static Test suite() {
046        TestSuite suite = new TestSuite(RatGenSolvablePolynomialTest.class);
047        return suite;
048    }
049
050
051    GenSolvablePolynomial<BigRational> a;
052
053
054    GenSolvablePolynomial<BigRational> b;
055
056
057    GenSolvablePolynomial<BigRational> c;
058
059
060    GenSolvablePolynomial<BigRational> d;
061
062
063    GenSolvablePolynomial<BigRational> e;
064
065
066    GenSolvablePolynomial<BigRational> f;
067
068
069    GenSolvablePolynomial<BigRational> x1;
070
071
072    GenSolvablePolynomial<BigRational> x2;
073
074
075    int rl = 5;
076
077
078    int kl = 10;
079
080
081    int ll = 5;
082
083
084    int el = 3;
085
086
087    float q = 0.5f;
088
089
090    RelationTable<BigRational> table;
091
092
093    GenSolvablePolynomialRing<BigRational> ring;
094
095
096    BigRational cfac;
097
098
099    @Override
100    protected void setUp() {
101        cfac = new BigRational(1);
102        ring = new GenSolvablePolynomialRing<BigRational>(cfac, rl);
103        table = ring.table;
104        a = b = c = d = e = null;
105    }
106
107
108    @Override
109    protected void tearDown() {
110        table = null;
111        ring = null;
112        a = b = c = d = e = null;
113    }
114
115
116    /**
117     * Test constructor and toString.
118     */
119    public void testConstructor() {
120        a = new GenSolvablePolynomial<BigRational>(ring);
121        assertTrue("length( a ) = 0", a.length() == 0);
122        assertTrue("isZERO( a )", a.isZERO());
123        assertTrue("isONE( a )", !a.isONE());
124
125        c = ring.getONE();
126        assertTrue("length( c ) = 1", c.length() == 1);
127        assertTrue("isZERO( c )", !c.isZERO());
128        assertTrue("isONE( c )", c.isONE());
129
130        d = ring.getZERO();
131        assertTrue("length( d ) = 0", d.length() == 0);
132        assertTrue("isZERO( d )", d.isZERO());
133        assertTrue("isONE( d )", !d.isONE());
134    }
135
136
137    /**
138     * Test random polynomial.
139     */
140    public void testRandom() {
141        assertTrue("isCommutative()", ring.isCommutative());
142
143        for (int i = 0; i < 2; i++) {
144            // a = ring.random(ll+2*i);
145            a = ring.random(kl * (i + 1), ll + 2 * i, el + i, q);
146            assertTrue("length( a" + i + " ) <> 0", a.length() >= 0);
147            assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
148            assertTrue(" not isONE( a" + i + " )", !a.isONE());
149        }
150    }
151
152
153    /**
154     * Test addition.
155     */
156    public void testAddition() {
157        a = ring.random(kl, ll, el, q);
158
159        c = (GenSolvablePolynomial<BigRational>) a.subtract(a);
160        assertTrue("a-a = 0", c.isZERO());
161
162        b = (GenSolvablePolynomial<BigRational>) a.sum(a);
163        c = (GenSolvablePolynomial<BigRational>) b.subtract(a);
164
165        assertEquals("a+a-a = a", c, a);
166        assertTrue("a+a-a = a", c.equals(a));
167
168        b = ring.random(kl, ll, el, q);
169        c = (GenSolvablePolynomial<BigRational>) b.sum(a);
170        d = (GenSolvablePolynomial<BigRational>) a.sum(b);
171
172        assertEquals("a+b = b+a", c, d);
173        assertTrue("a+b = b+a", c.equals(d));
174
175        c = ring.random(kl, ll, el, q);
176        d = (GenSolvablePolynomial<BigRational>) a.sum(b.sum(c));
177        e = (GenSolvablePolynomial<BigRational>) a.sum(b).sum(c);
178
179        assertEquals("a+(b+c) = (a+b)+c", d, e);
180        assertTrue("a+(b+c) = (a+b)+c", d.equals(e));
181
182        ExpVector u = ExpVector.EVRAND(rl, el, q);
183        BigRational x = cfac.random(kl);
184
185        b = ring.getONE().multiply(x, u);
186        c = (GenSolvablePolynomial<BigRational>) a.sum(b);
187        d = (GenSolvablePolynomial<BigRational>) a.sum(x, u);
188        assertEquals("a+p(x,u) = a+(x,u)", c, d);
189
190        c = (GenSolvablePolynomial<BigRational>) a.subtract(b);
191        d = (GenSolvablePolynomial<BigRational>) a.subtract(x, u);
192        assertEquals("a-p(x,u) = a-(x,u)", c, d);
193
194        a = ring.getZERO();
195        b = ring.getONE().multiply(x, u);
196        c = (GenSolvablePolynomial<BigRational>) b.sum(a);
197        d = (GenSolvablePolynomial<BigRational>) a.sum(x, u);
198        assertEquals("a+p(x,u) = a+(x,u)", c, d);
199
200        c = (GenSolvablePolynomial<BigRational>) a.subtract(b);
201        d = (GenSolvablePolynomial<BigRational>) a.subtract(x, u);
202        assertEquals("a-p(x,u) = a-(x,u)", c, d);
203    }
204
205
206    /**
207     * Test object multiplication.
208     */
209    @SuppressWarnings("cast")
210    public void testMultiplication() {
211        a = ring.random(kl, ll, el, q);
212        assertTrue("not isZERO( a )", !a.isZERO());
213        //a = RatGenSolvablePolynomial.DIRRAS(1, kl, 4, el, q );
214
215        b = ring.random(kl, ll, el, q);
216        assertTrue("not isZERO( b )", !b.isZERO());
217
218        c = b.multiply(a);
219        d = a.multiply(b);
220        assertTrue("not isZERO( c )", !c.isZERO());
221        assertTrue("not isZERO( d )", !d.isZERO());
222
223        e = (GenSolvablePolynomial<BigRational>) d.subtract(c);
224        assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO());
225
226        assertEquals("a*b = b*a", c, d);
227        assertTrue("a*b = b*a", c.equals(d));
228
229        c = ring.random(kl, ll, el, q);
230        d = a.multiply(b.multiply(c));
231        e = (a.multiply(b)).multiply(c);
232
233        assertEquals("a(bc) = (ab)c", d, e);
234        assertTrue("a(bc) = (ab)c", d.equals(e));
235
236        BigRational x = a.leadingBaseCoefficient().inverse();
237        c = (GenSolvablePolynomial<BigRational>) a.monic();
238        d = a.multiply(x);
239        assertEquals("a.monic() = a(1/ldcf(a))", c, d);
240
241        ExpVector u = ring.evzero;
242        BigRational y = b.leadingBaseCoefficient().inverse();
243        c = (GenSolvablePolynomial<BigRational>) b.monic();
244        d = b.multiply(y, u);
245        assertEquals("b.monic() = b(1/ldcf(b))", c, d);
246
247        e = ring.getONE().multiply(y, u);
248        d = b.multiply(e);
249        assertEquals("b.monic() = b(1/ldcf(b))", c, d);
250
251        d = e.multiply(b);
252        assertEquals("b.monic() = (1/ldcf(b) (0))*b", c, d);
253
254        d = a.monic();
255        assertTrue("a.monic(): ", d.leadingBaseCoefficient().isONE());
256    }
257
258
259    /**
260     * Test Weyl polynomials.
261     */
262    public void testWeyl() {
263        int rloc = 4;
264        ring = new GenSolvablePolynomialRing<BigRational>(cfac, rloc);
265
266        RelationGenerator<BigRational> wl = new WeylRelations<BigRational>();
267        wl.generate(ring);
268        table = ring.table;
269        //System.out.println("table = " + table);
270        //System.out.println("ring = " + ring);
271
272        assertFalse("isCommutative()", ring.isCommutative());
273        assertTrue("isAssociative()", ring.isAssociative());
274
275        a = ring.random(kl, ll, el, q);
276        assertTrue("not isZERO( a )", !a.isZERO());
277        //System.out.println("a = " + a);
278
279        b = ring.random(kl, ll, el, q);
280        assertTrue("not isZERO( b )", !b.isZERO());
281        //System.out.println("b = " + b);
282
283
284        // non commutative
285        c = b.multiply(a);
286        d = a.multiply(b);
287        //System.out.println("c = " + c);
288        //System.out.println("d = " + d);
289        assertTrue("not isZERO( c )", !c.isZERO());
290        assertTrue("not isZERO( d )", !d.isZERO());
291
292        e = (GenSolvablePolynomial<BigRational>) d.subtract(c);
293        assertTrue("!isZERO( a*b-b*a ) " + e, !e.isZERO());
294        assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector()));
295
296        c = ring.random(kl, ll, el, q);
297        //System.out.println("\na = " + a);
298        //System.out.println("\nb = " + b);
299        //System.out.println("\nc = " + c);
300
301        // associative
302        //x1 = b.multiply(c);
303        //System.out.println("\nx1 = " + x1);
304        d = a.multiply(b.multiply(c));
305
306        //x2 = a.multiply(b);
307        //System.out.println("\nx2 = " + x2);
308        e = a.multiply(b).multiply(c);
309
310        //System.out.println("\nd = " + d);
311        //System.out.println("\ne = " + e);
312
313        //f = (GenSolvablePolynomial<BigRational>)d.subtract(e);
314        //System.out.println("\nf = " + f);
315
316        assertEquals("a(bc) = (ab)c", d, e);
317        assertTrue("a(bc) = (ab)c", d.equals(e));
318    }
319
320
321    /**
322     * Test distributive law.
323     */
324    public void testDistributive() {
325        int rloc = 4;
326        ring = new GenSolvablePolynomialRing<BigRational>(cfac, rloc);
327
328        RelationGenerator<BigRational> wl = new WeylRelations<BigRational>();
329        wl.generate(ring);
330        //table = ring.table;
331        //System.out.println("table = " + table);
332        //System.out.println("ring = " + ring);
333
334        a = ring.random(kl, ll, el, q);
335        b = ring.random(kl, ll, el, q);
336        c = ring.random(kl, ll, el, q);
337
338        d = a.multiply((GenSolvablePolynomial<BigRational>) b.sum(c));
339        e = (GenSolvablePolynomial<BigRational>) a.multiply(b).sum(a.multiply(c));
340
341        assertEquals("a(b+c) = ab+ac", d, e);
342    }
343}