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}