001/* 002 * $Id: BigDecimalComplexTest.java 5688 2017-01-03 08:45:09Z kredel $ 003 */ 004 005package edu.jas.arith; 006 007 008import junit.framework.Test; 009import junit.framework.TestCase; 010import junit.framework.TestSuite; 011 012 013/** 014 * BigComplex tests with JUnit. 015 * @author Heinz Kredel 016 */ 017 018public class BigDecimalComplexTest extends TestCase { 019 020 021 /** 022 * main 023 */ 024 public static void main(String[] args) { 025 junit.textui.TestRunner.run(suite()); 026 } 027 028 029 /** 030 * Constructs a <CODE>BigDecimalComplexTest</CODE> object. 031 * @param name String. 032 */ 033 public BigDecimalComplexTest(String name) { 034 super(name); 035 } 036 037 038 /** 039 * suite. 040 */ 041 public static Test suite() { 042 TestSuite suite = new TestSuite(BigDecimalComplexTest.class); 043 return suite; 044 } 045 046 047 BigDecimalComplex a, b, c, d, e; 048 049 050 BigDecimalComplex fac; 051 052 053 @Override 054 protected void setUp() { 055 a = b = c = d = e = null; 056 fac = new BigDecimalComplex(); 057 } 058 059 060 @Override 061 protected void tearDown() { 062 a = b = c = d = e = null; 063 } 064 065 066 /** 067 * Test static initialization and constants. 068 */ 069 public void testConstants() { 070 a = BigDecimalComplex.ZERO; 071 b = BigDecimalComplex.ONE; 072 c = b.subtract(b); 073 d = BigDecimalComplex.I; 074 e = BigDecimalComplex.CDIF(d, d); 075 076 assertEquals("1-1 == 0", c, a); 077 assertTrue("1-1 == 0", c.isZERO()); 078 assertTrue("1 == 1", b.isONE()); 079 assertTrue("i == i", d.isIMAG()); 080 assertTrue("i-i == 0", e.isZERO()); 081 082 c = a.subtract(a); 083 assertEquals("0-0 == 0", c, a); 084 } 085 086 087 /** 088 * Test bitLength. 089 */ 090 public void testBitLength() { 091 a = BigDecimalComplex.ZERO; 092 b = BigDecimalComplex.ONE; 093 c = b.random(300); 094 d = BigDecimalComplex.I; 095 //System.out.println("c = " + c); 096 //System.out.println("len(c) = " + c.bitLength()); 097 098 assertEquals("len(0) = 4", 4, a.bitLength()); 099 assertEquals("len(1) = 5", 5, b.bitLength()); 100 assertEquals("len(-1) = 5", 5, b.negate().bitLength()); 101 assertEquals("len(i) = 5", 5, d.bitLength()); 102 assertEquals("len(-i) = 5", 5, d.negate().bitLength()); 103 assertTrue("len(random) >= 4", 4 <= c.bitLength()); 104 } 105 106 107 /** 108 * Test constructor and toString. 109 */ 110 public void testConstructor() { 111 a = new BigDecimalComplex("6.8"); 112 b = new BigDecimalComplex("3.4"); 113 b = b.sum(b); 114 115 assertEquals("6.8 == 3.4+3.4", a, b); 116 117 a = new BigDecimalComplex("3.4 i 4.5"); 118 b = new BigDecimalComplex("-3.4 i -4.5"); 119 120 assertEquals("3.4 + i 4.5 ", a, b.negate()); 121 122 String s = "6.1111111111111111111111111111111111111111111"; 123 a = new BigDecimalComplex(s); 124 String t = a.toString(); 125 126 assertEquals("stringConstr == toString", s, t); 127 128 a = new BigDecimalComplex(1); 129 b = new BigDecimalComplex(-1); 130 c = b.sum(a); 131 132 assertTrue("1 == 1", a.isONE()); 133 assertEquals("1+(-1) == 0", c, BigDecimalComplex.ZERO); 134 } 135 136 137 /** 138 * Test random decimal. 139 */ 140 public void testRandom() { 141 a = fac.random(500); 142 b = new BigDecimalComplex(a.getRe(), a.getIm()); 143 c = b.subtract(a); 144 145 assertEquals("a-b == 0", c, BigDecimalComplex.ZERO); 146 147 d = new BigDecimalComplex(b.getRe(), b.getIm()); 148 assertEquals("sign(a-a) == 0", 0, b.compareTo(d)); 149 } 150 151 152 /** 153 * Test addition. 154 */ 155 public void testAddition() { 156 a = fac.random(10); 157 b = a.sum(a); 158 c = b.subtract(a); 159 160 assertEquals("a+a-a == a", c, a); 161 assertEquals("a+a-a == a", 0, c.compareTo(a)); 162 163 b = fac.random(5); 164 c = a.sum(b); 165 d = b.sum(a); 166 assertEquals("a+b == b+a: " + c.subtract(d), c, d); 167 168 d = a.sum(BigDecimalComplex.ZERO); 169 assertEquals("a+0 == a", d, a); 170 d = a.subtract(BigDecimalComplex.ZERO); 171 assertEquals("a-0 == a", d, a); 172 d = a.subtract(a); 173 assertEquals("a-a == 0", d, BigDecimalComplex.ZERO); 174 } 175 176 177 /** 178 * Test multiplication. 179 */ 180 public void testMultiplication() { 181 a = fac.random(5); 182 b = a.multiply(a); 183 c = b.divide(a); 184 185 assertEquals("a*a/a == a: " + c.subtract(a), c, a); 186 assertEquals("a*a/a == a: " + c.subtract(a), 0, c.compareTo(a)); 187 188 d = a.multiply(BigDecimalComplex.ONE); 189 assertEquals("a*1 == a", d, a); 190 d = a.divide(BigDecimalComplex.ONE); 191 assertEquals("a/1 == a", d, a); 192 193 b = fac.random(5); 194 c = a.multiply(b); 195 d = b.multiply(a); 196 assertEquals("a*b == b*a: " + c.subtract(d), c, d); 197 198 a = fac.random(5); 199 b = a.inverse(); 200 c = a.multiply(b); 201 //assertTrue("a*1/a == 1: " + c, c.isONE()); 202 assertTrue("a*1/a == 1: " + c, c.compareTo(fac.getONE()) == 0); 203 } 204 205 206 /** 207 * Test distributive law. 208 */ 209 public void testDistributive() { 210 a = fac.random(50); 211 b = fac.random(50); 212 c = fac.random(50); 213 214 d = a.multiply(b.sum(c)); 215 e = a.multiply(b).sum(a.multiply(c)); 216 217 assertEquals("a(b+c) == ab+ac", d, e); 218 } 219 220 221 /** 222 * Test norm and abs. 223 */ 224 public void testNorm() { 225 a = fac.random(5); 226 227 b = a.norm(); 228 c = a.abs(); 229 d = c.multiply(c); 230 e = b.subtract(d); 231 //System.out.println("e = " + e); 232 233 assertTrue("||a|| == |a|*|a|: " + e, b.compareTo(d) == 0); 234 } 235 236}