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