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