001 002 /* 003 * $Id: ResidueTest.java 3366 2010-10-24 13:02:14Z kredel $ 004 */ 005 006 package edu.jas.poly; 007 008 //import java.util.ArrayList; 009 //import java.util.List; 010 011 import junit.framework.Test; 012 import junit.framework.TestCase; 013 import junit.framework.TestSuite; 014 015 import org.apache.log4j.BasicConfigurator; 016 //import org.apache.log4j.Logger; 017 018 import edu.jas.arith.BigRational; 019 import edu.jas.arith.BigInteger; 020 021 //import edu.jas.structure.RingElem; 022 023 024 025 /** 026 * Residue test with JUnit. 027 * @author Heinz Kredel. 028 */ 029 030 public class ResidueTest extends TestCase { 031 032 /** 033 * main. 034 */ 035 public static void main (String[] args) { 036 BasicConfigurator.configure(); 037 junit.textui.TestRunner.run( suite() ); 038 } 039 040 /** 041 * Constructs a <CODE>ResidueTest</CODE> object. 042 * @param name String. 043 */ 044 public ResidueTest(String name) { 045 super(name); 046 } 047 048 /** 049 * suite. 050 */ 051 public static Test suite() { 052 TestSuite suite= new TestSuite(ResidueTest.class); 053 return suite; 054 } 055 056 ResidueRing<BigInteger> fac; 057 GenPolynomialRing<BigRational> pfac; 058 ResidueRing< GenPolynomial<BigRational> > mfac; 059 060 Residue< BigInteger > a; 061 Residue< BigInteger > b; 062 Residue< BigInteger > c; 063 Residue< BigInteger > d; 064 Residue< BigInteger > e; 065 066 Residue< GenPolynomial<BigRational> > ap; 067 Residue< GenPolynomial<BigRational> > bp; 068 Residue< GenPolynomial<BigRational> > cp; 069 Residue< GenPolynomial<BigRational> > dp; 070 Residue< GenPolynomial<BigRational> > ep; 071 072 073 int rl = 1; 074 int kl = 13; 075 int ll = 7; 076 int el = 3; 077 float q = 0.4f; 078 int il = 2; 079 long p = 1152921504606846883L; // 2^60-93; 080 081 @Override 082 protected void setUp() { 083 a = b = c = d = e = null; 084 ap = bp = cp = dp = ep = null; 085 BigInteger cfac = new BigInteger(1); 086 fac = new ResidueRing<BigInteger>( cfac, new BigInteger( p ) ); 087 pfac = new GenPolynomialRing<BigRational>( new BigRational(1), 1 ); 088 GenPolynomial<BigRational> mo = pfac.random(kl,ll,el,q); 089 while ( mo.isConstant() ) { 090 mo = pfac.random(kl,ll,el,q); 091 } 092 mfac = new ResidueRing<GenPolynomial<BigRational>>( pfac, mo ); 093 } 094 095 @Override 096 protected void tearDown() { 097 a = b = c = d = e = null; 098 ap = bp = cp = dp = ep = null; 099 fac = null; 100 pfac = null; 101 mfac = null; 102 } 103 104 105 /** 106 * Test constructor for integer. 107 * 108 */ 109 public void testIntConstruction() { 110 c = fac.getONE(); 111 //System.out.println("c = " + c); 112 assertTrue("isZERO( c )", !c.isZERO() ); 113 assertTrue("isONE( c )", c.isONE() ); 114 115 d = fac.getZERO(); 116 //System.out.println("d = " + d); 117 assertTrue("isZERO( d )", d.isZERO() ); 118 assertTrue("isONE( d )", !d.isONE() ); 119 } 120 121 122 /** 123 * Test constructor for polynomial. 124 * 125 */ 126 public void testPolyConstruction() { 127 cp = mfac.getONE(); 128 assertTrue("isZERO( cp )", !cp.isZERO() ); 129 assertTrue("isONE( cp )", cp.isONE() ); 130 131 dp = mfac.getZERO(); 132 assertTrue("isZERO( dp )", dp.isZERO() ); 133 assertTrue("isONE( dp )", !dp.isONE() ); 134 } 135 136 137 /** 138 * Test random integer. 139 * 140 */ 141 public void testIntRandom() { 142 for (int i = 0; i < 7; i++) { 143 a = fac.random(kl*(i+1)); 144 if ( a.isZERO() ) { 145 continue; 146 } 147 //a = fac.random(kl*(i+1), ll+2*i, el+i, q ); 148 //System.out.println("a = " + a); 149 assertTrue(" not isZERO( a"+i+" )", !a.isZERO() ); 150 assertTrue(" not isONE( a"+i+" )", !a.isONE() ); 151 } 152 } 153 154 155 /** 156 * Test random polynomial. 157 * 158 */ 159 public void testPolyRandom() { 160 for (int i = 0; i < 7; i++) { 161 ap = mfac.random(kl+i); 162 if ( ap.isZERO() ) { 163 continue; 164 } 165 assertTrue(" not isZERO( ap"+i+" )", !ap.isZERO() ); 166 assertTrue(" not isONE( ap"+i+" )", !ap.isONE() ); 167 } 168 } 169 170 171 /** 172 * Test integer addition. 173 * 174 */ 175 public void testIntAddition() { 176 177 a = fac.random(kl); 178 b = fac.random(kl); 179 180 c = a.sum(b); 181 d = c.subtract(b); 182 assertEquals("a+b-b = a",a,d); 183 184 c = a.sum(b); 185 d = b.sum(a); 186 assertEquals("a+b = b+a",c,d); 187 188 c = fac.random(kl); 189 d = c.sum( a.sum(b) ); 190 e = c.sum( a ).sum(b); 191 assertEquals("c+(a+b) = (c+a)+b",d,e); 192 193 194 c = a.sum( fac.getZERO() ); 195 d = a.subtract( fac.getZERO() ); 196 assertEquals("a+0 = a-0",c,d); 197 198 c = fac.getZERO().sum( a ); 199 d = fac.getZERO().subtract( a.negate() ); 200 assertEquals("0+a = 0+(-a)",c,d); 201 } 202 203 204 /** 205 * Test polynomial addition. 206 * 207 */ 208 public void testPolyAddition() { 209 210 ap = mfac.random(kl); 211 bp = mfac.random(kl); 212 //System.out.println("a = " + a); 213 //System.out.println("b = " + b); 214 215 cp = ap.sum(bp); 216 dp = cp.subtract(bp); 217 assertEquals("a+b-b = a",ap,dp); 218 219 cp = ap.sum(bp); 220 dp = bp.sum(ap); 221 //System.out.println("c = " + c); 222 //System.out.println("d = " + d); 223 224 assertEquals("a+b = b+a",cp,dp); 225 226 cp = mfac.random(kl); 227 dp = cp.sum( ap.sum(bp) ); 228 ep = cp.sum( ap ).sum(bp); 229 assertEquals("c+(a+b) = (c+a)+b",dp,ep); 230 231 232 cp = ap.sum( mfac.getZERO() ); 233 dp = ap.subtract( mfac.getZERO() ); 234 assertEquals("a+0 = a-0",cp,dp); 235 236 cp = mfac.getZERO().sum( ap ); 237 dp = mfac.getZERO().subtract( ap.negate() ); 238 assertEquals("0+a = 0+(-a)",cp,dp); 239 } 240 241 242 /** 243 * Test integer multiplication. 244 * 245 */ 246 247 public void testIntMultiplication() { 248 249 a = fac.random(kl); 250 if ( a.isZERO() ) { 251 return; 252 } 253 assertTrue("not isZERO( a )", !a.isZERO() ); 254 255 b = fac.random(kl); 256 if ( b.isZERO() ) { 257 return; 258 } 259 assertTrue("not isZERO( b )", !b.isZERO() ); 260 261 c = b.multiply(a); 262 d = a.multiply(b); 263 assertTrue("not isZERO( c )", !c.isZERO() ); 264 assertTrue("not isZERO( d )", !d.isZERO() ); 265 266 //System.out.println("a = " + a); 267 //System.out.println("b = " + b); 268 e = d.subtract(c); 269 assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO() ); 270 271 assertTrue("a*b = b*a", c.equals(d) ); 272 assertEquals("a*b = b*a",c,d); 273 274 c = fac.random(kl); 275 //System.out.println("c = " + c); 276 d = a.multiply( b.multiply(c) ); 277 e = (a.multiply(b)).multiply(c); 278 279 //System.out.println("d = " + d); 280 //System.out.println("e = " + e); 281 282 //System.out.println("d-e = " + d.subtract(c) ); 283 284 assertEquals("a(bc) = (ab)c",d,e); 285 assertTrue("a(bc) = (ab)c", d.equals(e) ); 286 287 c = a.multiply( fac.getONE() ); 288 d = fac.getONE().multiply( a ); 289 assertEquals("a*1 = 1*a",c,d); 290 291 if ( a.isUnit() ) { 292 c = a.inverse(); 293 d = c.multiply(a); 294 //System.out.println("a = " + a); 295 //System.out.println("c = " + c); 296 //System.out.println("d = " + d); 297 assertTrue("a*1/a = 1",d.isONE()); 298 } 299 } 300 301 302 /** 303 * Test polynomial multiplication. 304 * 305 */ 306 public void testPolyMultiplication() { 307 308 ap = mfac.random(kl); 309 if ( ap.isZERO() ) { 310 return; 311 } 312 assertTrue("not isZERO( a )", !ap.isZERO() ); 313 314 bp = mfac.random(kl); 315 if ( bp.isZERO() ) { 316 return; 317 } 318 assertTrue("not isZERO( b )", !bp.isZERO() ); 319 320 cp = bp.multiply(ap); 321 dp = ap.multiply(bp); 322 assertTrue("not isZERO( c )", !cp.isZERO() ); 323 assertTrue("not isZERO( d )", !dp.isZERO() ); 324 325 //System.out.println("a = " + a); 326 //System.out.println("b = " + b); 327 ep = dp.subtract(cp); 328 assertTrue("isZERO( a*b-b*a ) " + ep, ep.isZERO() ); 329 330 assertTrue("a*b = b*a", cp.equals(dp) ); 331 assertEquals("a*b = b*a",cp,dp); 332 333 cp = mfac.random(kl); 334 //System.out.println("c = " + c); 335 dp = ap.multiply( bp.multiply(cp) ); 336 ep = (ap.multiply(bp)).multiply(cp); 337 338 //System.out.println("d = " + d); 339 //System.out.println("e = " + e); 340 341 //System.out.println("d-e = " + d.subtract(c) ); 342 343 assertEquals("a(bc) = (ab)c",dp,ep); 344 assertTrue("a(bc) = (ab)c", dp.equals(ep) ); 345 346 cp = ap.multiply( mfac.getONE() ); 347 dp = mfac.getONE().multiply( ap ); 348 assertEquals("a*1 = 1*a",cp,dp); 349 350 if ( ap.isUnit() ) { 351 cp = ap.inverse(); 352 dp = cp.multiply(ap); 353 //System.out.println("a = " + a); 354 //System.out.println("c = " + c); 355 //System.out.println("d = " + d); 356 assertTrue("a*1/a = 1",dp.isONE()); 357 } 358 } 359 360 361 }