001/*
002 * $Id: JLAdapterTest.java 4850 2014-06-28 18:26:08Z kredel $
003 */
004
005package edu.jas.jlinalg;
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 * JLAdapter tests with JUnit
021 * @author Heinz Kredel.
022 */
023
024public class JLAdapterTest 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>JLAdapterTest</CODE> object.
037     * @param name String.
038     */
039    public JLAdapterTest(String name) {
040        super(name);
041    }
042
043
044    /**
045     */
046    public static Test suite() {
047        TestSuite suite = new TestSuite(JLAdapterTest.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        JLAdapter<BigRational> a = new JLAdapter<BigRational>(z);
081        //System.out.println("a = " + a);
082        assertTrue("isZero( a )", a.isZero());
083
084        BigRational o = new BigRational(1);
085        JLAdapter<BigRational> b = new JLAdapter<BigRational>(o);
086        //System.out.println("b = " + b);
087        assertTrue("isOne( b )", b.isOne());
088
089        JLAdapter<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 JLAdapter<BigRational>(new BigRational(1, 2));
096        //System.out.println("c = " + c);
097        assertTrue("!isZero( c )", !c.isZero());
098
099        JLAdapter<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        JLAdapter<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        JLAdapterFactory<BigRational> fac = new JLAdapterFactory<BigRational>(z);
118        //System.out.println("fac = " + fac);
119
120        JLAdapter<BigRational> a = fac.zero();
121        //System.out.println("a = " + a);
122        assertTrue("isZero( a )", a.isZero());
123
124        JLAdapter<BigRational> b = fac.one();
125        //System.out.println("b = " + b);
126        assertTrue("isOne( b )", b.isOne());
127
128    }
129
130
131    /**
132     * Test matrix solve.
133     */
134    public void xtestGenMatrixSolv() {
135        //MatrixExamples gms = new MatrixExamples();
136        MatrixExamples.main(null);
137    }
138
139
140    /**
141     * Test vector conversions.
142     */
143    public void testVectorConversion() {
144        RingFactory<BigRational> z = new BigRational(0);
145        JLAdapterFactory<BigRational> fac = new JLAdapterFactory<BigRational>(z);
146
147        JLAdapter<BigRational>[] vec1 = fac.getArray(ll);
148        //System.out.println("vec1 =" + Arrays.toString(vec1));
149
150        RingElem<BigRational>[] v1 = JLAdapterUtil.<BigRational> fromJLAdapter(vec1);
151        //System.out.println("v1   =" + Arrays.toString(v1));
152
153        JLAdapter<BigRational>[] vec2 = JLAdapterUtil.<BigRational> toJLAdapterRE(v1);
154        //System.out.println("vec2 =" + Arrays.toString(vec2));
155
156        assertTrue("v1[] == v2[] ", Arrays.equals(vec1, vec2));
157
158
159        BigRational[] v2 = new BigRational[ll];
160        for (int i = 0; i < v2.length; i++) {
161            v2[i] = z.random(kl);
162        }
163        //System.out.println("v2   =" + Arrays.toString(v2));
164
165        JLAdapter<BigRational>[] vec3 = JLAdapterUtil.<BigRational> toJLAdapter(v2);
166        //System.out.println("vec3 =" + Arrays.toString(vec3));
167
168        RingElem<BigRational>[] v3 = JLAdapterUtil.<BigRational> fromJLAdapter(vec3);
169        //System.out.println("v3   =" + Arrays.toString(v3));
170
171        assertTrue("v2[] == v3[] ", Arrays.equals(v2, v3));
172    }
173
174
175    /**
176     * Test matrix conversions.
177     */
178    public void testMatrixConversion() {
179        RingFactory<BigRational> z = new BigRational(0);
180        JLAdapterFactory<BigRational> fac = new JLAdapterFactory<BigRational>(z);
181
182        JLAdapter<BigRational>[][] vec1 = fac.getArray(ll, ll);
183        //System.out.println("vec1   =" + matrixToString(vec1));
184
185        RingElem<BigRational>[][] v1 = JLAdapterUtil.<BigRational> fromJLAdapter(vec1);
186        //System.out.println("v1     =" + matrixToString(v1));
187
188        JLAdapter<BigRational>[][] vec2 = JLAdapterUtil.<BigRational> toJLAdapterRE(v1);
189        //System.out.println("vec2   =" + matrixToString(vec2));
190
191        assertMatrixEquals(vec1, vec2);
192
193
194        BigRational[][] v2 = new BigRational[ll][];
195        for (int i = 0; i < v2.length; i++) {
196            v2[i] = new BigRational[ll];
197            for (int j = 0; j < v2.length; j++) {
198                v2[i][j] = z.random(kl);
199            }
200        }
201        //System.out.println("v2     =" + matrixToString(v2));
202
203        JLAdapter<BigRational>[][] vec3 = JLAdapterUtil.<BigRational> toJLAdapter(v2);
204        //System.out.println("vec1   =" + matrixToString(vec3));
205
206        RingElem<BigRational>[][] v3 = JLAdapterUtil.<BigRational> fromJLAdapter(vec3);
207        //System.out.println("v3     =" + matrixToString(v3));
208
209        //v3[0][0] = v3[1][1];
210        assertMatrixEquals(v2, v3);
211    }
212
213
214    public String matrixToString(Object[][] m) {
215        StringBuffer s = new StringBuffer("[");
216        for (int i = 0; i < m.length; i++) {
217            if (i != 0) {
218                s.append(", ");
219            }
220            s.append(Arrays.toString(m[i]));
221        }
222        s.append("]");
223        return s.toString();
224    }
225
226
227    public void assertMatrixEquals(Object[][] m1, Object[][] m2) {
228        for (int i = 0; i < m1.length; i++) {
229            assertTrue("m1[][] == m2[][] ", Arrays.equals(m1[i], m2[i]));
230        }
231    }
232
233}