001/*
002 * $Id: QuotientSolvablePolynomialQLRTest.java 5134 2015-02-28 18:36:43Z kredel
003 * $
004 */
005
006package edu.jas.application;
007
008
009import java.util.List;
010
011import junit.framework.Test;
012import junit.framework.TestCase;
013import junit.framework.TestSuite;
014
015import org.apache.log4j.BasicConfigurator;
016
017import edu.jas.arith.BigRational;
018import edu.jas.gbufd.SolvableQuotient;
019import edu.jas.gbufd.SolvableQuotientRing;
020import edu.jas.poly.ExpVector;
021import edu.jas.poly.GenPolynomial;
022import edu.jas.poly.GenSolvablePolynomial;
023import edu.jas.poly.GenSolvablePolynomialRing;
024import edu.jas.poly.QLRSolvablePolynomial;
025import edu.jas.poly.QLRSolvablePolynomialRing;
026import edu.jas.poly.RecSolvablePolynomial;
027import edu.jas.poly.RelationGenerator;
028import edu.jas.poly.TermOrder;
029import edu.jas.poly.WeylRelations;
030
031
032/**
033 * BigRational coefficients QuotientSolvablePolynomial QLR representation tests
034 * with JUnit.
035 * @author Heinz Kredel.
036 */
037
038public class QuotientSolvablePolynomialQLRTest extends TestCase {
039
040
041    /**
042     * main.
043     */
044    public static void main(String[] args) {
045        BasicConfigurator.configure();
046        junit.textui.TestRunner.run(suite());
047    }
048
049
050    /**
051     * Constructs a <CODE>QuotientSolvablePolynomialQLRTest</CODE> object.
052     * @param name String.
053     */
054    public QuotientSolvablePolynomialQLRTest(String name) {
055        super(name);
056    }
057
058
059    /**
060     */
061    public static Test suite() {
062        TestSuite suite = new TestSuite(QuotientSolvablePolynomialQLRTest.class);
063        return suite;
064    }
065
066
067    QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational> a, b, c, d, e, f, x1, x2;
068
069
070    int rl = 4;
071
072
073    int kl = 1;
074
075
076    int ll = 3;
077
078
079    int el = 3;
080
081
082    float q = 0.15f;
083
084
085    String[] cvars = new String[] { "a", "b" };
086
087
088    String[] vars = new String[] { "w", "x", "y", "z" };
089
090
091    QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational> ring;
092
093
094    BigRational cfac;
095
096
097    GenSolvablePolynomialRing<SolvableQuotient<BigRational>> sring;
098
099
100    GenSolvablePolynomialRing<BigRational> cring;
101
102
103    SolvableQuotientRing<BigRational> qcring;
104
105
106    TermOrder tord = new TermOrder(TermOrder.INVLEX);
107
108
109    @Override
110    protected void setUp() {
111        cfac = new BigRational(1);
112        cring = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars);
113        RelationGenerator<BigRational> wc = new WeylRelations<BigRational>();
114        cring.addRelations(wc);
115        qcring = new SolvableQuotientRing<BigRational>(cring);
116        ring = new QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational>(qcring, tord, vars);
117        RelationGenerator<SolvableQuotient<BigRational>> wl = new WeylRelations<SolvableQuotient<BigRational>>();
118        ring.addRelations(wl);
119        a = b = c = d = e = null;
120    }
121
122
123    @Override
124    protected void tearDown() {
125        ring = null;
126        a = b = c = d = e = null;
127    }
128
129
130    /**
131     * Test constructor, generators and properties.
132     */
133    public void testConstructor() {
134        assertFalse("not commutative", ring.isCommutative());
135        assertTrue("associative", ring.isAssociative());
136
137        a = new QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>(ring);
138        assertTrue("length( a ) = 0", a.length() == 0);
139        assertTrue("isZERO( a )", a.isZERO());
140        assertTrue("isONE( a )", !a.isONE());
141
142        c = ring.getONE();
143        assertTrue("length( c ) = 1", c.length() == 1);
144        assertTrue("isZERO( c )", !c.isZERO());
145        assertTrue("isONE( c )", c.isONE());
146
147        d = ring.getZERO();
148        assertTrue("length( d ) = 0", d.length() == 0);
149        assertTrue("isZERO( d )", d.isZERO());
150        assertTrue("isONE( d )", !d.isONE());
151        //System.out.println("d = " + d);
152
153        //System.out.println("");
154        for (GenPolynomial<SolvableQuotient<BigRational>> g : ring.generators()) {
155            //System.out.println("g = " + g + ", ");
156            assertFalse("not isZERO( g )", g.isZERO());
157        }
158        //System.out.println("");
159        assertTrue("isAssociative: ", ring.isAssociative());
160    }
161
162
163    /**
164     * Test random polynomial.
165     */
166    public void testRandom() {
167        for (int i = 0; i < 5; i++) {
168            // a = ring.random(ll+2*i);
169            a = ring.random(kl, ll + 2 * i, el + i, q);
170            //System.out.println("a = " + a);
171            assertTrue("length( a" + i + " ) <> 0", a.length() >= 0);
172            assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
173            assertTrue(" not isONE( a" + i + " )", !a.isONE());
174        }
175    }
176
177
178    /**
179     * Test addition.
180     */
181    @SuppressWarnings("unchecked")
182    public void testAddition() {
183        a = ring.random(kl + 1, ll, el, q);
184        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(a);
185        assertTrue("a-a = 0", c.isZERO());
186
187        b = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(a);
188        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.subtract(a);
189        assertEquals("a+a-a = a", c, a);
190
191        b = ring.random(kl, ll, el, q);
192        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.sum(a);
193        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b);
194        assertEquals("a+b = b+a", c, d);
195
196        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b);
197        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) c.subtract(b);
198        //System.out.println("a = " + a);
199        //System.out.println("d = " + d);
200        assertEquals("a+b-b = a", a, d);
201
202        c = ring.random(kl, ll, el, q);
203        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b.sum(c));
204        e = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b).sum(c);
205        assertEquals("a+(b+c) = (a+b)+c", d, e);
206        //System.out.println("a = " + a);
207        //System.out.println("b = " + b);
208        //System.out.println("c = " + c);
209        //System.out.println("d = " + d);
210        //System.out.println("e = " + e);
211
212        ExpVector u = ExpVector.EVRAND(rl, el, q);
213        SolvableQuotient<BigRational> x = qcring.random(kl);
214        //System.out.println("x = " + x);
215        //System.out.println("u = " + u);
216
217        b = ring.getONE().multiply(x, u);
218        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(b);
219        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(x, u);
220        //System.out.println("a = " + a);
221        //System.out.println("b = " + b);
222        //System.out.println("c = " + c);
223        //System.out.println("d = " + d);
224        assertEquals("a+p(x,u) = a+(x,u)", c, d);
225
226        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(b);
227        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(x, u);
228        assertEquals("a-p(x,u) = a-(x,u)", c, d);
229
230        a = ring.getZERO();
231        b = ring.getONE().multiply(x, u);
232        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.sum(a);
233        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.sum(x, u);
234        assertEquals("a+p(x,u) = a+(x,u)", c, d);
235
236        c = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(b);
237        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.subtract(x, u);
238        assertEquals("a-p(x,u) = a-(x,u)", c, d);
239    }
240
241
242    /**
243     * Test multiplication.
244     */
245    @SuppressWarnings("unchecked")
246    public void testMultiplication() {
247        //System.out.println("ring = " + ring);
248        a = ring.random(kl, ll - 1, el - 1, q);
249        //a = ring.parse(" b y z + a w z ");  
250        b = ring.random(kl, ll - 1, el - 1, q);
251        //b = ring.parse(" w x - b x "); 
252
253        c = b.multiply(a);
254        d = a.multiply(b);
255        //System.out.println("a = " + a);
256        //System.out.println("b = " + b);
257        //System.out.println("c = " + c);
258        //System.out.println("d = " + d);
259        assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector()));
260
261        c = ring.random(kl, ll - 1, el - 1, q);
262        d = a.multiply(b.multiply(c));
263        e = a.multiply(b).multiply(c);
264        assertEquals("a(bc) = (ab)c", d, e);
265        //System.out.println("a = " + a);
266        //System.out.println("b = " + b);
267        //System.out.println("c = " + c);
268        //System.out.println("d = " + d);
269        //System.out.println("e = " + e);
270
271        SolvableQuotient<BigRational> xp = a.leadingBaseCoefficient().inverse();
272        d = a.multiply(xp);
273        assertTrue("monic(a) = a*(1/ldcf(ldcf(a)))", d.leadingBaseCoefficient().isONE());
274        //System.out.println("a = " + a);
275        //System.out.println("d = " + d);
276
277        d = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.monic();
278        assertTrue("a.monic(): ", d.leadingBaseCoefficient().isONE());
279    }
280
281
282    /**
283     * Test commutative ring.
284     */
285    @SuppressWarnings("unchecked")
286    public void testCommutative() {
287        //System.out.println("table = " + ring.table.toString(vars));
288        //System.out.println("table = " + ring.table.toScript());
289        //System.out.println("ring = " + ring);
290        //System.out.println("ring.table = " + ring.table.toScript());
291        //assertEquals("table == ring.table: ", table, ring.table); // ?
292        assertTrue("# relations == 2", ring.table.size() == 2);
293
294        cring = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars);
295        qcring = new SolvableQuotientRing<BigRational>(cring);
296        ring = new QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational>(qcring, ring);
297        //System.out.println("ring = " + ring);
298
299        assertTrue("isCommutative()", ring.isCommutative());
300        assertTrue("isAssociative()", ring.isAssociative());
301
302        a = ring.random(kl, ll, el, q);
303        //a = ring.parse(" b x y z + a w z ");
304        //System.out.println("a = " + a);
305        b = ring.random(kl, ll, el, q);
306        //b = ring.parse(" w y z - b x ");
307        //System.out.println("b = " + b);
308
309        // commutative
310        c = b.multiply(a);
311        //System.out.println("c = " + c);
312        d = a.multiply(b);
313        //d = ring.getONE(); 
314        //System.out.println("d = " + d);
315        assertEquals("b*a == a*b: ", c, d);
316    }
317
318
319    /**
320     * Test distributive law.
321     */
322    @SuppressWarnings("unchecked")
323    public void testDistributive() {
324        a = ring.random(kl, ll, el, q);
325        b = ring.random(kl, ll, el, q);
326        c = ring.random(kl, ll, el, q);
327
328        d = a.multiply((QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.sum(c));
329        e = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) a.multiply(b).sum(
330                        a.multiply(c));
331        assertEquals("a*(b+c) = a*b+a*c", d, e);
332    }
333
334
335    /**
336     * Test solvable coefficient ring.
337     */
338    @SuppressWarnings("unchecked")
339    public void testSolvableCoeffs() {
340        GenSolvablePolynomialRing<BigRational> csring = new GenSolvablePolynomialRing<BigRational>(cfac,
341                        tord, cvars);
342        //RelationGenerator<BigRational> wc = new WeylRelations<BigRational>();
343        //no: csring.addRelations(wc); //wc.generate(csring);
344        //assertTrue("# relations == 1", csring.table.size() == 1);
345        assertTrue("isCommutative()", csring.isCommutative());
346        assertTrue("isAssociative()", csring.isAssociative());
347
348        SolvableQuotientRing<BigRational> qcsring = new SolvableQuotientRing<BigRational>(csring);
349        assertTrue("isCommutative()", qcsring.isCommutative());
350        assertTrue("isAssociative()", qcsring.isAssociative());
351
352        ring = new QLRSolvablePolynomialRing<SolvableQuotient<BigRational>, BigRational>(qcsring, ring);
353        RelationGenerator<SolvableQuotient<BigRational>> wl = new WeylRelations<SolvableQuotient<BigRational>>();
354        ring.addRelations(wl); //wl.generate(ring);
355        assertTrue("# relations == 2", ring.table.size() == 2);
356        assertFalse("isCommutative()", ring.isCommutative());
357        assertTrue("isAssociative()", ring.isAssociative());
358        //System.out.println("ring = " + ring);
359
360        RecSolvablePolynomial<BigRational> r1 = ring.polCoeff.parse("x");
361        GenSolvablePolynomial<BigRational> r2 = csring.parse("b");
362        RecSolvablePolynomial<BigRational> rp = ring.polCoeff.parse("b x + a"); // + a
363        //System.out.println("r1 = " + r1);
364        //System.out.println("r2 = " + r2);
365        //System.out.println("rp = " + rp);
366        ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp);
367        //System.out.println("ring = " + ring.toScript());
368        //System.out.println("ring.polCoeff = " + ring.polCoeff);
369        assertFalse("isCommutative()", ring.isCommutative());
370        assertTrue("isAssociative()", ring.isAssociative());
371
372        List<GenPolynomial<SolvableQuotient<BigRational>>> gens = ring.generators();
373        for (GenPolynomial<SolvableQuotient<BigRational>> x : gens) {
374            GenSolvablePolynomial<SolvableQuotient<BigRational>> xx = (GenSolvablePolynomial<SolvableQuotient<BigRational>>) x;
375            a = new QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>(ring, xx);
376            //System.out.println("a = " + a);
377            for (GenPolynomial<SolvableQuotient<BigRational>> y : gens) {
378                GenSolvablePolynomial<SolvableQuotient<BigRational>> yy = (GenSolvablePolynomial<SolvableQuotient<BigRational>>) y;
379                b = new QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>(ring, yy);
380                //System.out.println("b = " + b);
381                c = a.multiply(b);
382                //System.out.println("gens: " + a + " * " + b + " = " + c);
383                ExpVector ev = a.leadingExpVector().sum(b.leadingExpVector());
384                assertTrue("LT(a)*LT(b) == LT(c)", c.leadingExpVector().equals(ev));
385            }
386        }
387        //System.out.println("=============");
388        //a = ring.random(kl, ll, el, q);
389        //a = ring.getONE();
390        a = ring.parse("x^2 + a b");
391        //System.out.println("a = " + a.toScript());
392        //b = ring.random(kl, ll, el, q);
393        //b = ring.getONE();
394        b = ring.parse("a b + a"); // a b^2 + a 
395        b = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.inverse();
396        //System.out.println("b = " + b.toScript());
397
398        // non-commutative
399        c = b.multiply(a);
400        d = a.multiply(b);
401        //System.out.println("a = " + a.toScript());
402        //System.out.println("b = " + b.toScript());
403        //System.out.println("c = " + c.toScript());
404        //System.out.println("d = " + d.toScript());
405        assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector()));
406
407        e = (QLRSolvablePolynomial<SolvableQuotient<BigRational>, BigRational>) b.inverse();
408        //System.out.println("e = " + e.toScript());
409        assertTrue("b*b^-1 == 1", e.multiply(b).isONE());
410
411        c = e.multiply(c);
412        d = d.multiply(e);
413        //System.out.println("a = " + a.toScript());
414        //System.out.println("b = " + b.toScript());
415        //System.out.println("c = " + c.toScript());
416        //System.out.println("d = " + d.toScript());
417        assertTrue("a == b * 1/b * a", a.equals(c));
418        assertTrue("a == a * 1/b * b", a.equals(d));
419    }
420
421
422    /*
423     * Test extension and contraction for Weyl relations. public void
424     * testExtendContractWeyl() { GenSolvablePolynomialRing<BigRational> csring
425     * = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars);
426     * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>();
427     * wlc.generate(csring); assertFalse("isCommutative()", csring.isCommutative());
428     * assertTrue("isAssociative()", csring.isAssociative());
429     * 
430     * QLRSolvablePolynomial<BigRational> r1 = ring.parse("x");
431     * GenSolvablePolynomial<BigRational> r2 = csring.parse("b");
432     * QLRSolvablePolynomial<BigRational> rp = ring.parse("b x + a");
433     * ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp);
434     * 
435     * int k = rl; QLRSolvablePolynomialRing<BigRational> pfe = ring.extend(k);
436     * //System.out.println("pfe = " + pfe);
437     * QLRSolvablePolynomialRing<BigRational> pfec = pfe.contract(k);
438     * //System.out.println("pfec = " + pfec); assertEquals("ring == pfec",
439     * ring, pfec);
440     * 
441     * QLRSolvablePolynomial<BigRational> a = ring.random(kl, ll, el, q);
442     * //System.out.println("a = " + a);
443     * 
444     * QLRSolvablePolynomial<BigRational> ae =
445     * (QLRSolvablePolynomial<BigRational>) a.extend(pfe, 0, 0);
446     * //System.out.println("ae = " + ae);
447     * 
448     * Map<ExpVector, GenPolynomial<GenPolynomial<BigRational>>> m =
449     * ae.contract(pfec); List<GenPolynomial<GenPolynomial<BigRational>>> ml =
450     * new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>( m.values());
451     * GenPolynomial<GenPolynomial<BigRational>> aec = ml.get(0);
452     * //System.out.println("ae  = " + ae); //System.out.println("aec = " +
453     * aec); assertEquals("a == aec", a, aec); }
454     */
455
456
457    /*
458     * Test reversion for Weyl relations. public void testReverseWeyl() {
459     * GenSolvablePolynomialRing<BigRational> csring = new
460     * GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars);
461     * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>();
462     * wlc.generate(csring); assertFalse("isCommutative()", csring.isCommutative());
463     * assertTrue("isAssociative()", csring.isAssociative());
464     * 
465     * QLRSolvablePolynomial<BigRational> r1 = ring.parse("x");
466     * GenSolvablePolynomial<BigRational> r2 = csring.parse("b");
467     * QLRSolvablePolynomial<BigRational> rp = ring.parse("b x + a");
468     * ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp);
469     * 
470     * QLRSolvablePolynomialRing<BigRational> pfr = ring.reverse();
471     * QLRSolvablePolynomialRing<BigRational> pfrr = pfr.reverse();
472     * assertEquals("pf == pfrr", ring, pfrr); //System.out.println("ring = " +
473     * ring); //System.out.println("pfr = " + pfr);
474     * 
475     * QLRSolvablePolynomial<BigRational> a = ring.random(kl, ll, el, q);
476     * //System.out.println("a = " + a);
477     * 
478     * QLRSolvablePolynomial<BigRational> ar =
479     * (QLRSolvablePolynomial<BigRational>) a.reverse(pfr);
480     * QLRSolvablePolynomial<BigRational> arr =
481     * (QLRSolvablePolynomial<BigRational>) ar.reverse(pfrr);
482     * assertEquals("a == arr", a, arr); //System.out.println("ar = " + ar);
483     * //System.out.println("arr = " + arr); }
484     */
485
486
487    /*
488     * Test recursive for Weyl relations. public void testRecursiveWeyl() {
489     * String[] svars = new String[] { "w", "x", "y", "z" };
490     * GenSolvablePolynomialRing<BigRational> sring = new
491     * GenSolvablePolynomialRing<BigRational>(cfac, tord, svars);
492     * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>();
493     * wlc.generate(sring); assertFalse("isCommutative()", sring.isCommutative());
494     * assertTrue("isAssociative()", sring.isAssociative());
495     * //System.out.println("sring = " + sring.toScript());
496     * 
497     * GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring =
498     * sring.recursive(2); // 1,2,3 //System.out.println("rsring = " + rsring);
499     * //.toScript()); System.out.println("rsring = " + rsring.toScript());
500     * 
501     * GenSolvablePolynomial<BigRational> ad, bd, cd, dd;
502     * QLRSolvablePolynomial<BigRational> ar, br, cr, dr; ad = sring.random(kl,
503     * ll, el, q); bd = sring.random(kl, ll, el, q); //ad =
504     * sring.parse("7/2 y^2 * z"); // - 15/2 w^2 + 262/225"); //bd =
505     * sring.parse("-10/13 x "); //+ 413/150"); //ad =
506     * (GenSolvablePolynomial<BigRational>) ad.monic(); //bd =
507     * (GenSolvablePolynomial<BigRational>) bd.monic();
508     * 
509     * //System.out.println("ad = " + ad); //System.out.println("bd = " + bd);
510     * 
511     * cd = ad.multiply(bd); //System.out.println("cd = " + cd);
512     * 
513     * ar = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational>
514     * recursive(rsring, ad); br = (QLRSolvablePolynomial<BigRational>)
515     * PolyUtil.<BigRational> recursive(rsring, bd);
516     * //System.out.println("ar = " + ar); //System.out.println("br = " + br);
517     * 
518     * cr = ar.multiply(br); //System.out.println("cr = " + cr);
519     * //System.out.println("cr.ring = " + cr.ring.toScript());
520     * 
521     * dr = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational>
522     * recursive(rsring, cd); //System.out.println("dr = " + dr);
523     * 
524     * assertEquals("dr.ring == cr.ring", dr.ring, cr.ring);
525     * assertEquals("dr == cr", dr, cr);
526     * 
527     * dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational>
528     * distribute(sring, cr); //System.out.println("dd = " + dd);
529     * assertEquals("dd == cd", dd, cd); }
530     */
531
532
533    /*
534     * Test recursive for iterated Weyl relations. public void
535     * testRecursiveIteratedWeyl() { String[] svars = new String[] { "w", "x",
536     * "y", "z" }; GenSolvablePolynomialRing<BigRational> sring = new
537     * GenSolvablePolynomialRing<BigRational>(cfac, tord, svars);
538     * RelationGenerator<BigRational> wlc = new WeylRelationsIterated<BigRational>();
539     * wlc.generate(sring); assertFalse("isCommutative()",
540     * sring.isCommutative()); assertTrue("isAssociative()",
541     * sring.isAssociative()); //System.out.println("sring = " +
542     * sring.toScript());
543     * 
544     * GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring =
545     * sring.recursive(2); // 1,2,3 //System.out.println("rsring = " + rsring);
546     * //.toScript()); System.out.println("rsring = " + rsring.toScript());
547     * 
548     * GenSolvablePolynomial<BigRational> ad, bd, cd, dd;
549     * QLRSolvablePolynomial<BigRational> ar, br, cr, dr; ad = sring.random(kl,
550     * ll, el, q); bd = sring.random(kl, ll, el, q); //ad =
551     * (GenSolvablePolynomial<BigRational>) ad.monic(); //bd =
552     * (GenSolvablePolynomial<BigRational>) bd.monic();
553     * 
554     * //System.out.println("ad = " + ad); //System.out.println("bd = " + bd);
555     * 
556     * cd = ad.multiply(bd); //System.out.println("cd = " + cd);
557     * 
558     * ar = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational>
559     * recursive(rsring, ad); br = (QLRSolvablePolynomial<BigRational>)
560     * PolyUtil.<BigRational> recursive(rsring, bd);
561     * //System.out.println("ar = " + ar); //System.out.println("br = " + br);
562     * 
563     * cr = ar.multiply(br); //System.out.println("cr = " + cr);
564     * 
565     * dr = (QLRSolvablePolynomial<BigRational>) PolyUtil.<BigRational>
566     * recursive(rsring, cd); //System.out.println("dr = " + dr);
567     * 
568     * assertEquals("dr.ring == cr.ring", dr.ring, cr.ring);
569     * assertEquals("dr == cr", dr, cr);
570     * 
571     * dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational>
572     * distribute(sring, cr); //System.out.println("dd = " + dd);
573     * assertEquals("dd == cd", dd, cd); }
574     */
575
576}