001/* 002 * $Id: IntGenPolynomialTest.java 5949 2018-10-28 11:33:58Z kredel $ 003 */ 004 005package edu.jas.poly; 006 007import junit.framework.Test; 008import junit.framework.TestCase; 009import junit.framework.TestSuite; 010 011import edu.jas.poly.GenPolynomial; 012import edu.jas.arith.BigInteger; 013 014 015/** 016 * BigInteger coefficients GenPolynomial tests with JUnit. 017 * @author Heinz Kredel 018 */ 019 020public class IntGenPolynomialTest extends TestCase { 021 022 /** 023 * main. 024 */ 025 public static void main (String[] args) { 026 junit.textui.TestRunner.run( suite() ); 027 } 028 029 /** 030 * Constructs a <CODE>IntGenPolynomialTest</CODE> object. 031 * @param name String. 032 */ 033 public IntGenPolynomialTest(String name) { 034 super(name); 035 } 036 037 /** 038 */ 039 public static Test suite() { 040 TestSuite suite= new TestSuite(IntGenPolynomialTest.class); 041 return suite; 042 } 043 044 GenPolynomialRing<BigInteger> fac; 045 046 GenPolynomial<BigInteger> a, b, c, d, e; 047 048 int rl = 7; 049 int kl = 10; 050 int ll = 10; 051 int el = 5; 052 float q = 0.3f; 053 054 protected void setUp() { 055 a = b = c = d = e = null; 056 fac = new GenPolynomialRing<BigInteger>(new BigInteger(1),rl); 057 } 058 059 protected void tearDown() { 060 a = b = c = d = e = null; 061 fac = null; 062 } 063 064 065 /** 066 * Test constructor and toString. 067 */ 068 public void testConstruction() { 069 c = fac.getONE(); 070 assertTrue("length( c ) = 1", c.length() == 1); 071 assertTrue("isZERO( c )", !c.isZERO() ); 072 assertTrue("isONE( c )", c.isONE() ); 073 074 d = fac.getZERO(); 075 assertTrue("length( d ) = 0", d.length() == 0); 076 assertTrue("isZERO( d )", d.isZERO() ); 077 assertTrue("isONE( d )", !d.isONE() ); 078 } 079 080 081 /** 082 * Test random polynomial. 083 */ 084 public void testRandom() { 085 for (int i = 0; i < 7; i++) { 086 a = fac.random(kl*(i+2),ll+2*i,el+i,q); 087 assertTrue("length( a"+i+" ) <> 0", a.length() >= 0); 088 assertTrue(" not isZERO( a"+i+" )", !a.isZERO() ); 089 assertTrue(" not isONE( a"+i+" )", !a.isONE() ); 090 } 091 } 092 093 094 /** 095 * Test addition. 096 */ 097 public void testAddition() { 098 a = fac.random(kl,ll,el,q); 099 b = fac.random(kl,ll,el,q); 100 101 c = a.sum(b); 102 d = c.subtract(b); 103 assertEquals("a+b-b = a",a,d); 104 105 c = fac.random(kl,ll,el,q); 106 107 ExpVector u = ExpVector.random(rl,el,q); 108 BigInteger x = BigInteger.IRAND(kl); 109 110 b = new GenPolynomial<BigInteger>(fac,x, u); 111 c = a.sum(b); 112 d = a.sum(x,u); 113 assertEquals("a+p(x,u) = a+(x,u)",c,d); 114 115 c = a.subtract(b); 116 d = a.subtract(x,u); 117 assertEquals("a-p(x,u) = a-(x,u)",c,d); 118 119 a = new GenPolynomial<BigInteger>(fac); 120 b = new GenPolynomial<BigInteger>(fac,x, u); 121 c = b.sum(a); 122 d = a.sum(x,u); 123 assertEquals("a+p(x,u) = a+(x,u)",c,d); 124 125 c = a.subtract(b); 126 d = a.subtract(x,u); 127 assertEquals("a-p(x,u) = a-(x,u)",c,d); 128 } 129 130 131 /** 132 * Test object multiplication. 133 */ 134 public void testMultiplication() { 135 a = fac.random(kl,ll,el,q); 136 assertTrue("not isZERO( a )", !a.isZERO() ); 137 138 b = fac.random(kl,ll,el,q); 139 assertTrue("not isZERO( b )", !b.isZERO() ); 140 141 c = b.multiply(a); 142 d = a.multiply(b); 143 assertTrue("not isZERO( c )", !c.isZERO() ); 144 assertTrue("not isZERO( d )", !d.isZERO() ); 145 146 //System.out.println("a = " + a); 147 //System.out.println("b = " + b); 148 e = d.subtract(c); 149 assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO() ); 150 151 assertTrue("a*b = b*a", c.equals(d) ); 152 assertEquals("a*b = b*a",c,d); 153 154 c = fac.random(kl,ll,el,q); 155 //System.out.println("c = " + c); 156 d = a.multiply( b.multiply(c) ); 157 e = (a.multiply(b)).multiply(c); 158 //System.out.println("d = " + d); 159 //System.out.println("e = " + e); 160 //System.out.println("d-e = " + d.subtract(c) ); 161 assertEquals("a(bc) = (ab)c",d,e); 162 assertTrue("a(bc) = (ab)c", d.equals(e) ); 163 164 //BigInteger x = a.leadingBaseCoefficient().inverse(); 165 //c = a.monic(); 166 //d = a.multiply(x); 167 //assertEquals("a.monic() = a(1/ldcf(a))",c,d); 168 169 BigInteger y = b.leadingBaseCoefficient(); 170 //c = b.monic(); 171 //d = b.multiply(y); 172 //assertEquals("b.monic() = b(1/ldcf(b))",c,d); 173 174 e = new GenPolynomial<BigInteger>(fac,y); 175 c = b.multiply(e); 176 // assertEquals("b.monic() = b(1/ldcf(b))",c,d); 177 178 d = e.multiply(b); 179 assertEquals("b*p(y,u) = p(y,u)*b",c,d); 180 } 181 182 183 /** 184 * Test BLAS level 1. 185 */ 186 public void testBLAS1() { 187 a = fac.random(kl,ll,el,q); 188 b = fac.random(kl,ll,el,q); 189 ExpVector ev = ExpVector.random(rl,el,q); 190 BigInteger lc = BigInteger.IRAND(kl); 191 192 d = a.subtractMultiple(lc,b); 193 e = a.subtract( b.multiply(lc) ); 194 assertEquals("a - (lc) b == a - ((lc) b)",d,e); 195 196 d = a.subtractMultiple(lc,ev,b); 197 e = a.subtract( b.multiply(lc,ev) ); 198 assertEquals("a - (lc ev) b == a - ((lc ev) b)",d,e); 199 200 ExpVector fv = ExpVector.random(rl,el,q); 201 BigInteger tc = BigInteger.IRAND(kl); 202 203 d = a.scaleSubtractMultiple(tc,lc,ev,b); 204 e = a.multiply(tc).subtract( b.multiply(lc,ev) ); 205 assertEquals("(tc) a - (lc ev) b == ((tc) a - ((lc ev) b))",d,e); 206 207 d = a.scaleSubtractMultiple(tc,fv,lc,ev,b); 208 e = a.multiply(tc,fv).subtract( b.multiply(lc,ev) ); 209 assertEquals("(tc fv) a - (lc ev) b == ((tc fv) a - ((lc ev) b))",d,e); 210 } 211 212 213 /** 214 * Test distributive law. 215 */ 216 public void testDistributive() { 217 a = fac.random(kl,ll,el,q); 218 b = fac.random(kl,ll,el,q); 219 c = fac.random(kl,ll,el,q); 220 221 d = a.multiply( b.sum(c) ); 222 e = a.multiply( b ).sum( a.multiply(c) ); 223 224 assertEquals("a(b+c) = ab+ac",d,e); 225 } 226 227 228 /** 229 * Test absolute norm. 230 */ 231 public void testAbsNorm() { 232 BigInteger r, ar; 233 a = fac.getONE().negate(); 234 //System.out.println("a = " + a); 235 236 r = PolyUtil.<BigInteger> absNorm(a); 237 //System.out.println("r = " + r); 238 assertTrue("isONE( absNorm(-1) )", r.isONE() ); 239 240 a = fac.random(kl*2, ll+2, el, q ); 241 //System.out.println("a = " + a); 242 243 r = PolyUtil.<BigInteger> absNorm(a); 244 //System.out.println("r = " + r); 245 assertTrue(" not isZERO( absNorm(a) )", !r.isZERO() || a.isZERO() ); 246 } 247 248}