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