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 }