001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.math.util; 018 019 import static org.junit.Assert.assertEquals; 020 import static org.junit.Assert.assertFalse; 021 import static org.junit.Assert.assertTrue; 022 023 import java.math.BigDecimal; 024 import java.math.BigInteger; 025 import java.math.MathContext; 026 027 import org.apache.commons.math.TestUtils; 028 import org.junit.Test; 029 030 public class BigRealTest { 031 032 @Test 033 public void testConstructor() { 034 assertEquals(1.625, new BigReal(new BigDecimal("1.625")).doubleValue(), 1.0e-15); 035 assertEquals(-5.0, new BigReal(new BigInteger("-5")).doubleValue(), 1.0e-15); 036 assertEquals(-5.0, new BigReal(new BigInteger("-5"), MathContext.DECIMAL64).doubleValue(), 1.0e-15); 037 assertEquals(0.125, new BigReal(new BigInteger("125"), 3).doubleValue(), 1.0e-15); 038 assertEquals(0.125, new BigReal(new BigInteger("125"), 3, MathContext.DECIMAL64).doubleValue(), 1.0e-15); 039 assertEquals(1.625, new BigReal(new char[] { '1', '.', '6', '2', '5' }).doubleValue(), 1.0e-15); 040 assertEquals(1.625, new BigReal(new char[] { 'A', 'A', '1', '.', '6', '2', '5', '9' }, 2, 5).doubleValue(), 1.0e-15); 041 assertEquals(1.625, new BigReal(new char[] { 'A', 'A', '1', '.', '6', '2', '5', '9' }, 2, 5, MathContext.DECIMAL64).doubleValue(), 1.0e-15); 042 assertEquals(1.625, new BigReal(new char[] { '1', '.', '6', '2', '5' }, MathContext.DECIMAL64).doubleValue(), 1.0e-15); 043 assertEquals(1.625, new BigReal(1.625).doubleValue(), 1.0e-15); 044 assertEquals(1.625, new BigReal(1.625, MathContext.DECIMAL64).doubleValue(), 1.0e-15); 045 assertEquals(-5.0, new BigReal(-5).doubleValue(), 1.0e-15); 046 assertEquals(-5.0, new BigReal(-5, MathContext.DECIMAL64).doubleValue(), 1.0e-15); 047 assertEquals(-5.0, new BigReal(-5l).doubleValue(), 1.0e-15); 048 assertEquals(-5.0, new BigReal(-5l, MathContext.DECIMAL64).doubleValue(), 1.0e-15); 049 assertEquals(1.625, new BigReal("1.625").doubleValue(), 1.0e-15); 050 assertEquals(1.625, new BigReal("1.625", MathContext.DECIMAL64).doubleValue(), 1.0e-15); 051 } 052 053 @Test 054 public void testCompareTo() { 055 BigReal first = new BigReal(1.0 / 2.0); 056 BigReal second = new BigReal(1.0 / 3.0); 057 BigReal third = new BigReal(1.0 / 2.0); 058 059 assertEquals(0, first.compareTo(first)); 060 assertEquals(0, first.compareTo(third)); 061 assertEquals(1, first.compareTo(second)); 062 assertEquals(-1, second.compareTo(first)); 063 064 } 065 066 public void testAdd() { 067 BigReal a = new BigReal("1.2345678"); 068 BigReal b = new BigReal("8.7654321"); 069 assertEquals(9.9999999, a.add(b).doubleValue(), 1.0e-15); 070 } 071 072 public void testSubtract() { 073 BigReal a = new BigReal("1.2345678"); 074 BigReal b = new BigReal("8.7654321"); 075 assertEquals( -7.5308643, a.subtract(b).doubleValue(), 1.0e-15); 076 } 077 078 public void testDivide() { 079 BigReal a = new BigReal("1.0000000000"); 080 BigReal b = new BigReal("0.0009765625"); 081 assertEquals(1024.0, a.divide(b).doubleValue(), 1.0e-15); 082 } 083 084 public void testMultiply() { 085 BigReal a = new BigReal("1024.0"); 086 BigReal b = new BigReal("0.0009765625"); 087 assertEquals(1.0, a.multiply(b).doubleValue(), 1.0e-15); 088 } 089 090 @Test 091 public void testDoubleValue() { 092 assertEquals(0.5, new BigReal(0.5).doubleValue(), 1.0e-15); 093 } 094 095 @Test 096 public void testBigDecimalValue() { 097 BigDecimal pi = new BigDecimal("3.1415926535897932384626433832795028841971693993751"); 098 assertEquals(pi, new BigReal(pi).bigDecimalValue()); 099 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 }