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<GenSolvablePolynomial>
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 }