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 }