001/* 002 * $Id: RecSolvableWordPolynomialTest.java 5316 2015-10-30 20:48:48Z kredel $ 003 */ 004 005package edu.jas.poly; 006 007 008import java.util.List; 009 010import junit.framework.Test; 011import junit.framework.TestCase; 012import junit.framework.TestSuite; 013 014import org.apache.log4j.BasicConfigurator; 015 016import edu.jas.arith.BigRational; 017 018 019/** 020 * BigRational coefficients RecSolvableWordPolynomial tests with JUnit. 021 * @author Heinz Kredel. 022 */ 023 024public class RecSolvableWordPolynomialTest extends TestCase { 025 026 027 /** 028 * main. 029 */ 030 public static void main(String[] args) { 031 BasicConfigurator.configure(); 032 junit.textui.TestRunner.run(suite()); 033 } 034 035 036 /** 037 * Constructs a <CODE>RecSolvableWordPolynomialTest</CODE> object. 038 * @param name String. 039 */ 040 public RecSolvableWordPolynomialTest(String name) { 041 super(name); 042 } 043 044 045 /** 046 */ 047 public static Test suite() { 048 TestSuite suite = new TestSuite(RecSolvableWordPolynomialTest.class); 049 return suite; 050 } 051 052 053 RecSolvableWordPolynomial<BigRational> a, b, c, d, e, f, x1, x2; 054 055 056 int rl = 4; 057 058 059 int kl = 5; 060 061 062 int ll = 4; 063 064 065 int el = 3; 066 067 068 float q = 0.3f; 069 070 071 String[] cvars = new String[] { "a", "b" }; 072 073 074 String[] vars = new String[] { "w", "x", "y", "z" }; 075 076 077 RelationTable<GenWordPolynomial<BigRational>> table; 078 079 080 RecSolvableWordPolynomialRing<BigRational> ring; 081 082 083 BigRational cfac; 084 085 086 GenSolvablePolynomialRing<GenWordPolynomial<BigRational>> sring; 087 088 089 GenWordPolynomialRing<BigRational> cring; 090 091 092 TermOrder tord = new TermOrder(TermOrder.INVLEX); 093 094 095 @Override 096 protected void setUp() { 097 cfac = new BigRational(1); 098 cring = new GenWordPolynomialRing<BigRational>(cfac, cvars); 099 //sring = new GenSolvablePolynomialRing<GenWordPolynomial<BigRational>>(cring,rl,tord); 100 ring = new RecSolvableWordPolynomialRing<BigRational>(cring, tord, vars); 101 //System.out.println("ring = " + ring.toScript()); 102 RelationGenerator<GenWordPolynomial<BigRational>> wl = new WeylRelations<GenWordPolynomial<BigRational>>(); 103 ring.addRelations(wl); 104 table = ring.table; 105 //System.out.println("ring = " + ring.toScript()); 106 a = b = c = d = e = null; 107 } 108 109 110 @Override 111 protected void tearDown() { 112 table = null; 113 ring = null; 114 a = b = c = d = e = null; 115 } 116 117 118 /** 119 * Test constructor, generators and properties. 120 */ 121 public void testConstructor() { 122 assertFalse("not commutative", ring.isCommutative()); 123 assertTrue("associative", ring.isAssociative()); 124 125 a = new RecSolvableWordPolynomial<BigRational>(ring); 126 assertTrue("length( a ) = 0", a.length() == 0); 127 assertTrue("isZERO( a )", a.isZERO()); 128 assertTrue("isONE( a )", !a.isONE()); 129 130 c = ring.getONE(); 131 assertTrue("length( c ) = 1", c.length() == 1); 132 assertTrue("isZERO( c )", !c.isZERO()); 133 assertTrue("isONE( c )", c.isONE()); 134 135 d = ring.getZERO(); 136 assertTrue("length( d ) = 0", d.length() == 0); 137 assertTrue("isZERO( d )", d.isZERO()); 138 assertTrue("isONE( d )", !d.isONE()); 139 //System.out.println("d = " + d); 140 141 //System.out.println(""); 142 for (GenPolynomial<GenWordPolynomial<BigRational>> g : ring.generators()) { 143 //System.out.print("g = " + g + ", "); 144 assertFalse("not isZERO( g )", g.isZERO()); 145 } 146 //System.out.println(""); 147 } 148 149 150 /** 151 * Test random polynomial. 152 */ 153 public void testRandom() { 154 for (int i = 0; i < 3; i++) { 155 // a = ring.random(ll+2*i); 156 a = ring.random(kl * (i + 1), ll + 2 * i, el + i, q); 157 //System.out.println("a = " + a); 158 assertTrue("length( a" + i + " ) <> 0", a.length() >= 0); 159 assertTrue(" not isZERO( a" + i + " )", !a.isZERO()); 160 assertTrue(" not isONE( a" + i + " )", !a.isONE()); 161 } 162 } 163 164 165 /** 166 * Test addition. 167 */ 168 public void testAddition() { 169 a = ring.random(kl, ll, el, q); 170 c = (RecSolvableWordPolynomial<BigRational>) a.subtract(a); 171 assertTrue("a-a = 0", c.isZERO()); 172 173 b = (RecSolvableWordPolynomial<BigRational>) a.sum(a); 174 c = (RecSolvableWordPolynomial<BigRational>) b.subtract(a); 175 assertEquals("a+a-a = a", c, a); 176 177 b = ring.random(kl, ll, el, q); 178 c = (RecSolvableWordPolynomial<BigRational>) b.sum(a); 179 d = (RecSolvableWordPolynomial<BigRational>) a.sum(b); 180 assertEquals("a+b = b+a", c, d); 181 182 c = ring.random(kl, ll, el, q); 183 d = (RecSolvableWordPolynomial<BigRational>) a.sum(b.sum(c)); 184 e = (RecSolvableWordPolynomial<BigRational>) a.sum(b).sum(c); 185 assertEquals("a+(b+c) = (a+b)+c", d, e); 186 //System.out.println("a = " + a); 187 //System.out.println("b = " + b); 188 //System.out.println("c = " + c); 189 //System.out.println("d = " + d); 190 //System.out.println("e = " + e); 191 192 ExpVector u = ExpVector.EVRAND(rl, el, q); 193 GenWordPolynomial<BigRational> x = cring.random(kl); 194 //System.out.println("x = " + x); 195 //System.out.println("u = " + u); 196 197 b = ring.getONE().multiply(x, u); 198 c = (RecSolvableWordPolynomial<BigRational>) a.sum(b); 199 d = (RecSolvableWordPolynomial<BigRational>) a.sum(x, u); 200 //System.out.println("a = " + a); 201 //System.out.println("b = " + b); 202 //System.out.println("c = " + c); 203 //System.out.println("d = " + d); 204 assertEquals("a+p(x,u) = a+(x,u)", c, d); 205 206 c = (RecSolvableWordPolynomial<BigRational>) a.subtract(b); 207 d = (RecSolvableWordPolynomial<BigRational>) a.subtract(x, u); 208 assertEquals("a-p(x,u) = a-(x,u)", c, d); 209 210 a = ring.getZERO(); 211 b = ring.getONE().multiply(x, u); 212 c = (RecSolvableWordPolynomial<BigRational>) b.sum(a); 213 d = (RecSolvableWordPolynomial<BigRational>) a.sum(x, u); 214 assertEquals("a+p(x,u) = a+(x,u)", c, d); 215 216 c = (RecSolvableWordPolynomial<BigRational>) a.subtract(b); 217 d = (RecSolvableWordPolynomial<BigRational>) a.subtract(x, u); 218 assertEquals("a-p(x,u) = a-(x,u)", c, d); 219 } 220 221 222 /** 223 * Test multiplication. 224 */ 225 public void testMultiplication() { 226 //System.out.println("ring = " + ring); 227 a = ring.random(kl, ll, el, q); 228 //a = ring.parse(" b y z + a w z "); 229 b = ring.random(kl, ll, el, q); 230 //b = ring.parse(" w x - b x "); 231 232 c = b.multiply(a); 233 d = a.multiply(b); 234 //System.out.println("a = " + a); 235 //System.out.println("b = " + b); 236 //System.out.println("c = " + c); 237 //System.out.println("d = " + d); 238 assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector())); 239 240 c = ring.random(kl, ll, el, q); 241 d = a.multiply(b.multiply(c)); 242 e = a.multiply(b).multiply(c); 243 assertEquals("a(bc) = (ab)c", d, e); 244 //System.out.println("a = " + a); 245 //System.out.println("b = " + b); 246 //System.out.println("c = " + c); 247 //System.out.println("d = " + d); 248 //System.out.println("e = " + e); 249 250 BigRational x = a.leadingBaseCoefficient().leadingBaseCoefficient().inverse(); 251 GenWordPolynomial<BigRational> xp = new GenWordPolynomial<BigRational>(cring, x); 252 d = (RecSolvableWordPolynomial<BigRational>) a.multiply(xp); 253 assertTrue("monic(a) = a*(1/ldcf(ldcf(a)))", d.leadingBaseCoefficient().leadingBaseCoefficient() 254 .isONE()); 255 256 d = (RecSolvableWordPolynomial<BigRational>) a.monic(); 257 assertTrue("a.monic(): " + d.leadingBaseCoefficient() + ", " + a.leadingBaseCoefficient(), 258 d.leadingBaseCoefficient().isONE() 259 || d.leadingBaseCoefficient().equals(a.leadingBaseCoefficient().abs())); 260 } 261 262 263 /** 264 * Test commutative ring. 265 */ 266 public void testCommutative() { 267 //System.out.println("table = " + table.toString(vars)); 268 //System.out.println("table = " + table.toScript()); 269 //System.out.println("ring = " + ring); 270 //System.out.println("ring.table = " + ring.table.toScript()); 271 //assertEquals("table == ring.table: ", table, ring.table); // ? 272 assertTrue("# relations == 2", ring.table.size() == 2); 273 274 cring = new GenWordPolynomialRing<BigRational>(cfac, new String[] { "a" }); 275 ring = new RecSolvableWordPolynomialRing<BigRational>(cring, ring); 276 //table = ring.table; 277 //System.out.println("table = " + table.toString(vars)); 278 //System.out.println("ring = " + ring.toScript()); 279 280 assertFalse("isCommutative()", ring.isCommutative()); 281 assertTrue("isAssociative()", ring.isAssociative()); 282 283 a = ring.random(kl, ll, el, q); 284 //a = ring.parse(" b x y z + a w z "); 285 //System.out.println("a = " + a); 286 b = ring.random(kl, ll, el, q); 287 //b = ring.parse(" w y z - b x "); 288 //System.out.println("b = " + b); 289 290 // commutative 291 c = b.multiply(a); 292 //System.out.println("c = " + c); 293 d = a.multiply(b); 294 //d = ring.getONE(); 295 //System.out.println("d = " + d); 296 assertEquals("ba == ab: ", c, d); 297 } 298 299 300 /** 301 * Test distributive law. 302 */ 303 public void testDistributive() { 304 a = ring.random(kl, ll, el, q); 305 b = ring.random(kl, ll, el, q); 306 c = ring.random(kl, ll, el, q); 307 308 d = a.multiply((RecSolvableWordPolynomial<BigRational>) b.sum(c)); 309 e = (RecSolvableWordPolynomial<BigRational>) a.multiply(b).sum(a.multiply(c)); 310 assertEquals("a(b+c) = ab+ac", d, e); 311 } 312 313 314 /** 315 * Test word coefficient ring. 316 */ 317 public void testWordCoeffs() { 318 RecSolvableWordPolynomial<BigRational> r1 = ring.parse("x"); 319 GenWordPolynomial<BigRational> r2 = ring.parse("b").leadingBaseCoefficient(); 320 RecSolvableWordPolynomial<BigRational> rp = ring.parse("b x + a"); 321 //System.out.println("r1 = " + r1); 322 //System.out.println("r2 = " + r2); 323 //System.out.println("rp = " + rp); 324 ring.coeffTable.update(r1.leadingExpVector(), r2.leadingWord().leadingExpVector(), rp); 325 326 //table = ring.table; 327 //System.out.println("ring = " + ring.toScript()); 328 329 assertFalse("isCommutative()", ring.isCommutative()); 330 assertTrue("isAssociative()", ring.isAssociative()); 331 332 List<GenPolynomial<GenWordPolynomial<BigRational>>> gens = ring.generators(); 333 for (GenPolynomial<GenWordPolynomial<BigRational>> x : gens) { 334 GenSolvablePolynomial<GenWordPolynomial<BigRational>> xx = (GenSolvablePolynomial<GenWordPolynomial<BigRational>>) x; 335 a = new RecSolvableWordPolynomial<BigRational>(ring, xx); 336 //System.out.println("a = " + a); 337 for (GenPolynomial<GenWordPolynomial<BigRational>> y : gens) { 338 GenSolvablePolynomial<GenWordPolynomial<BigRational>> yy = (GenSolvablePolynomial<GenWordPolynomial<BigRational>>) y; 339 b = new RecSolvableWordPolynomial<BigRational>(ring, yy); 340 //System.out.println("b = " + b); 341 c = a.multiply(b); 342 //System.out.println("gens:" + a + " * " + b + " = " + c); 343 ExpVector ev = a.leadingExpVector().sum(b.leadingExpVector()); 344 assertTrue("LT(a)*LT(b) == LT(c)", c.leadingExpVector().equals(ev)); 345 Word wv = a.leadingBaseCoefficient().leadingWord() 346 .multiply(b.leadingBaseCoefficient().leadingWord()); 347 assertTrue("LT(a)*LT(b) == LT(c)", c.leadingBaseCoefficient().leadingWord().equals(wv)); 348 } 349 } 350 351 a = ring.random(kl, ll, el, q); 352 //a = ring.getONE(); 353 //System.out.println("a = " + a); 354 b = ring.random(kl, ll, el, q); 355 //b = ring.getONE(); 356 //System.out.println("b = " + b); 357 358 // non-commutative 359 c = b.multiply(a); 360 d = a.multiply(b); 361 //System.out.println("c = " + c); 362 //System.out.println("d = " + d); 363 assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector())); 364 365 // relation table list tests 366 //System.out.println("ring.table.rels = " + ring.table.relationList()); 367 //System.out.println("ring.coeffTable.rels = " + ring.coeffTable.relationList()); 368 369 RecSolvableWordPolynomialRing<BigRational> ring2 = new RecSolvableWordPolynomialRing<BigRational>( 370 ring.coFac, ring); 371 ring2.table.addSolvRelations(ring.table.relationList()); 372 ring2.coeffTable.addSolvRelations(ring.coeffTable.relationList()); 373 374 //System.out.println("ring2.table.rels = " + ring2.table.relationList()); 375 //System.out.println("ring2.coeffTable.rels = " + ring2.coeffTable.relationList()); 376 assertEquals("ring.table == ring2.table: ", ring.table, ring2.table); 377 assertEquals("ring.coeffTable == ring2.coeffTable: ", ring.coeffTable, ring2.coeffTable); 378 } 379 380}