001    /*
002     * $Id: GenVectorTest.java 3455 2010-12-27 13:35:25Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    
008    import junit.framework.Test;
009    import junit.framework.TestCase;
010    import junit.framework.TestSuite;
011    
012    //import edu.jas.structure.RingElem;
013    //import edu.jas.structure.ModulElem;
014    
015    import edu.jas.arith.BigRational;
016    import edu.jas.vector.GenVector;
017    import edu.jas.vector.GenVectorModul;
018    
019    /**
020     * GenVector tests with JUnit
021     * @author Heinz Kredel.
022     */
023    
024    public class GenVectorTest extends TestCase {
025    
026    
027        /**
028         * main.
029         */
030        public static void main(String[] args) {
031            junit.textui.TestRunner.run(suite());
032        }
033    
034    
035        /**
036         * Constructs a <CODE>RatGenVectorTest</CODE> object.
037         * @param name String.
038         */
039        public GenVectorTest(String name) {
040            super(name);
041        }
042    
043    
044        /**
045         */
046        public static Test suite() {
047            TestSuite suite = new TestSuite(GenVectorTest.class);
048            return suite;
049        }
050    
051    
052        int rl = 5;
053    
054    
055        int kl = 10;
056    
057    
058        int ll = 10;
059    
060    
061        float q = 0.5f;
062    
063    
064        @Override
065        protected void setUp() {
066        }
067    
068    
069        @Override
070        protected void tearDown() {
071        }
072    
073    
074        /**
075         * Test constructor and toString.
076         * 
077         */
078        public void testPolynomialConstruction() {
079            BigRational cfac = new BigRational(1);
080            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, rl);
081    
082            GenVectorModul<GenPolynomial<BigRational>> mfac = new GenVectorModul<GenPolynomial<BigRational>>(
083                    pfac, ll);
084    
085            assertTrue("#columns = " + ll, mfac.cols == ll);
086            assertTrue("pfac == coFac ", pfac == mfac.coFac);
087    
088            GenVector<GenPolynomial<BigRational>> a;
089            a = mfac.getZERO();
090            //System.out.println("a = " + a);
091            assertTrue("isZERO( a )", a.isZERO());
092    
093            GenVector<GenPolynomial<BigRational>> b = new GenVector<GenPolynomial<BigRational>>(mfac);
094            //System.out.println("b = " + b);
095            assertTrue("isZERO( b )", b.isZERO());
096    
097            assertTrue("a == b ", a.equals(b));
098    
099            GenVector<GenPolynomial<BigRational>> c = b.clone();
100            //System.out.println("c = " + c);
101            assertTrue("isZERO( c )", c.isZERO());
102            assertTrue("a == c ", a.equals(c));
103    
104            GenVector<GenPolynomial<BigRational>> d = mfac.copy(b);
105            //System.out.println("d = " + d);
106            assertTrue("isZERO( d )", d.isZERO());
107            assertTrue("a == d ", a.equals(d));
108        }
109    
110    
111        /**
112         * Test random vector
113         * 
114         */
115        public void testPolynomialRandom() {
116            BigRational cfac = new BigRational(1);
117            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, rl);
118    
119            GenVectorModul<GenPolynomial<BigRational>> mfac = new GenVectorModul<GenPolynomial<BigRational>>(
120                    pfac, ll);
121    
122            GenVector<GenPolynomial<BigRational>> a;
123            for (int i = 0; i < 7; i++) {
124                a = mfac.random(kl, q);
125                //System.out.println("a = " + a);
126                assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
127            }
128        }
129    
130    
131        /**
132         * Test addition.
133         * 
134         */
135        public void testPolynomialAddition() {
136            BigRational cfac = new BigRational(1);
137            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, rl);
138    
139            GenVectorModul<GenPolynomial<BigRational>> mfac = new GenVectorModul<GenPolynomial<BigRational>>(
140                    pfac, ll);
141    
142            GenVector<GenPolynomial<BigRational>> a, b, c, d, e;
143    
144            a = mfac.random(kl, q);
145            b = mfac.random(kl, q);
146            //System.out.println("a = " + a);
147            //System.out.println("b = " + b);
148    
149            c = a.sum(b);
150            d = c.subtract(b);
151            //System.out.println("c = " + c);
152            //System.out.println("d = " + d);
153            assertEquals("a+b-b = a", a, d);
154    
155            c = a.sum(b);
156            d = c.sum(b.negate());
157            //System.out.println("c = " + c);
158            //System.out.println("d = " + d);
159            assertEquals("a+b+(-b) = a", a, d);
160    
161            c = a.sum(b);
162            d = b.sum(a);
163            //System.out.println("c = " + c);
164            //System.out.println("d = " + d);
165            assertEquals("a+b = b+a", c, d);
166    
167            c = mfac.random(kl, q);
168            d = a.sum(b).sum(c);
169            e = a.sum(b.sum(c));
170            //System.out.println("d = " + d);
171            //System.out.println("e = " + e);
172            assertEquals("a+(b+c) = (a+b)+c", d, e);
173        }
174    
175    
176        /**
177         * Test scalar multiplication.
178         * 
179         */
180        public void testPolynomialMultiplication() {
181            BigRational cfac = new BigRational(1);
182            GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, rl);
183    
184            GenVectorModul<GenPolynomial<BigRational>> mfac = new GenVectorModul<GenPolynomial<BigRational>>(
185                    pfac, ll);
186    
187            GenPolynomial<BigRational> r, s, t;
188            GenVector<GenPolynomial<BigRational>> a, b, c, d, e;
189    
190            r = pfac.random(kl);
191            //System.out.println("r = " + r);
192            s = r.negate();
193            //System.out.println("s = " + s);
194    
195            a = mfac.random(kl, q);
196            //System.out.println("a = " + a);
197    
198            c = a.scalarMultiply(r);
199            d = a.scalarMultiply(s);
200            e = c.sum(d);
201            //System.out.println("c = " + c);
202            //System.out.println("d = " + d);
203            //System.out.println("e = " + e);
204            assertEquals("a*b + a*(-b) = 0", e, mfac.getZERO());
205    
206    
207            b = mfac.random(kl, q);
208            //System.out.println("b = " + b);
209    
210            t = pfac.getONE();
211            //System.out.println("t = " + t);
212            c = a.linearCombination(b, t);
213            d = b.linearCombination(a, t);
214            //System.out.println("c = " + c);
215            //System.out.println("d = " + d);
216            assertEquals("a+1*b = b+1*a", c, d);
217    
218            c = a.linearCombination(b, t);
219            d = a.sum(b);
220            //System.out.println("c = " + c);
221            //System.out.println("d = " + d);
222            assertEquals("a+1*b = b+1*a", c, d);
223    
224            s = t.negate();
225            //System.out.println("s = " + s);
226            c = a.linearCombination(b, t);
227            d = c.linearCombination(b, s);
228            //System.out.println("c = " + c);
229            //System.out.println("d = " + d);
230            assertEquals("a+1*b+(-1)*b = a", a, d);
231    
232            c = a.linearCombination(t, b, t);
233            d = c.linearCombination(t, b, s);
234            //System.out.println("c = " + c);
235            //System.out.println("d = " + d);
236            assertEquals("a+1*b+(-1)*b = a", a, d);
237    
238            t = pfac.getZERO();
239            //System.out.println("t = " + t);
240            c = a.linearCombination(b, t);
241            //System.out.println("c = " + c);
242            assertEquals("a+0*b = a", a, c);
243    
244            d = a.linearCombination(t, b, t);
245            //System.out.println("d = " + d);
246            assertEquals("0*a+0*b = 0", mfac.getZERO(), d);
247    
248            r = a.scalarProduct(b);
249            s = b.scalarProduct(a);
250            //System.out.println("r = " + r);
251            //System.out.println("s = " + s);
252            assertEquals("a.b = b.a", r, s);
253        }
254    
255    }