001 002 /* 003 * $Id: QuotIntPolynomialTest.java 3356 2010-10-23 16:41:01Z kredel $ 004 */ 005 006 package edu.jas.ufd; 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 import edu.jas.kern.PrettyPrint; 020 import edu.jas.kern.ComputerThreads; 021 022 import edu.jas.poly.GenPolynomial; 023 import edu.jas.poly.GenPolynomialRing; 024 import edu.jas.poly.TermOrder; 025 026 027 /** 028 * Quotient BigInteger coefficient GenPolynomial tests with JUnit. 029 * @author Heinz Kredel. 030 */ 031 032 public class QuotIntPolynomialTest extends TestCase { 033 034 /** 035 * main. 036 */ 037 public static void main (String[] args) { 038 BasicConfigurator.configure(); 039 junit.textui.TestRunner.run( suite() ); 040 ComputerThreads.terminate(); 041 } 042 043 /** 044 * Constructs a <CODE>QoutIntPolynomialTest</CODE> object. 045 * @param name String. 046 */ 047 public QuotIntPolynomialTest(String name) { 048 super(name); 049 } 050 051 /** 052 * suite. 053 */ 054 public static Test suite() { 055 TestSuite suite= new TestSuite(QuotIntPolynomialTest.class); 056 return suite; 057 } 058 059 //private final static int bitlen = 100; 060 061 QuotientRing<BigInteger> eFac; 062 GenPolynomialRing<BigInteger> mfac; 063 GenPolynomialRing<Quotient<BigInteger>> qfac; 064 065 GenPolynomial< Quotient<BigInteger> > a; 066 GenPolynomial< Quotient<BigInteger> > b; 067 GenPolynomial< Quotient<BigInteger> > c; 068 GenPolynomial< Quotient<BigInteger> > d; 069 GenPolynomial< Quotient<BigInteger> > e; 070 071 int rl = 3; 072 int kl = 2; // degree of coefficient polynomials!!! 073 int ll = 4; //6; 074 int el = 3; 075 float q = 0.3f; 076 077 protected void setUp() { 078 a = b = c = d = e = null; 079 TermOrder to = new TermOrder( TermOrder.INVLEX ); 080 String[] cv = new String[] { "a", "b", "c" }; 081 BigInteger cfac = new BigInteger(1); 082 mfac = new GenPolynomialRing<BigInteger>( cfac, rl, to, cv ); 083 eFac = new QuotientRing<BigInteger>( mfac ); 084 String[] v = new String[] { "w", "x", "y", "z" }; 085 qfac = new GenPolynomialRing<Quotient<BigInteger>>( eFac, rl+1, v ); 086 } 087 088 protected void tearDown() { 089 a = b = c = d = e = null; 090 //eFac.terminate(); 091 eFac = null; 092 mfac = null; 093 qfac = null; 094 ComputerThreads.terminate(); 095 } 096 097 098 /** 099 * Test constructor and toString. 100 * 101 */ 102 public void testConstruction() { 103 c = qfac.getONE(); 104 //System.out.println("c = " + c); 105 //System.out.println("c.val = " + c.val); 106 assertTrue("length( c ) = 1", c.length() == 1); 107 assertTrue("isZERO( c )", !c.isZERO() ); 108 assertTrue("isONE( c )", c.isONE() ); 109 110 d = qfac.getZERO(); 111 //System.out.println("d = " + d); 112 //System.out.println("d.val = " + d.val); 113 assertTrue("length( d ) = 0", d.length() == 0); 114 assertTrue("isZERO( d )", d.isZERO() ); 115 assertTrue("isONE( d )", !d.isONE() ); 116 } 117 118 119 /** 120 * Test random polynomial. 121 * 122 */ 123 public void testRandom() { 124 for (int i = 0; i < 3; i++) { 125 //a = qfac.random(ll+i); 126 a = qfac.random(kl, ll+i, el, q ); 127 //System.out.println("a["+i+"] = " + a); 128 if ( a.isZERO() || a.isONE() ) { 129 continue; 130 } 131 assertTrue("length( a"+i+" ) <> 0", a.length() >= 0); 132 assertTrue(" not isZERO( a"+i+" )", !a.isZERO() ); 133 assertTrue(" not isONE( a"+i+" )", !a.isONE() ); 134 135 b = a.monic(); 136 Quotient<BigInteger> ldbcf = b.leadingBaseCoefficient(); 137 //System.out.println("b["+i+"] = " + b); 138 assertTrue("ldbcf( b"+i+" ) == 1 " + b + ", a = " + a, ldbcf.isONE()); 139 } 140 } 141 142 143 /** 144 * Test addition. 145 * 146 */ 147 public void testAddition() { 148 149 a = qfac.random(kl,ll,el,q); 150 b = qfac.random(kl,ll,el,q); 151 //System.out.println("a = " + a); 152 //System.out.println("b = " + b); 153 //System.out.println("a = " + a.toString( qfac.getVars() )); 154 //System.out.println("b = " + b.toString( qfac.getVars() )); 155 156 c = a.sum(b); 157 d = c.subtract(b); 158 assertEquals("a+b-b = a",a,d); 159 160 c = a.sum(b); 161 d = b.sum(a); 162 //System.out.println("c = " + c.toString( qfac.getVars() )); 163 //System.out.println("c = " + c); 164 //System.out.println("d = " + d); 165 166 assertEquals("a+b = b+a",c,d); 167 168 c = qfac.random(kl,ll,el,q); 169 d = c.sum( a.sum(b) ); 170 e = c.sum( a ).sum(b); 171 assertEquals("c+(a+b) = (c+a)+b",d,e); 172 173 174 c = a.sum( qfac.getZERO() ); 175 d = a.subtract( qfac.getZERO() ); 176 assertEquals("a+0 = a-0",c,d); 177 178 c = qfac.getZERO().sum( a ); 179 d = qfac.getZERO().subtract( a.negate() ); 180 assertEquals("0+a = 0+(-a)",c,d); 181 } 182 183 184 /** 185 * Test object multiplication. 186 * 187 */ 188 public void testMultiplication() { 189 190 a = qfac.random(kl,ll,el,q); 191 //assertTrue("not isZERO( a )", !a.isZERO() ); 192 193 b = qfac.random(kl,ll,el,q); 194 //assertTrue("not isZERO( b )", !b.isZERO() ); 195 196 c = b.multiply(a); 197 d = a.multiply(b); 198 if ( !a.isZERO() && !b.isZERO() ) { 199 assertTrue("not isZERO( c )", !c.isZERO() ); 200 assertTrue("not isZERO( d )", !d.isZERO() ); 201 } 202 203 //System.out.println("a = " + a); 204 //System.out.println("b = " + b); 205 e = d.subtract(c); 206 assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO() ); 207 208 assertTrue("a*b = b*a", c.equals(d) ); 209 assertEquals("a*b = b*a",c,d); 210 211 c = qfac.random(kl,ll,el,q); 212 //System.out.println("c = " + c); 213 d = a.multiply( b.multiply(c) ); 214 e = (a.multiply(b)).multiply(c); 215 216 //System.out.println("d = " + d); 217 //System.out.println("e = " + e); 218 219 //System.out.println("d-e = " + d.subtract(c) ); 220 221 assertEquals("a(bc) = (ab)c",d,e); 222 assertTrue("a(bc) = (ab)c", d.equals(e) ); 223 224 c = a.multiply( qfac.getONE() ); 225 d = qfac.getONE().multiply( a ); 226 assertEquals("a*1 = 1*a",c,d); 227 228 if ( a.isUnit() ) { 229 c = a.inverse(); 230 d = c.multiply(a); 231 //System.out.println("a = " + a); 232 //System.out.println("c = " + c); 233 //System.out.println("d = " + d); 234 assertTrue("a*1/a = 1",d.isONE()); 235 } 236 } 237 238 239 /** 240 * Test parse(). 241 * 242 */ 243 public void testParse() { 244 a = qfac.random(kl,ll*2,el*2,q*2); 245 //assertTrue("not isZERO( a )", !a.isZERO() ); 246 247 //PrettyPrint.setInternal(); 248 //System.out.println("a = " + a); 249 PrettyPrint.setPretty(); 250 //System.out.println("a = " + a); 251 String p = a.toString( qfac.getVars() ); 252 //System.out.println("p = " + p); 253 b = qfac.parse(p); 254 //System.out.println("b = " + b.toString( qfac.getVars() ) ); 255 256 //c = a.subtract(b); 257 //System.out.println("c = " + c); 258 assertEquals("parse(a.toSting()) = a",a,b); 259 } 260 261 }