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