001    /*
002     * $Id: GenSolvablePolynomialTest.java 2615 2009-05-02 10:08:27Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    import java.util.Map;
008    import java.util.List;
009    import java.util.ArrayList;
010    
011    
012    import junit.framework.Test;
013    import junit.framework.TestCase;
014    import junit.framework.TestSuite;
015    
016    
017    import edu.jas.arith.BigRational;
018    
019    import edu.jas.poly.GenSolvablePolynomial;
020    import edu.jas.poly.GenSolvablePolynomialRing;
021    
022    import edu.jas.structure.RingElem;
023    //import edu.jas.structure.RingFactory;
024    
025    
026    /**
027     * GenSolvablePolynomial Test using JUnit.
028     * <b>Note:</b> not optimal since GenSolvablePolynomial does not 
029     * implement RingElem&lt;GenSolvablePolynomial&gt;
030     * @author Heinz Kredel.
031     */
032    
033    public class GenSolvablePolynomialTest extends TestCase {
034    
035    /**
036     * main
037     */
038       public static void main (String[] args) {
039              junit.textui.TestRunner.run( suite() );
040       }
041    
042    /**
043     * Constructs a <CODE>GenSolvablePolynomialTest</CODE> object.
044     * @param name String.
045     */
046       public GenSolvablePolynomialTest(String name) {
047              super(name);
048       }
049    
050    /**
051     * suite.
052     */ 
053     public static Test suite() {
054         TestSuite suite= new TestSuite(GenSolvablePolynomialTest.class);
055         return suite;
056       }
057    
058       //private final static int bitlen = 100;
059    
060       int rl = 6;  // even for Weyl 
061       int kl = 10;
062       int ll = 7;
063       int el = 4;
064       float q = 0.5f;
065    
066       protected void setUp() {
067           // a = b = c = d = e = null;
068       }
069    
070       protected void tearDown() {
071           // a = b = c = d = e = null;
072       }
073    
074    
075    /**
076     * Test constructors and factory.
077     * 
078     */
079     public void testConstructors() {
080            // rational numbers
081            BigRational rf = new BigRational();
082            // System.out.println("rf = " + rf);
083    
084            BigRational r = rf.fromInteger( 99 );
085            // System.out.println("r = " + r);
086            r = rf.random( 9 );
087            // System.out.println("r = " + r);
088    
089            RingElem<BigRational> re = new BigRational( 3 );
090            // System.out.println("re = " + re);
091    
092    
093            // polynomials over rational numbers
094            GenSolvablePolynomialRing<BigRational> pf = new GenSolvablePolynomialRing<BigRational>(rf,2);
095            // System.out.println("pf = " + pf);
096    
097            GenSolvablePolynomial<BigRational> p = pf.getONE();
098            // System.out.println("p = " + p);
099            p = pf.random( 9 );
100            // System.out.println("p = " + p);
101            p = pf.getZERO();
102            // System.out.println("p = " + p);
103    
104            RingElem< GenPolynomial<BigRational> > pe = new GenSolvablePolynomial<BigRational>( pf );
105            //System.out.println("pe = " + pe);
106            //System.out.println("p.equals(pe) = " + p.equals(pe) );
107            //System.out.println("p.equals(p) = " + p.equals(p) );
108            assertTrue("p.equals(pe) = ", p.equals(pe) );
109            assertTrue("p.equals(p) = ", p.equals(p) );
110    
111            pe = pe.sum( p ); // why not p = p.add(pe) ?
112            //System.out.println("pe = " + pe);
113            p = pf.random( 9 );
114            p = (GenSolvablePolynomial<BigRational>)p.subtract( p ); 
115            //System.out.println("p = " + p);
116            //System.out.println("p.isZERO() = " + p.isZERO());
117            assertTrue("p.isZERO() = ", p.isZERO());
118    
119    
120            // polynomials over (polynomials over rational numbers)
121            GenSolvablePolynomialRing< GenPolynomial<BigRational> > ppf = new GenSolvablePolynomialRing< GenPolynomial<BigRational> >(pf,3);
122            // System.out.println("ppf = " + ppf);
123    
124            GenSolvablePolynomial< GenPolynomial<BigRational> > pp = ppf.getONE();
125            // System.out.println("pp = " + pp);
126            pp = ppf.random( 2 );
127            // System.out.println("pp = " + pp);
128            pp = ppf.getZERO();
129            // System.out.println("pp = " + pp);
130    
131            RingElem< GenPolynomial< GenPolynomial<BigRational> > > ppe = new GenSolvablePolynomial< GenPolynomial<BigRational> >( ppf );
132            // System.out.println("ppe = " + ppe);
133            // System.out.println("pp.equals(ppe) = " + pp.equals(ppe) );
134            // System.out.println("pp.equals(pp) = " + pp.equals(pp) );
135            assertTrue("pp.equals(ppe) = ", pp.equals(ppe) );
136            assertTrue("pp.equals(pp) = ", pp.equals(pp) );
137    
138            ppe = ppe.sum( pp ); // why not pp = pp.add(ppe) ?
139            //System.out.println("ppe = " + ppe);
140            pp = ppf.random( 2 );
141            pp = (GenSolvablePolynomial< GenPolynomial<BigRational>>)pp.subtract( pp ); 
142            //System.out.println("pp = " + pp);
143            //System.out.println("pp.isZERO() = " + pp.isZERO());
144            assertTrue("pp.isZERO() = ", pp.isZERO());
145    
146    
147            // polynomials over (polynomials over (polynomials over rational numbers))
148            GenSolvablePolynomialRing< GenPolynomial< GenPolynomial<BigRational> > > pppf = new GenSolvablePolynomialRing< GenPolynomial< GenPolynomial<BigRational> > >(ppf,4);
149            // System.out.println("pppf = " + pppf);
150    
151            GenSolvablePolynomial< GenPolynomial< GenPolynomial<BigRational> > > ppp = pppf.getONE();
152            //System.out.println("ppp = " + ppp);
153            ppp = pppf.random( 2 );
154            // System.out.println("ppp = " + ppp);
155            ppp = pppf.getZERO();
156            // System.out.println("ppp = " + ppp);
157    
158            RingElem< GenPolynomial< GenPolynomial< GenPolynomial<BigRational> > > > pppe = new GenSolvablePolynomial< GenPolynomial< GenPolynomial<BigRational> > >( pppf );
159            // System.out.println("pppe = " + pppe);
160            // System.out.println("ppp.equals(pppe) = " + ppp.equals(pppe) );
161            // System.out.println("ppp.equals(ppp) = " + ppp.equals(ppp) );
162            assertTrue("ppp.equals(pppe) = ", ppp.equals(pppe) );
163            assertTrue("ppp.equals(ppp) = ", ppp.equals(ppp) );
164    
165            pppe = pppe.sum( ppp ); // why not ppp = ppp.add(pppe) ?
166            // System.out.println("pppe = " + pppe);
167            ppp = pppf.random( 2 );
168            ppp = (GenSolvablePolynomial<GenPolynomial<GenPolynomial<BigRational>>>)ppp.subtract( ppp ); 
169            // System.out.println("ppp = " + ppp);
170            // System.out.println("ppp.isZERO() = " + ppp.isZERO());
171            assertTrue("ppp.isZERO() = ", ppp.isZERO());
172    
173            // some tests
174            //GenSolvablePolynomial<BigRational> pfx = new GenSolvablePolynomial<BigRational>();
175            //System.out.println("pfx = " + pfx);
176        }
177    
178    
179    /**
180     * Test extension and contraction.
181     * 
182     */
183     public void testExtendContract() {
184         // rational numbers
185         BigRational cf = new BigRational( 99 );
186         // System.out.println("cf = " + cf);
187    
188         // polynomials over rational numbers
189         GenSolvablePolynomialRing<BigRational> pf = new GenSolvablePolynomialRing<BigRational>(cf,rl);
190         // System.out.println("pf = " + pf);
191    
192         GenSolvablePolynomial<BigRational> a = pf.random(kl,ll,el,q);
193         //System.out.println("a = " + a);
194    
195         int k = rl;
196         GenSolvablePolynomialRing<BigRational> pfe = pf.extend(k);
197         GenSolvablePolynomialRing<BigRational> pfec = pfe.contract(k);
198         assertEquals("pf == pfec",pf,pfec);
199    
200         GenSolvablePolynomial<BigRational> ae 
201             = (GenSolvablePolynomial<BigRational>)a.extend(pfe,0,0);
202    
203         Map<ExpVector,GenPolynomial<BigRational>> m = ae.contract(pfec);
204         List<GenPolynomial<BigRational>> ml = new ArrayList<GenPolynomial<BigRational>>( m.values() );
205         GenSolvablePolynomial<BigRational> aec = (GenSolvablePolynomial<BigRational>)ml.get(0);
206         assertEquals("a == aec",a,aec);
207         //System.out.println("ae = " + ae);
208         //System.out.println("aec = " + aec);
209     }
210    
211    
212    /**
213     * Test extension and contraction for Weyl relations.
214     * 
215     */
216     public void testExtendContractWeyl() {
217         // rational numbers
218         BigRational cf = new BigRational( 99 );
219         // System.out.println("cf = " + cf);
220    
221         // polynomials over rational numbers
222         GenSolvablePolynomialRing<BigRational> pf = new GenSolvablePolynomialRing<BigRational>(cf,rl);
223         WeylRelations<BigRational> wl = new WeylRelations<BigRational>(pf);
224         wl.generate();
225         // System.out.println("pf = " + pf);
226    
227         GenSolvablePolynomial<BigRational> a = pf.random(kl,ll,el,q);
228         //System.out.println("a = " + a);
229    
230         int k = rl;
231         GenSolvablePolynomialRing<BigRational> pfe = pf.extend(k);
232         GenSolvablePolynomialRing<BigRational> pfec = pfe.contract(k);
233         assertEquals("pf == pfec",pf,pfec);
234    
235         GenSolvablePolynomial<BigRational> ae 
236             = (GenSolvablePolynomial<BigRational>)a.extend(pfe,0,0);
237    
238         Map<ExpVector,GenPolynomial<BigRational>> m = ae.contract(pfec);
239         List<GenPolynomial<BigRational>> ml = new ArrayList<GenPolynomial<BigRational>>( m.values() );
240         GenSolvablePolynomial<BigRational> aec = (GenSolvablePolynomial<BigRational>)ml.get(0);
241         assertEquals("a == aec",a,aec);
242         //System.out.println("ae = " + ae);
243         //System.out.println("aec = " + aec);
244     }
245    
246    
247    /**
248     * Test reversion.
249     * 
250     */
251     public void testReverse() {
252         // rational numbers
253         BigRational cf = new BigRational( 99 );
254         // System.out.println("cf = " + cf);
255    
256         // polynomials over rational numbers
257         GenSolvablePolynomialRing<BigRational> pf = new GenSolvablePolynomialRing<BigRational>(cf,rl);
258         //System.out.println("pf = " + pf);
259    
260         GenSolvablePolynomial<BigRational> a = pf.random(kl,ll,el,q);
261         //System.out.println("a = " + a);
262    
263         GenSolvablePolynomialRing<BigRational> pfr = pf.reverse();
264         GenSolvablePolynomialRing<BigRational> pfrr = pfr.reverse();
265         assertEquals("pf == pfrr",pf,pfrr);
266         //System.out.println("pfr = " + pfr);
267    
268         GenSolvablePolynomial<BigRational> ar 
269            = (GenSolvablePolynomial<BigRational>)a.reverse(pfr);
270         GenSolvablePolynomial<BigRational> arr 
271            = (GenSolvablePolynomial<BigRational>)ar.reverse(pfrr);
272         assertEquals("a == arr",a,arr);
273         //System.out.println("ar = " + ar);
274         //System.out.println("arr = " + arr);
275     }
276    
277    
278    /**
279     * Test reversion for Weyl relations.
280     * 
281     */
282     public void testReverseWeyl() {
283         // rational numbers
284         BigRational cf = new BigRational( 99 );
285         // System.out.println("cf = " + cf);
286    
287         // polynomials over rational numbers
288         GenSolvablePolynomialRing<BigRational> pf = new GenSolvablePolynomialRing<BigRational>(cf,rl);
289         WeylRelations<BigRational> wl = new WeylRelations<BigRational>(pf);
290         wl.generate();
291         //System.out.println("pf = " + pf);
292    
293         GenSolvablePolynomial<BigRational> a = pf.random(kl,ll,el,q);
294         //System.out.println("a = " + a);
295    
296         GenSolvablePolynomialRing<BigRational> pfr = pf.reverse();
297         GenSolvablePolynomialRing<BigRational> pfrr = pfr.reverse();
298         assertEquals("pf == pfrr",pf,pfrr);
299         //System.out.println("pfr = " + pfr);
300    
301         GenSolvablePolynomial<BigRational> ar 
302            = (GenSolvablePolynomial<BigRational>)a.reverse(pfr);
303         GenSolvablePolynomial<BigRational> arr 
304            = (GenSolvablePolynomial<BigRational>)ar.reverse(pfrr);
305         assertEquals("a == arr",a,arr);
306         //System.out.println("ar = " + ar);
307         //System.out.println("arr = " + arr);
308     }
309    
310    
311    /**
312     * Test recursion.
313     * 
314     */
315     public void testRecursion() {
316         // rational numbers
317         BigRational rf = new BigRational();
318         // System.out.println("rf = " + rf);
319    
320         String[] vars = new String[] { "a", "b", "c", "d" };
321         TermOrder to = new TermOrder(TermOrder.INVLEX);
322         // polynomials over rational numbers
323         GenSolvablePolynomialRing<BigRational> pf = new GenSolvablePolynomialRing<BigRational>(rf,4,to,vars);
324         WeylRelations<BigRational> wl = new WeylRelations<BigRational>(pf);
325         wl.generate();
326         //System.out.println("pf = " + pf);
327    
328         GenSolvablePolynomial<BigRational> sp = pf.random(5);
329         //System.out.println("sp = " + sp);
330      
331         // polynomials over (solvable) polynomials over rational numbers
332         GenSolvablePolynomialRing<GenPolynomial<BigRational>> rpf 
333             = new GenSolvablePolynomialRing<GenPolynomial<BigRational>>(pf,2);
334         WeylRelations<GenPolynomial<BigRational>> rwl = new WeylRelations<GenPolynomial<BigRational>>(rpf);
335         rwl.generate();
336         //System.out.println("rpf = " + rpf);
337    
338         GenSolvablePolynomial<GenPolynomial<BigRational>> rsp = rpf.random(5);
339         //System.out.println("rsp = " + rsp);
340    
341     }
342    
343    }