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}