181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/*
281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  this work for additional information regarding copyright ownership.
581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  (the "License"); you may not use this file except in compliance with
781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  the License.  You may obtain a copy of the License at
881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *
981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
1081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *
1181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
1281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
1381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  See the License for the specific language governing permissions and
1581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes *  limitations under the License.
1681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */
1781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/**
1881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * @author Elena Semukhina
1981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */
2081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
2181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughespackage org.apache.harmony.tests.java.math;
2281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
2381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport junit.framework.TestCase;
2481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.BigDecimal;
2581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.BigInteger;
2681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
2781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/**
2881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Class:  java.math.BigDecimal
2981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Methods: doubleValue, floatValue, intValue, longValue,
3081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * valueOf, toString, toBigInteger
3181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */
3281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughespublic class BigDecimalConvertTest extends TestCase {
3381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
3481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Double value of a negative BigDecimal
3581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
3681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testDoubleValueNeg() {
3781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21";
3881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
3981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double result = -1.2380964839238476E53;
4081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.doubleValue(), 0);
4181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
4281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
4381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
4481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Double value of a positive BigDecimal
4581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
4681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testDoubleValuePos() {
4781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+21";
4881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
4981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double result = 1.2380964839238476E53;
5081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.doubleValue(), 0);
5181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
5281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
5381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
5481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Double value of a large positive BigDecimal
5581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
5681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testDoubleValuePosInfinity() {
5781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+400";
5881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
5981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double result = Double.POSITIVE_INFINITY;
6081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.doubleValue(), 0);
6181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
6281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
6381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
6481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Double value of a large negative BigDecimal
6581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
6681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testDoubleValueNegInfinity() {
6781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+400";
6881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
6981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double result = Double.NEGATIVE_INFINITY;
7081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.doubleValue(), 0);
7181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
7281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
7381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
7481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Double value of a small negative BigDecimal
7581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
7681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testDoubleValueMinusZero() {
7781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E-400";
7881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
7981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long minusZero = -9223372036854775808L;
8081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double result = aNumber.doubleValue();
8181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", Double.doubleToLongBits(result) == minusZero);
8281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
8381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
8481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
8581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Double value of a small positive BigDecimal
8681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
8781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testDoubleValuePlusZero() {
8881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E-400";
8981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
9081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long zero = 0;
9181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double result = aNumber.doubleValue();
9281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", Double.doubleToLongBits(result) == zero);
9381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
9481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
9581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
9681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Float value of a negative BigDecimal
9781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
9881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testFloatValueNeg() {
9981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-1238096483923847.6356789029578E+21";
10081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
10181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        float result = -1.2380965E36F;
10281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.floatValue() == result);
10381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
10481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
10581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
10681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Float value of a positive BigDecimal
10781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
10881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testFloatValuePos() {
10981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "1238096483923847.6356789029578E+21";
11081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
11181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        float result = 1.2380965E36F;
11281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.floatValue() == result);
11381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
11481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
11581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
11681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Float value of a large positive BigDecimal
11781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
11881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testFloatValuePosInfinity() {
11981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648373567356745735.6356789787678287E+200";
12081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
12181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        float result = Float.POSITIVE_INFINITY;
12281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.floatValue() == result);
12381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
12481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
12581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
12681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Float value of a large negative BigDecimal
12781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
12881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testFloatValueNegInfinity() {
12981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384755735.63567887678287E+200";
13081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
13181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        float result = Float.NEGATIVE_INFINITY;
13281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.floatValue() == result);
13381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
13481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
13581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
13681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Float value of a small negative BigDecimal
13781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
13881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testFloatValueMinusZero() {
13981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E-400";
14081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
14181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int minusZero = -2147483648;
14281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        float result = aNumber.floatValue();
14381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", Float.floatToIntBits(result) == minusZero);
14481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
14581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
14681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
14781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Float value of a small positive BigDecimal
14881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
14981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testFloatValuePlusZero() {
15081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E-400";
15181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
15281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int zero = 0;
15381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        float result = aNumber.floatValue();
15481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", Float.floatToIntBits(result) == zero);
15581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
15681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
15781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
15881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Integer value of a negative BigDecimal
15981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
16081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testIntValueNeg() {
16181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21";
16281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
16381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = 218520473;
16481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.intValue() == result);
16581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
16681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
16781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
16881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Integer value of a positive BigDecimal
16981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
17081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testIntValuePos() {
17181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+21";
17281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
17381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = -218520473;
17481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.intValue() == result);
17581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
17681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
17781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
17881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Long value of a negative BigDecimal
17981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
18081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testLongValueNeg() {
18181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21";
18281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
18381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long result = -1246043477766677607L;
18481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.longValue() == result);
18581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
18681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
18781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
18881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Long value of a positive BigDecimal
18981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
19081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testLongValuePos() {
19181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+21";
19281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
19381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long result = 1246043477766677607L;
19481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.longValue() == result);
19581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
19681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
19781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
19881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * scaleByPowerOfTen(int n)
19981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
20081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testScaleByPowerOfTen1() {
20181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "1231212478987482988429808779810457634781384756794987";
20281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = 13;
20381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
20481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal result = aNumber.scaleByPowerOfTen(10);
20581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String res = "1231212478987482988429808779810457634781384756794.987";
20681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = 3;
20781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", res, result.toString());
20881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, result.scale());
20981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
21081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
21181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
21281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * scaleByPowerOfTen(int n)
21381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
21481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testScaleByPowerOfTen2() {
21581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "1231212478987482988429808779810457634781384756794987";
21681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = -13;
21781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
21881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal result = aNumber.scaleByPowerOfTen(10);
21981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String res = "1.231212478987482988429808779810457634781384756794987E+74";
22081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = -23;
22181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", res, result.toString());
22281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, result.scale());
22381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
22481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
22581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
22681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a positive BigDecimal to BigInteger
22781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
22881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerPos1() {
22981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+21";
23081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger bNumber = new BigInteger("123809648392384754573567356745735635678902957849027687");
23181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
23281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigInteger();
23381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", result.equals(bNumber));
23481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
23581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
23681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
23781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a positive BigDecimal to BigInteger
23881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
23981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerPos2() {
24081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+15";
24181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger bNumber = new BigInteger("123809648392384754573567356745735635678902957849");
24281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
24381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigInteger();
24481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", result.equals(bNumber));
24581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
24681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
24781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
24881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a positive BigDecimal to BigInteger
24981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
25081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerPos3() {
25181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+45";
25281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger bNumber = new BigInteger("123809648392384754573567356745735635678902957849027687876782870000000000000000");
25381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
25481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigInteger();
25581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", result.equals(bNumber));
25681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
25781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
25881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
25981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal to BigInteger
26081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
26181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerNeg1() {
26281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21";
26381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger bNumber = new BigInteger("-123809648392384754573567356745735635678902957849027687");
26481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
26581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigInteger();
26681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", result.equals(bNumber));
26781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
26881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
26981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
27081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal to BigInteger
27181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
27281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerNeg2() {
27381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+15";
27481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger bNumber = new BigInteger("-123809648392384754573567356745735635678902957849");
27581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
27681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigInteger();
27781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", result.equals(bNumber));
27881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
27981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
28081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
28181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal to BigInteger
28281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
28381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerNeg3() {
28481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+45";
28581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger bNumber = new BigInteger("-123809648392384754573567356745735635678902957849027687876782870000000000000000");
28681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
28781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigInteger();
28881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes         assertTrue("incorrect value", result.equals(bNumber));
28981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
29081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
29181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
29281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a small BigDecimal to BigInteger
29381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
29481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerZero() {
29581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E-500";
29681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger bNumber = new BigInteger("0");
29781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
29881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigInteger();
29981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", result.equals(bNumber));
30081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
30181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
30281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
30381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * toBigIntegerExact()
30481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
30581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerExact1() {
30681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+45";
30781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
30881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String res = "-123809648392384754573567356745735635678902957849027687876782870000000000000000";
30981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigInteger result = aNumber.toBigIntegerExact();
31081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", res, result.toString());
31181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
31281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
31381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
31481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * toBigIntegerExact()
31581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
31681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToBigIntegerExactException() {
31781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E-10";
31881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
31981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        try {
32081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes            aNumber.toBigIntegerExact();
32181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes            fail("java.lang.ArithmeticException has not been thrown");
32281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        } catch (java.lang.ArithmeticException e) {
32381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes            return;
32481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        }
32581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
32681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
32781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
32881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a positive BigDecimal to an engineering string representation
32981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
33081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToEngineeringStringPos() {
33181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E-501";
33281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
33381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "123.80964839238475457356735674573563567890295784902768787678287E-471";
33481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.toEngineeringString());
33581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
33681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
33781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
33881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal to an engineering string representation
33981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
34081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToEngineeringStringNeg() {
34181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E-501";
34281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
34381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-123.80964839238475457356735674573563567890295784902768787678287E-471";
34481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.toEngineeringString());
34581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
34681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
34781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
34881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal to an engineering string representation
34981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
35081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToEngineeringStringZeroPosExponent() {
35181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "0.0E+16";
35281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
35381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "0E+15";
35481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.toEngineeringString());
35581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
35681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
35781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
35881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal to an engineering string representation
35981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
36081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToEngineeringStringZeroNegExponent() {
36181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "0.0E-16";
36281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
36381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "0.00E-15";
36481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.toEngineeringString());
36581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
36681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
36781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
36881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal with a negative exponent to a plain string
36981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * representation; scale == 0.
37081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
37181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     public void testToPlainStringNegNegExp() {
37281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E-100";
37381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
37481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-0.000000000000000000000000000000000000000000000000000000000000000000012380964839238475457356735674573563567890295784902768787678287";
37581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toPlainString().equals(result));
37681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
37781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
37881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
37981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal with a positive exponent
38081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * to a plain string representation;
38181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * scale == 0.
38281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
38381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     public void testToPlainStringNegPosExp() {
38481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E100";
38581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
38681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-1238096483923847545735673567457356356789029578490276878767828700000000000000000000000000000000000000000000000000000000000000000000000";
38781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toPlainString().equals(result));
38881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
38981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
39081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
39181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a positive BigDecimal with a negative exponent
39281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * to a plain string representation;
39381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * scale == 0.
39481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
39581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     public void testToPlainStringPosNegExp() {
39681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E-100";
39781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
39881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "0.000000000000000000000000000000000000000000000000000000000000000000012380964839238475457356735674573563567890295784902768787678287";
39981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toPlainString().equals(result));
40081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
40181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
40281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
40381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal with a negative exponent
40481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * to a plain string representation;
40581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * scale == 0.
40681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
40781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     public void testToPlainStringPosPosExp() {
40881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+100";
40981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
41081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "1238096483923847545735673567457356356789029578490276878767828700000000000000000000000000000000000000000000000000000000000000000000000";
41181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toPlainString().equals(result));
41281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
41381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
41481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
41581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a BigDecimal to a string representation;
41681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * scale == 0.
41781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
41881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     public void testToStringZeroScale() {
41981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735635678902957849027687876782870";
42081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a));
42181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-123809648392384754573567356745735635678902957849027687876782870";
42281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
42381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
42481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
42581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
42681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a positive BigDecimal to a string representation
42781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
42881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToStringPos() {
42981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E-500";
43081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
43181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "1.2380964839238475457356735674573563567890295784902768787678287E-468";
43281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
43381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
43481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
43581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
43681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Convert a negative BigDecimal to a string representation
43781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
43881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testToStringNeg() {
43981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123.4564563673567380964839238475457356735674573563567890295784902768787678287E-5";
44081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
44181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-0.001234564563673567380964839238475457356735674573563567890295784902768787678287";
44281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
44381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
44481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
44581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
44681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a positive long value; scale == 0
44781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
44881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfPosZeroScale() {
44981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long a = 98374823947823578L;
45081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = BigDecimal.valueOf(a);
45181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "98374823947823578";
45281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
45381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
45481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
45581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
45681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a negative long value; scale is 0
45781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
45881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfNegZeroScale() {
45981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long a = -98374823947823578L;
46081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = BigDecimal.valueOf(a);
46181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-98374823947823578";
46281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
46381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
46481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
46581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
46681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a negative long value; scale is positive
46781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
46881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfNegScalePos() {
46981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long a = -98374823947823578L;
47081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int scale = 12;
47181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = BigDecimal.valueOf(a, scale);
47281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-98374.823947823578";
47381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
47481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
47581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
47681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
47781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a negative long value; scale is negative
47881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
47981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfNegScaleNeg() {
48081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long a = -98374823947823578L;
48181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int scale = -12;
48281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = BigDecimal.valueOf(a, scale);
48381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "-9.8374823947823578E+28";
48481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
48581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
48681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
48781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
48881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a negative long value; scale is positive
48981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
49081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfPosScalePos() {
49181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long a = 98374823947823578L;
49281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int scale = 12;
49381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = BigDecimal.valueOf(a, scale);
49481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "98374.823947823578";
49581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
49681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
49781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
49881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
49981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a negative long value; scale is negative
50081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
50181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfPosScaleNeg() {
50281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        long a = 98374823947823578L;
50381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int scale = -12;
50481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = BigDecimal.valueOf(a, scale);
50581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "9.8374823947823578E+28";
50681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertTrue("incorrect value", aNumber.toString().equals(result));
50781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
50881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
50981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
51081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a negative double value
51181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
51281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfDoubleNeg() {
51381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double a = -65678765876567576.98788767;
51481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal result = BigDecimal.valueOf(a);
51581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String res = "-65678765876567576";
51681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = 0;
51781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", res, result.toString());
51881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, result.scale());
51981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
52081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
52181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
52281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a positive double value
52381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
52481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfDoublePos1() {
52581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double a = 65678765876567576.98788767;
52681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal result = BigDecimal.valueOf(a);
52781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String res = "65678765876567576";
52881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = 0;
52981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", res, result.toString());
53081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, result.scale());
53181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
53281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
53381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
53481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a positive double value
53581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
53681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfDoublePos2() {
53781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double a = 12321237576.98788767;
53881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal result = BigDecimal.valueOf(a);
53981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String res = "12321237576.987888";
54081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = 6;
54181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", res, result.toString());
54281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, result.scale());
54381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
54481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
54581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
54681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Create a BigDecimal from a positive double value
54781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
54881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfDoublePos3() {
54981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double a = 12321237576.9878838;
55081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal result = BigDecimal.valueOf(a);
55181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String res = "12321237576.987885";
55281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = 6;
55381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", res, result.toString());
55481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, result.scale());
55581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
55681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
55781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
55881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * valueOf(Double.NaN)
55981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
56081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testValueOfDoubleNaN() {
56181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        double a = Double.NaN;
56281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        try {
56381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes            BigDecimal.valueOf(a);
56481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes            fail("NumberFormatException has not been thrown for Double.NaN");
56581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        } catch (NumberFormatException e) {
56681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes            return;
56781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        }
56881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
56981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes}
570