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