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