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