001/* 002 * $Id: RatGenSolvablePolynomialTest.java 5042 2014-12-29 12:32:59Z 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; 052 053 054 GenSolvablePolynomial<BigRational> b; 055 056 057 GenSolvablePolynomial<BigRational> c; 058 059 060 GenSolvablePolynomial<BigRational> d; 061 062 063 GenSolvablePolynomial<BigRational> e; 064 065 066 GenSolvablePolynomial<BigRational> f; 067 068 069 GenSolvablePolynomial<BigRational> x1; 070 071 072 GenSolvablePolynomial<BigRational> x2; 073 074 075 int rl = 5; 076 077 078 int kl = 10; 079 080 081 int ll = 5; 082 083 084 int el = 3; 085 086 087 float q = 0.5f; 088 089 090 RelationTable<BigRational> table; 091 092 093 GenSolvablePolynomialRing<BigRational> ring; 094 095 096 BigRational cfac; 097 098 099 @Override 100 protected void setUp() { 101 cfac = new BigRational(1); 102 ring = new GenSolvablePolynomialRing<BigRational>(cfac, rl); 103 table = ring.table; 104 a = b = c = d = e = null; 105 } 106 107 108 @Override 109 protected void tearDown() { 110 table = null; 111 ring = null; 112 a = b = c = d = e = null; 113 } 114 115 116 /** 117 * Test constructor and toString. 118 */ 119 public void testConstructor() { 120 a = new GenSolvablePolynomial<BigRational>(ring); 121 assertTrue("length( a ) = 0", a.length() == 0); 122 assertTrue("isZERO( a )", a.isZERO()); 123 assertTrue("isONE( a )", !a.isONE()); 124 125 c = ring.getONE(); 126 assertTrue("length( c ) = 1", c.length() == 1); 127 assertTrue("isZERO( c )", !c.isZERO()); 128 assertTrue("isONE( c )", c.isONE()); 129 130 d = ring.getZERO(); 131 assertTrue("length( d ) = 0", d.length() == 0); 132 assertTrue("isZERO( d )", d.isZERO()); 133 assertTrue("isONE( d )", !d.isONE()); 134 } 135 136 137 /** 138 * Test random polynomial. 139 */ 140 public void testRandom() { 141 assertTrue("isCommutative()", ring.isCommutative()); 142 143 for (int i = 0; i < 2; i++) { 144 // a = ring.random(ll+2*i); 145 a = ring.random(kl * (i + 1), ll + 2 * i, el + i, q); 146 assertTrue("length( a" + i + " ) <> 0", a.length() >= 0); 147 assertTrue(" not isZERO( a" + i + " )", !a.isZERO()); 148 assertTrue(" not isONE( a" + i + " )", !a.isONE()); 149 } 150 } 151 152 153 /** 154 * Test addition. 155 */ 156 public void testAddition() { 157 a = ring.random(kl, ll, el, q); 158 159 c = (GenSolvablePolynomial<BigRational>) a.subtract(a); 160 assertTrue("a-a = 0", c.isZERO()); 161 162 b = (GenSolvablePolynomial<BigRational>) a.sum(a); 163 c = (GenSolvablePolynomial<BigRational>) b.subtract(a); 164 165 assertEquals("a+a-a = a", c, a); 166 assertTrue("a+a-a = a", c.equals(a)); 167 168 b = ring.random(kl, ll, el, q); 169 c = (GenSolvablePolynomial<BigRational>) b.sum(a); 170 d = (GenSolvablePolynomial<BigRational>) a.sum(b); 171 172 assertEquals("a+b = b+a", c, d); 173 assertTrue("a+b = b+a", c.equals(d)); 174 175 c = ring.random(kl, ll, el, q); 176 d = (GenSolvablePolynomial<BigRational>) a.sum(b.sum(c)); 177 e = (GenSolvablePolynomial<BigRational>) a.sum(b).sum(c); 178 179 assertEquals("a+(b+c) = (a+b)+c", d, e); 180 assertTrue("a+(b+c) = (a+b)+c", d.equals(e)); 181 182 ExpVector u = ExpVector.EVRAND(rl, el, q); 183 BigRational x = cfac.random(kl); 184 185 b = ring.getONE().multiply(x, u); 186 c = (GenSolvablePolynomial<BigRational>) a.sum(b); 187 d = (GenSolvablePolynomial<BigRational>) a.sum(x, u); 188 assertEquals("a+p(x,u) = a+(x,u)", c, d); 189 190 c = (GenSolvablePolynomial<BigRational>) a.subtract(b); 191 d = (GenSolvablePolynomial<BigRational>) a.subtract(x, u); 192 assertEquals("a-p(x,u) = a-(x,u)", c, d); 193 194 a = ring.getZERO(); 195 b = ring.getONE().multiply(x, u); 196 c = (GenSolvablePolynomial<BigRational>) b.sum(a); 197 d = (GenSolvablePolynomial<BigRational>) a.sum(x, u); 198 assertEquals("a+p(x,u) = a+(x,u)", c, d); 199 200 c = (GenSolvablePolynomial<BigRational>) a.subtract(b); 201 d = (GenSolvablePolynomial<BigRational>) a.subtract(x, u); 202 assertEquals("a-p(x,u) = a-(x,u)", c, d); 203 } 204 205 206 /** 207 * Test object multiplication. 208 */ 209 @SuppressWarnings("cast") 210 public void testMultiplication() { 211 a = ring.random(kl, ll, el, q); 212 assertTrue("not isZERO( a )", !a.isZERO()); 213 //a = RatGenSolvablePolynomial.DIRRAS(1, kl, 4, el, q ); 214 215 b = ring.random(kl, ll, el, q); 216 assertTrue("not isZERO( b )", !b.isZERO()); 217 218 c = b.multiply(a); 219 d = a.multiply(b); 220 assertTrue("not isZERO( c )", !c.isZERO()); 221 assertTrue("not isZERO( d )", !d.isZERO()); 222 223 e = (GenSolvablePolynomial<BigRational>) d.subtract(c); 224 assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO()); 225 226 assertEquals("a*b = b*a", c, d); 227 assertTrue("a*b = b*a", c.equals(d)); 228 229 c = ring.random(kl, ll, el, q); 230 d = a.multiply(b.multiply(c)); 231 e = (a.multiply(b)).multiply(c); 232 233 assertEquals("a(bc) = (ab)c", d, e); 234 assertTrue("a(bc) = (ab)c", d.equals(e)); 235 236 BigRational x = a.leadingBaseCoefficient().inverse(); 237 c = (GenSolvablePolynomial<BigRational>) a.monic(); 238 d = a.multiply(x); 239 assertEquals("a.monic() = a(1/ldcf(a))", c, d); 240 241 ExpVector u = ring.evzero; 242 BigRational y = b.leadingBaseCoefficient().inverse(); 243 c = (GenSolvablePolynomial<BigRational>) b.monic(); 244 d = b.multiply(y, u); 245 assertEquals("b.monic() = b(1/ldcf(b))", c, d); 246 247 e = ring.getONE().multiply(y, u); 248 d = b.multiply(e); 249 assertEquals("b.monic() = b(1/ldcf(b))", c, d); 250 251 d = e.multiply(b); 252 assertEquals("b.monic() = (1/ldcf(b) (0))*b", c, d); 253 254 d = a.monic(); 255 assertTrue("a.monic(): ", d.leadingBaseCoefficient().isONE()); 256 } 257 258 259 /** 260 * Test Weyl polynomials. 261 */ 262 public void testWeyl() { 263 int rloc = 4; 264 ring = new GenSolvablePolynomialRing<BigRational>(cfac, rloc); 265 266 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 267 wl.generate(ring); 268 table = ring.table; 269 //System.out.println("table = " + table); 270 //System.out.println("ring = " + ring); 271 272 assertFalse("isCommutative()", ring.isCommutative()); 273 assertTrue("isAssociative()", ring.isAssociative()); 274 275 a = ring.random(kl, ll, el, q); 276 assertTrue("not isZERO( a )", !a.isZERO()); 277 //System.out.println("a = " + a); 278 279 b = ring.random(kl, ll, el, q); 280 assertTrue("not isZERO( b )", !b.isZERO()); 281 //System.out.println("b = " + b); 282 283 284 // non commutative 285 c = b.multiply(a); 286 d = a.multiply(b); 287 //System.out.println("c = " + c); 288 //System.out.println("d = " + d); 289 assertTrue("not isZERO( c )", !c.isZERO()); 290 assertTrue("not isZERO( d )", !d.isZERO()); 291 292 e = (GenSolvablePolynomial<BigRational>) d.subtract(c); 293 assertTrue("!isZERO( a*b-b*a ) " + e, !e.isZERO()); 294 assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector())); 295 296 c = ring.random(kl, ll, el, q); 297 //System.out.println("\na = " + a); 298 //System.out.println("\nb = " + b); 299 //System.out.println("\nc = " + c); 300 301 // associative 302 //x1 = b.multiply(c); 303 //System.out.println("\nx1 = " + x1); 304 d = a.multiply(b.multiply(c)); 305 306 //x2 = a.multiply(b); 307 //System.out.println("\nx2 = " + x2); 308 e = a.multiply(b).multiply(c); 309 310 //System.out.println("\nd = " + d); 311 //System.out.println("\ne = " + e); 312 313 //f = (GenSolvablePolynomial<BigRational>)d.subtract(e); 314 //System.out.println("\nf = " + f); 315 316 assertEquals("a(bc) = (ab)c", d, e); 317 assertTrue("a(bc) = (ab)c", d.equals(e)); 318 } 319 320 321 /** 322 * Test distributive law. 323 */ 324 public void testDistributive() { 325 int rloc = 4; 326 ring = new GenSolvablePolynomialRing<BigRational>(cfac, rloc); 327 328 RelationGenerator<BigRational> wl = new WeylRelations<BigRational>(); 329 wl.generate(ring); 330 //table = ring.table; 331 //System.out.println("table = " + table); 332 //System.out.println("ring = " + ring); 333 334 a = ring.random(kl, ll, el, q); 335 b = ring.random(kl, ll, el, q); 336 c = ring.random(kl, ll, el, q); 337 338 d = a.multiply((GenSolvablePolynomial<BigRational>) b.sum(c)); 339 e = (GenSolvablePolynomial<BigRational>) a.multiply(b).sum(a.multiply(c)); 340 341 assertEquals("a(b+c) = ab+ac", d, e); 342 } 343}