001/*
002 * $Id$
003 */
004
005package edu.jas.poly;
006
007
008import junit.framework.Test;
009import junit.framework.TestCase;
010import junit.framework.TestSuite;
011
012//import edu.jas.structure.RingElem;
013//import edu.jas.structure.ModulElem;
014
015import edu.jas.arith.BigRational;
016import edu.jas.vector.GenVector;
017import edu.jas.vector.GenVectorModul;
018
019/**
020 * GenVector tests with JUnit
021 * @author Heinz Kredel
022 */
023
024public 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.copy();
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 + " )", !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}