1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math.util;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertTrue;
22
23 import java.math.BigDecimal;
24 import java.math.BigInteger;
25 import java.math.MathContext;
26
27 import org.apache.commons.math.TestUtils;
28 import org.junit.Test;
29
30 public class BigRealTest {
31
32 @Test
33 public void testConstructor() {
34 assertEquals(1.625, new BigReal(new BigDecimal("1.625")).doubleValue(), 1.0e-15);
35 assertEquals(-5.0, new BigReal(new BigInteger("-5")).doubleValue(), 1.0e-15);
36 assertEquals(-5.0, new BigReal(new BigInteger("-5"), MathContext.DECIMAL64).doubleValue(), 1.0e-15);
37 assertEquals(0.125, new BigReal(new BigInteger("125"), 3).doubleValue(), 1.0e-15);
38 assertEquals(0.125, new BigReal(new BigInteger("125"), 3, MathContext.DECIMAL64).doubleValue(), 1.0e-15);
39 assertEquals(1.625, new BigReal(new char[] { '1', '.', '6', '2', '5' }).doubleValue(), 1.0e-15);
40 assertEquals(1.625, new BigReal(new char[] { 'A', 'A', '1', '.', '6', '2', '5', '9' }, 2, 5).doubleValue(), 1.0e-15);
41 assertEquals(1.625, new BigReal(new char[] { 'A', 'A', '1', '.', '6', '2', '5', '9' }, 2, 5, MathContext.DECIMAL64).doubleValue(), 1.0e-15);
42 assertEquals(1.625, new BigReal(new char[] { '1', '.', '6', '2', '5' }, MathContext.DECIMAL64).doubleValue(), 1.0e-15);
43 assertEquals(1.625, new BigReal(1.625).doubleValue(), 1.0e-15);
44 assertEquals(1.625, new BigReal(1.625, MathContext.DECIMAL64).doubleValue(), 1.0e-15);
45 assertEquals(-5.0, new BigReal(-5).doubleValue(), 1.0e-15);
46 assertEquals(-5.0, new BigReal(-5, MathContext.DECIMAL64).doubleValue(), 1.0e-15);
47 assertEquals(-5.0, new BigReal(-5l).doubleValue(), 1.0e-15);
48 assertEquals(-5.0, new BigReal(-5l, MathContext.DECIMAL64).doubleValue(), 1.0e-15);
49 assertEquals(1.625, new BigReal("1.625").doubleValue(), 1.0e-15);
50 assertEquals(1.625, new BigReal("1.625", MathContext.DECIMAL64).doubleValue(), 1.0e-15);
51 }
52
53 @Test
54 public void testCompareTo() {
55 BigReal first = new BigReal(1.0 / 2.0);
56 BigReal second = new BigReal(1.0 / 3.0);
57 BigReal third = new BigReal(1.0 / 2.0);
58
59 assertEquals(0, first.compareTo(first));
60 assertEquals(0, first.compareTo(third));
61 assertEquals(1, first.compareTo(second));
62 assertEquals(-1, second.compareTo(first));
63
64 }
65
66 public void testAdd() {
67 BigReal a = new BigReal("1.2345678");
68 BigReal b = new BigReal("8.7654321");
69 assertEquals(9.9999999, a.add(b).doubleValue(), 1.0e-15);
70 }
71
72 public void testSubtract() {
73 BigReal a = new BigReal("1.2345678");
74 BigReal b = new BigReal("8.7654321");
75 assertEquals( -7.5308643, a.subtract(b).doubleValue(), 1.0e-15);
76 }
77
78 public void testDivide() {
79 BigReal a = new BigReal("1.0000000000");
80 BigReal b = new BigReal("0.0009765625");
81 assertEquals(1024.0, a.divide(b).doubleValue(), 1.0e-15);
82 }
83
84 public void testMultiply() {
85 BigReal a = new BigReal("1024.0");
86 BigReal b = new BigReal("0.0009765625");
87 assertEquals(1.0, a.multiply(b).doubleValue(), 1.0e-15);
88 }
89
90 @Test
91 public void testDoubleValue() {
92 assertEquals(0.5, new BigReal(0.5).doubleValue(), 1.0e-15);
93 }
94
95 @Test
96 public void testBigDecimalValue() {
97 BigDecimal pi = new BigDecimal("3.1415926535897932384626433832795028841971693993751");
98 assertEquals(pi, new BigReal(pi).bigDecimalValue());
99 assertEquals(new BigDecimal(0.5), new BigReal(1.0 / 2.0).bigDecimalValue());
100 }
101
102 @Test
103 public void testEqualsAndHashCode() {
104 BigReal zero = new BigReal(0.0);
105 BigReal nullReal = null;
106 assertTrue(zero.equals(zero));
107 assertFalse(zero.equals(nullReal));
108 assertFalse(zero.equals(Double.valueOf(0)));
109 BigReal zero2 = new BigReal(0.0);
110 assertTrue(zero.equals(zero2));
111 assertEquals(zero.hashCode(), zero2.hashCode());
112 BigReal one = new BigReal(1.0);
113 assertFalse((one.equals(zero) || zero.equals(one)));
114 assertTrue(one.equals(BigReal.ONE));
115 }
116
117 public void testSerial() {
118 BigReal[] Reals = {
119 new BigReal(3.0), BigReal.ONE, BigReal.ZERO,
120 new BigReal(17), new BigReal(Math.PI),
121 new BigReal(-2.5)
122 };
123 for (BigReal Real : Reals) {
124 assertEquals(Real, TestUtils.serializeAndRecover(Real));
125 }
126 }
127
128 }