001    /*
002     * $Id: GenMatrixTest.java 3455 2010-12-27 13:35:25Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    
008    import java.util.List;
009    import java.util.ArrayList;
010    
011    import junit.framework.Test;
012    import junit.framework.TestCase;
013    import junit.framework.TestSuite;
014    
015    //import edu.jas.structure.RingElem;
016    //import edu.jas.structure.ModulElem;
017    
018    import edu.jas.arith.BigRational;
019    import edu.jas.vector.GenMatrix;
020    import edu.jas.vector.GenMatrixRing;
021    
022    
023    /**
024     * GenMatrix tests with JUnit
025     * @author Heinz Kredel.
026     */
027    
028    public 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.clone();
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    }