001/* 002 * $Id: QuatGenPolynomialTest.java 5931 2018-09-23 17:21:33Z kredel $ 003 */ 004 005package edu.jas.poly; 006 007 008import edu.jas.arith.BigQuaternion; 009import edu.jas.arith.BigQuaternionRing; 010 011import junit.framework.Test; 012import junit.framework.TestCase; 013import junit.framework.TestSuite; 014 015 016/** 017 * BigQuaternion coefficients GenPolynomial tests with JUnit. 018 * @author Heinz Kredel 019 */ 020 021public class QuatGenPolynomialTest extends TestCase { 022 023 024 /** 025 * main 026 */ 027 public static void main(String[] args) { 028 junit.textui.TestRunner.run(suite()); 029 } 030 031 032 /** 033 * Constructs a <CODE>QuatGenPolynomialTest</CODE> object. 034 * @param name String. 035 */ 036 public QuatGenPolynomialTest(String name) { 037 super(name); 038 } 039 040 041 /** 042 */ 043 public static Test suite() { 044 TestSuite suite = new TestSuite(QuatGenPolynomialTest.class); 045 return suite; 046 } 047 048 049 //private final static int bitlen = 100; 050 051 BigQuaternionRing cfac; 052 053 054 GenPolynomialRing<BigQuaternion> fac; 055 056 057 GenPolynomial<BigQuaternion> a, b, c, d, e; 058 059 060 int rl = 4; 061 062 063 int kl = 3; 064 065 066 int ll = 7; 067 068 069 int el = 3; 070 071 072 float q = 0.4f; 073 074 075 @Override 076 protected void setUp() { 077 a = b = c = d = e = null; 078 cfac = new BigQuaternionRing(); 079 fac = new GenPolynomialRing<BigQuaternion>(cfac, rl); 080 } 081 082 083 @Override 084 protected void tearDown() { 085 a = b = c = d = e = null; 086 cfac = null; 087 fac = null; 088 } 089 090 091 /** 092 * Test constructor and toString. 093 */ 094 public void testConstruction() { 095 c = fac.getONE(); 096 assertTrue("length( c ) = 1", c.length() == 1); 097 assertTrue("isZERO( c )", !c.isZERO()); 098 assertTrue("isONE( c )", c.isONE()); 099 100 d = fac.getZERO(); 101 assertTrue("length( d ) = 0", d.length() == 0); 102 assertTrue("isZERO( d )", d.isZERO()); 103 assertTrue("isONE( d )", !d.isONE()); 104 } 105 106 107 /** 108 * Test random polynomial. 109 */ 110 public void testRandom() { 111 for (int i = 0; i < 7; i++) { 112 a = fac.random(kl, ll, el, q); 113 // fac.random(kl*(i+1), ll+2*i, el+i, q ); 114 if (a.isZERO()) { 115 continue; 116 } 117 assertTrue("length( a" + i + " ) <> 0", a.length() >= 0); 118 assertTrue(" not isZERO( a" + i + " )", !a.isZERO()); 119 assertTrue(" not isONE( a" + i + " )", !a.isONE()); 120 } 121 } 122 123 124 /** 125 * Test addition. 126 */ 127 public void testAddition() { 128 a = fac.random(kl, ll, el, q); 129 b = fac.random(kl, ll, el, q); 130 131 c = a.sum(b); 132 d = c.subtract(b); 133 assertEquals("a+b-b = a", a, d); 134 135 c = fac.random(kl, ll, el, q); 136 137 ExpVector u = ExpVector.random(rl, el, q); 138 BigQuaternion x = cfac.random(kl); 139 140 b = new GenPolynomial<BigQuaternion>(fac, x, u); 141 c = a.sum(b); 142 d = a.sum(x, u); 143 assertEquals("a+p(x,u) = a+(x,u)", c, d); 144 145 c = a.subtract(b); 146 d = a.subtract(x, u); 147 assertEquals("a-p(x,u) = a-(x,u)", c, d); 148 149 a = new GenPolynomial<BigQuaternion>(fac); 150 b = new GenPolynomial<BigQuaternion>(fac, x, u); 151 c = b.sum(a); 152 d = a.sum(x, u); 153 assertEquals("a+p(x,u) = a+(x,u)", c, d); 154 155 c = a.subtract(b); 156 d = a.subtract(x, u); 157 assertEquals("a-p(x,u) = a-(x,u)", c, d); 158 } 159 160 161 /** 162 * Test object multiplication. 163 */ 164 public void testMultiplication() { 165 do { 166 a = fac.random(kl, ll, el, q); 167 } while (a.isZERO()); 168 169 do { 170 b = fac.random(kl, ll, el, q); 171 } while (b.isZERO()); 172 173 c = b.multiply(a); 174 d = a.multiply(b); 175 assertTrue("not isZERO( c )", !c.isZERO()); 176 assertTrue("not isZERO( d )", !d.isZERO()); 177 178 //System.out.println("a = " + a); 179 //System.out.println("b = " + b); 180 e = d.subtract(c); 181 assertTrue("!isZERO( a*b-b*a ) " + e, !e.isZERO()); 182 183 assertTrue("a*b = b*a", !c.equals(d)); 184 //assertEquals("a*b = b*a",c,d); 185 186 c = fac.random(kl, ll, el, q); 187 //System.out.println("c = " + c); 188 d = a.multiply(b.multiply(c)); 189 e = (a.multiply(b)).multiply(c); 190 191 //System.out.println("d = " + d); 192 //System.out.println("e = " + e); 193 //System.out.println("d-e = " + d.subtract(c) ); 194 195 assertEquals("a(bc) = (ab)c", d, e); 196 //assertTrue("a(bc) = (ab)c", d.equals(e) ); 197 198 BigQuaternion x = a.leadingBaseCoefficient().inverse(); 199 c = a.monic(); 200 d = a.multiplyLeft(x); 201 assertEquals("a.monic() = (1/ldcf(a))a", c, d); 202 203 BigQuaternion y = b.leadingBaseCoefficient().inverse(); 204 c = b.monic(); 205 //System.out.println("c = " + c); 206 d = b.multiplyLeft(y); 207 //System.out.println("d = " + d); 208 assertEquals("b.monic() = (1/ldcf(b))b", c, d); 209 210 e = new GenPolynomial<BigQuaternion>(fac, y); 211 d = e.multiply(b); 212 assertEquals("b.monic() = (1/ldcf(b))b", c, d); 213 214 //d = b.multiplyLeft(y); 215 d = b.multiply(y); 216 //System.out.println("d = " + d); 217 //wrong: assertEquals("b.monic() = (1/ldcf(b))b",c,d); 218 assertTrue("is monic: b(1/ldcf(b))", d.leadingBaseCoefficient().isONE()); 219 } 220 221 222 /** 223 * Test coefficient multiplication. 224 */ 225 public void testCoeffMultiplication() { 226 a = fac.random(kl, ll, el, q); 227 //System.out.println("a = " + a); 228 229 c = a.monic(); 230 //System.out.println("c = " + c); 231 232 BigQuaternion qa = cfac.random(5); 233 //System.out.println("qa = " + qa); 234 BigQuaternion qb = qa.inverse(); 235 //System.out.println("qb = " + qb); 236 BigQuaternion qc = qa.multiply(qb); 237 //System.out.println("qc = " + qc); 238 BigQuaternion qd = qb.multiply(qa); 239 //System.out.println("qc = " + qc); 240 assertEquals("qa*(1/qa) == (1/qa)*qa ", qc, qd); 241 242 b = c.multiply(qa).multiply(qb); 243 //System.out.println("b = " + b); 244 245 d = c.multiplyLeft(qa).multiplyLeft(qb); 246 //System.out.println("d = " + d); 247 assertEquals("c*qa*qb = qb*qa*c", b, d); 248 //e = b.subtract(d); 249 //System.out.println("e = " + e); 250 251 b = c.multiply(qa).multiplyLeft(qb); 252 //System.out.println("b = " + b); 253 254 d = c.multiplyLeft(qb).multiply(qa); 255 //System.out.println("d = " + d); 256 e = b.subtract(d); 257 //System.out.println("e = " + e); 258 assertEquals("qb*(c*qa) == (qb*c)*qa", b, d); 259 } 260 261}