001/*
002 * $Id: GenVectorTest.java 4125 2012-08-19 19:05:22Z kredel $
003 */
004
005package edu.jas.vector;
006
007
008import junit.framework.Test;
009import junit.framework.TestCase;
010import junit.framework.TestSuite;
011
012import edu.jas.arith.BigRational;
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     */
127    public void testAddition() {
128        BigRational cfac = new BigRational(1);
129        GenVectorModul<BigRational> mfac = new GenVectorModul<BigRational>(cfac, ll);
130        GenVector<BigRational> a, b, c, d, e;
131
132        a = mfac.random(kl, q);
133        b = mfac.random(kl, q);
134        //System.out.println("a = " + a);
135        //System.out.println("b = " + b);
136
137        c = a.sum(b);
138        d = c.subtract(b);
139        //System.out.println("c = " + c);
140        //System.out.println("d = " + d);
141        assertEquals("a+b-b = a", a, d);
142
143        c = a.sum(b);
144        d = c.sum(b.negate());
145        //System.out.println("c = " + c);
146        //System.out.println("d = " + d);
147        assertEquals("a+b+(-b) = a", a, d);
148
149        c = a.sum(b);
150        d = b.sum(a);
151        //System.out.println("c = " + c);
152        //System.out.println("d = " + d);
153        assertEquals("a+b = b+a", c, d);
154
155        c = mfac.random(kl, q);
156        d = a.sum(b).sum(c);
157        e = a.sum(b.sum(c));
158        //System.out.println("d = " + d);
159        //System.out.println("e = " + e);
160        assertEquals("a+(b+c) = (a+b)+c", d, e);
161    }
162
163
164    /**
165     * Test scalar multiplication.
166     * 
167     */
168    public void testMultiplication() {
169        BigRational cfac = new BigRational(1);
170        GenVectorModul<BigRational> mfac = new GenVectorModul<BigRational>(cfac, ll);
171        BigRational r, s, t;
172        GenVector<BigRational> a, b, c, d;
173
174        r = cfac.random(kl);
175        if (r.isZERO()) {
176            r = cfac.getONE();
177        }
178        //System.out.println("r = " + r);
179        s = r.inverse();
180        //System.out.println("s = " + s);
181
182        a = mfac.random(kl, q);
183        //System.out.println("a = " + a);
184
185        c = a.scalarMultiply(r);
186        d = c.scalarMultiply(s);
187        //System.out.println("c = " + c);
188        //System.out.println("d = " + d);
189        assertEquals("a*b*(1/b) = a " + r, a, d);
190
191
192        b = mfac.random(kl, q);
193        //System.out.println("b = " + b);
194
195        t = cfac.getONE();
196        //System.out.println("t = " + t);
197        c = a.linearCombination(b, t);
198        d = b.linearCombination(a, t);
199        //System.out.println("c = " + c);
200        //System.out.println("d = " + d);
201        assertEquals("a+1*b = b+1*a", c, d);
202
203        c = a.linearCombination(b, t);
204        d = a.sum(b);
205        //System.out.println("c = " + c);
206        //System.out.println("d = " + d);
207        assertEquals("a+1*b = b+1*a", c, d);
208
209        s = t.negate();
210        //System.out.println("s = " + s);
211        c = a.linearCombination(b, t);
212        d = c.linearCombination(b, s);
213        //System.out.println("c = " + c);
214        //System.out.println("d = " + d);
215        assertEquals("a+1*b+(-1)*b = a", a, d);
216
217        c = a.linearCombination(t, b, t);
218        d = c.linearCombination(t, b, s);
219        //System.out.println("c = " + c);
220        //System.out.println("d = " + d);
221        assertEquals("a*1+b*1+b*(-1) = a", a, d);
222
223        t = cfac.getZERO();
224        //System.out.println("t = " + t);
225        c = a.linearCombination(b, t);
226        //System.out.println("c = " + c);
227        assertEquals("a+0*b = a", a, c);
228
229        d = a.linearCombination(t, b, t);
230        //System.out.println("d = " + d);
231        assertEquals("0*a+0*b = 0", mfac.getZERO(), d);
232
233        r = a.scalarProduct(b);
234        s = b.scalarProduct(a);
235        //System.out.println("r = " + r);
236        //System.out.println("s = " + s);
237        assertEquals("a.b = b.a", r, s);
238    }
239
240
241    /**
242     * Test parse vector.
243     * 
244     */
245    public void testParse() {
246        BigRational cfac = new BigRational(1);
247        GenVectorModul<BigRational> mfac = new GenVectorModul<BigRational>(cfac, ll);
248
249        GenVector<BigRational> a, c;
250
251        a = mfac.random(kl, q);
252        //System.out.println("a = " + a);
253        if (!a.isZERO()) {
254            //return;
255            assertTrue(" not isZERO( a )", !a.isZERO());
256        }
257        String s = a.toString();
258        //System.out.println("s = " + s);
259        c = mfac.parse(s);
260        //System.out.println("c = " + c);
261        assertEquals("parse(toStirng(a) == a ", a, c);
262    }
263
264}