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