001/*
002 * $Id$
003 */
004
005package edu.jas.commons.math;
006
007
008import java.util.Arrays;
009
010import junit.framework.Test;
011import junit.framework.TestCase;
012import junit.framework.TestSuite;
013
014import edu.jas.arith.BigRational;
015import edu.jas.structure.RingElem;
016import edu.jas.structure.RingFactory;
017
018
019/**
020 * CMFieldElementTest tests with JUnit
021 * @author Heinz Kredel
022 */
023
024public class CMFieldElementTest 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>CMFieldElementTest</CODE> object.
037     * @param name String.
038     */
039    public CMFieldElementTest(String name) {
040        super(name);
041    }
042
043
044    /**
045     */
046    public static Test suite() {
047        TestSuite suite = new TestSuite(CMFieldElementTest.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    public void testConstruction() {
078        BigRational z = new BigRational(0);
079
080        CMFieldElement<BigRational> a = new CMFieldElement<BigRational>(z);
081        //System.out.println("a = " + a);
082        assertTrue("isZero( a )", a.isZero());
083
084        BigRational o = new BigRational(1);
085        CMFieldElement<BigRational> b = new CMFieldElement<BigRational>(o);
086        //System.out.println("b = " + b);
087        assertTrue("isOne( b )", b.isOne());
088
089        CMFieldElement<BigRational> c = b.subtract(b);
090        //System.out.println("c = " + c);
091        assertTrue("isZero( c )", c.isZero());
092
093        assertEquals("a == c ", a, c);
094
095        c = new CMFieldElement<BigRational>(new BigRational(1, 2));
096        //System.out.println("c = " + c);
097        assertTrue("!isZero( c )", !c.isZero());
098
099        //        CMFieldElement<BigRational> d = c.invert();
100        //        //System.out.println("d = " + d);
101        //        assertTrue("!isZero( d )", !d.isZero());
102        //
103        //        assertTrue("isOne( 1/2 * 2 ) ", d.multiply(c).isOne());
104        //
105        //        CMFieldElement<BigRational> e = b.divide(d);
106        //        //System.out.println("e = " + e);
107        //        assertEquals("1/2 == 1 / (2) ", c, e);
108    }
109
110
111    /**
112     * Test factory and toString.
113     */
114    public void testFactory() {
115        RingFactory<BigRational> z = new BigRational(0);
116
117        CMField<BigRational> fac = new CMField<BigRational>(z);
118        //System.out.println("fac = " + fac);
119
120        CMFieldElement<BigRational> a = fac.getZero();
121        //System.out.println("a = " + a);
122        assertTrue("isZero( a )", a.isZero());
123
124        CMFieldElement<BigRational> b = fac.getOne();
125        //System.out.println("b = " + b);
126        assertTrue("isOne( b )", b.isOne());
127
128    }
129
130
131    /**
132     * Test matrix solve.
133     * 
134     */
135    //    public void testGenMatrixSolv() {
136    //        MatrixExamples gms = new MatrixExamples();
137    //        gms.main(null);
138    //    }
139
140
141    /**
142     * Test vector conversions.
143     */
144    public void testVectorConversion() {
145        RingFactory<BigRational> z = new BigRational(0);
146        CMField<BigRational> fac = new CMField<BigRational>(z);
147
148        CMFieldElement<BigRational>[] vec1 = fac.getArray(ll);
149        //System.out.println("vec1 =" + Arrays.toString(vec1));
150
151        RingElem<BigRational>[] v1 = CMFieldElementUtil.<BigRational> fromCMFieldElement(vec1);
152        //System.out.println("v1   =" + Arrays.toString(v1));
153
154        CMFieldElement<BigRational>[] vec2 = CMFieldElementUtil.<BigRational> toCMFieldElementRE(v1);
155        //System.out.println("vec2 =" + Arrays.toString(vec2));
156
157        assertTrue("v1[] == v2[] ", Arrays.equals(vec1, vec2));
158
159
160        BigRational[] v2 = new BigRational[ll];
161        for (int i = 0; i < v2.length; i++) {
162            v2[i] = z.random(kl);
163        }
164        //System.out.println("v2   =" + Arrays.toString(v2));
165
166        CMFieldElement<BigRational>[] vec3 = CMFieldElementUtil.<BigRational> toCMFieldElement(v2);
167        //System.out.println("vec3 =" + Arrays.toString(vec3));
168
169        RingElem<BigRational>[] v3 = CMFieldElementUtil.<BigRational> fromCMFieldElement(vec3);
170        //System.out.println("v3   =" + Arrays.toString(v3));
171
172        assertTrue("v2[] == v3[] ", Arrays.equals(v2, v3));
173
174    }
175
176
177    /**
178     * Test matrix conversions.
179     */
180    public void testMatrixConversion() {
181        RingFactory<BigRational> z = new BigRational(0);
182        CMField<BigRational> fac = new CMField<BigRational>(z);
183
184        CMFieldElement<BigRational>[][] vec1 = fac.getArray(ll, ll);
185        //System.out.println("vec1   =" + matrixToString(vec1));
186
187        RingElem<BigRational>[][] v1 = CMFieldElementUtil.<BigRational> fromCMFieldElement(vec1);
188        //System.out.println("v1     =" + matrixToString(v1));
189
190        CMFieldElement<BigRational>[][] vec2 = CMFieldElementUtil.<BigRational> toCMFieldElementRE(v1);
191        //System.out.println("vec2   =" + matrixToString(vec2));
192
193        assertMatrixEquals(vec1, vec2);
194
195
196        BigRational[][] v2 = new BigRational[ll][];
197        for (int i = 0; i < v2.length; i++) {
198            v2[i] = new BigRational[ll];
199            for (int j = 0; j < v2.length; j++) {
200                v2[i][j] = z.random(kl);
201            }
202        }
203        //System.out.println("v2     =" + matrixToString(v2));
204
205        CMFieldElement<BigRational>[][] vec3 = CMFieldElementUtil.<BigRational> toCMFieldElement(v2);
206        //System.out.println("vec1   =" + matrixToString(vec3));
207
208        RingElem<BigRational>[][] v3 = CMFieldElementUtil.<BigRational> fromCMFieldElement(vec3);
209        //System.out.println("v3     =" + matrixToString(v3));
210
211        //v3[0][0] = v3[1][1];
212        assertMatrixEquals(v2, v3);
213
214    }
215
216
217    public String matrixToString(Object[][] m) {
218        StringBuffer s = new StringBuffer("[");
219        for (int i = 0; i < m.length; i++) {
220            if (i != 0) {
221                s.append(", ");
222            }
223            s.append(Arrays.toString(m[i]));
224        }
225        s.append("]");
226        return s.toString();
227    }
228
229
230    public void assertMatrixEquals(Object[][] m1, Object[][] m2) {
231        for (int i = 0; i < m1.length; i++) {
232            assertTrue("m1[][] == m2[][] ", Arrays.equals(m1[i], m2[i]));
233        }
234    }
235
236}