blob: 08724c5002959ad7cad816aa199496194371b608 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package libcore.java.math;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
public class OldBigDecimalTest extends junit.framework.TestCase {
BigInteger value = new BigInteger("12345908");
/**
* java.math.BigDecimal#BigDecimal(double)
*/
public void test_ConstructorD() {
//
// These numbers have an exact representation as doubles:
//
BigDecimal big = new BigDecimal(123E04);
assertTrue(
"the BigDecimal value taking a double argument is not initialized properly",
big.toString().equals("1230000"));
big = new BigDecimal(123.375);
assertTrue("init(D) failed for 123.375; became " + big,
big.toString().equals("123.375") );
big = new BigDecimal(Math.pow(2, -33));
assertTrue("init(D) failed for 2^(-33) = 1.16415321826934814453125E-10; became " + big,
big.toString().equals("1.16415321826934814453125E-10") );
big = new BigDecimal(123456 * Math.pow(2, -33));
assertTrue("init(D) failed for 123456 * 2^(-33) = 0.000014372169971466064453125; became " + big,
big.toString().equals("0.000014372169971466064453125") );
big = new BigDecimal(-123456 * Math.pow(2, -33));
assertTrue("init(D) failed for 123456 * 2^(-33) = -0.000014372169971466064453125; became " + big,
big.toString().equals("-0.000014372169971466064453125") );
}
/**
* java.math.BigDecimal#BigDecimal(java.lang.String)
*/
public void test_constructor_String_plus_exp() {
/*
* BigDecimal does not support a + sign in the exponent when converting
* from a String.
*
* mc 081106: who says so?!?
*/
BigDecimal bd;
bd = new BigDecimal("+23e-0");
assertEquals("incorrect value", "23", bd.toString());
bd = new BigDecimal("-23e+0");
assertEquals("incorrect value", "-23", bd.toString());
}
/**
* java.math.BigDecimal#setScale(int, java.math.RoundingMode)
*/
public void test_setScaleILjava_math_RoundingMode() {
BigDecimal setScale1 = new BigDecimal(2.323E102);
BigDecimal setScale2 = setScale1.setScale(4);
assertTrue("the number 2.323E102 after setting scale is wrong",
setScale2.scale() == 4);
assertTrue("the representation of the number 2.323E102 is wrong",
setScale2.doubleValue() == 2.323E102);
setScale1 = new BigDecimal("-1.253E-12");
setScale2 = setScale1.setScale(17, RoundingMode.CEILING);
assertTrue("the scale of the number -1.253E-12 after setting scale is wrong",
setScale2.scale() == 17);
assertTrue(
"the representation of the number -1.253E-12 after setting scale is wrong, " + setScale2.toString(),
setScale2.toString().equals("-1.25300E-12"));
// testing rounding Mode RoundingMode.CEILING
setScale1 = new BigDecimal(value, 4);
setScale2 = setScale1.setScale(1, RoundingMode.CEILING);
assertTrue(
"the number 1234.5908 after setting scale to 1/RoundingMode.CEILING is wrong",
setScale2.toString().equals("1234.6") && setScale2.scale() == 1);
BigDecimal setNeg = new BigDecimal(value.negate(), 4);
setScale2 = setNeg.setScale(1, RoundingMode.CEILING);
assertTrue(
"the number -1234.5908 after setting scale to 1/RoundingMode.CEILING is wrong",
setScale2.toString().equals("-1234.5")
&& setScale2.scale() == 1);
// testing rounding Mode RoundingMode.DOWN
setScale2 = setNeg.setScale(1, RoundingMode.DOWN);
assertTrue(
"the number -1234.5908 after setting scale to 1/RoundingMode.DOWN is wrong",
setScale2.toString().equals("-1234.5")
&& setScale2.scale() == 1);
setScale1 = new BigDecimal(value, 4);
setScale2 = setScale1.setScale(1, RoundingMode.DOWN);
assertTrue(
"the number 1234.5908 after setting scale to 1/RoundingMode.DOWN is wrong",
setScale2.toString().equals("1234.5") && setScale2.scale() == 1);
// testing rounding Mode RoundingMode.FLOOR
setScale2 = setScale1.setScale(1, RoundingMode.FLOOR);
assertTrue(
"the number 1234.5908 after setting scale to 1/RoundingMode.FLOOR is wrong",
setScale2.toString().equals("1234.5") && setScale2.scale() == 1);
setScale2 = setNeg.setScale(1, RoundingMode.FLOOR);
assertTrue(
"the number -1234.5908 after setting scale to 1/RoundingMode.FLOOR is wrong",
setScale2.toString().equals("-1234.6")
&& setScale2.scale() == 1);
// testing rounding Mode RoundingMode.HALF_DOWN
setScale2 = setScale1.setScale(3, RoundingMode.HALF_DOWN);
assertTrue(
"the number 1234.5908 after setting scale to 3/RoundingMode.HALF_DOWN is wrong",
setScale2.toString().equals("1234.591")
&& setScale2.scale() == 3);
setScale1 = new BigDecimal(new BigInteger("12345000"), 5);
setScale2 = setScale1.setScale(1, RoundingMode.HALF_DOWN);
assertTrue(
"the number 123.45908 after setting scale to 1/RoundingMode.HALF_DOWN is wrong",
setScale2.toString().equals("123.4") && setScale2.scale() == 1);
setScale2 = new BigDecimal("-1234.5000").setScale(0,
RoundingMode.HALF_DOWN);
assertTrue(
"the number -1234.5908 after setting scale to 0/RoundingMode.HALF_DOWN is wrong",
setScale2.toString().equals("-1234") && setScale2.scale() == 0);
// testing rounding Mode RoundingMode.HALF_EVEN
setScale1 = new BigDecimal(1.2345789D);
setScale2 = setScale1.setScale(4, RoundingMode.HALF_EVEN);
assertTrue(
"the number 1.2345789 after setting scale to 4/RoundingMode.HALF_EVEN is wrong",
setScale2.doubleValue() == 1.2346D && setScale2.scale() == 4);
setNeg = new BigDecimal(-1.2335789D);
setScale2 = setNeg.setScale(2, RoundingMode.HALF_EVEN);
assertTrue(
"the number -1.2335789 after setting scale to 2/RoundingMode.HALF_EVEN is wrong",
setScale2.doubleValue() == -1.23D && setScale2.scale() == 2);
setScale2 = new BigDecimal("1.2345000").setScale(3,
RoundingMode.HALF_EVEN);
assertTrue(
"the number 1.2345789 after setting scale to 3/RoundingMode.HALF_EVEN is wrong",
setScale2.doubleValue() == 1.234D && setScale2.scale() == 3);
setScale2 = new BigDecimal("-1.2345000").setScale(3,
RoundingMode.HALF_EVEN);
assertTrue(
"the number -1.2335789 after setting scale to 3/RoundingMode.HALF_EVEN is wrong",
setScale2.doubleValue() == -1.234D && setScale2.scale() == 3);
// testing rounding Mode RoundingMode.HALF_UP
setScale1 = new BigDecimal("134567.34650");
setScale2 = setScale1.setScale(3, RoundingMode.HALF_UP);
assertTrue(
"the number 134567.34658 after setting scale to 3/RoundingMode.HALF_UP is wrong",
setScale2.toString().equals("134567.347")
&& setScale2.scale() == 3);
setNeg = new BigDecimal("-1234.4567");
setScale2 = setNeg.setScale(0, RoundingMode.HALF_UP);
assertTrue(
"the number -1234.4567 after setting scale to 0/RoundingMode.HALF_UP is wrong",
setScale2.toString().equals("-1234") && setScale2.scale() == 0);
// testing rounding Mode RoundingMode.UNNECESSARY
try {
setScale1.setScale(3, RoundingMode.UNNECESSARY);
fail("arithmetic Exception not caught for round unnecessary");
} catch (ArithmeticException e) {
}
// testing rounding Mode RoundingMode.UP
setScale1 = new BigDecimal("100000.374");
setScale2 = setScale1.setScale(2, RoundingMode.UP);
assertTrue(
"the number 100000.374 after setting scale to 2/RoundingMode.UP is wrong",
setScale2.toString().equals("100000.38")
&& setScale2.scale() == 2);
setNeg = new BigDecimal(-134.34589D);
setScale2 = setNeg.setScale(2, RoundingMode.UP);
assertTrue(
"the number -134.34589 after setting scale to 2/RoundingMode.UP is wrong",
setScale2.doubleValue() == -134.35D && setScale2.scale() == 2);
// testing invalid rounding modes
try {
setScale2 = setScale1.setScale(0, -123);
fail("IllegalArgumentException is not caught for wrong rounding mode");
} catch (IllegalArgumentException e) {
}
}
}