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