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 java.math.BigDecimal;
2481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.BigInteger;
2581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.MathContext;
2681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport java.math.RoundingMode;
2781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
2881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughesimport junit.framework.TestCase;
2981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
3081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes/**
3181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Class:  java.math.BigDecimal
3281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * Methods: abs, compareTo, equals, hashCode,
3381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes * max, min, negate, signum
3481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes */
3581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughespublic class BigDecimalCompareTest extends TestCase {
3681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
3781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Abs() of a negative BigDecimal
3881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
3981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testAbsNeg() {
4081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21";
4181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
4281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "123809648392384754573567356745735635678902957849027687.87678287";
4381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.abs().toString());
4481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
4581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
4681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
4781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Abs() of a positive BigDecimal
4881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
4981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testAbsPos() {
5081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+21";
5181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
5281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "123809648392384754573567356745735635678902957849027687.87678287";
5381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, aNumber.abs().toString());
5481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
5581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
5681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
5781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Abs(MathContext) of a negative BigDecimal
5881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
5981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testAbsMathContextNeg() {
6081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "-123809648392384754573567356745735.63567890295784902768787678287E+21";
6181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
6281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int precision = 15;
6381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        RoundingMode rm = RoundingMode.HALF_DOWN;
6481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        MathContext mc = new MathContext(precision, rm);
6581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "1.23809648392385E+53";
6681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = -39;
6781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal res = aNumber.abs(mc);
6881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, res.toString());
6981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, res.scale());
7081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
7181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
7281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
7381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Abs(MathContext) of a positive BigDecimal
7481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
7581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testAbsMathContextPos() {
7681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "123809648392384754573567356745735.63567890295784902768787678287E+21";
7781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(a);
7881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int precision = 41;
7981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        RoundingMode rm = RoundingMode.HALF_EVEN;
8081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        MathContext mc = new MathContext(precision, rm);
8181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String result = "1.2380964839238475457356735674573563567890E+53";
8281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int resScale = -13;
8381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal res = aNumber.abs(mc);
8481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect value", result, res.toString());
8581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect scale", resScale, res.scale());
8681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
8781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
8881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
8981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Compare to a number of an equal scale
9081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
9181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testCompareEqualScale1() {
9281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "12380964839238475457356735674573563567890295784902768787678287";
9381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = 18;
9481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String b = "4573563567890295784902768787678287";
9581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int bScale = 18;
9681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
9781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
9881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = 1;
9981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect result", result, aNumber.compareTo(bNumber));
10081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
10181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
10281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
10381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Compare to a number of an equal scale
10481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
10581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testCompareEqualScale2() {
10681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "12380964839238475457356735674573563567890295784902768787678287";
10781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = 18;
10881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String b = "4573563923487289357829759278282992758247567890295784902768787678287";
10981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int bScale = 18;
11081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
11181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
11281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = -1;
11381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect result", result, aNumber.compareTo(bNumber));
11481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
11581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
11681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
11781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Compare to a number of an greater scale
11881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
11981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testCompareGreaterScale1() {
12081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "12380964839238475457356735674573563567890295784902768787678287";
12181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = 28;
12281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String b = "4573563567890295784902768787678287";
12381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int bScale = 18;
12481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
12581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
12681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = 1;
12781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect result", result, aNumber.compareTo(bNumber));
12881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
12981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
13081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
13181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Compare to a number of an greater scale
13281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
13381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testCompareGreaterScale2() {
13481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "12380964839238475457356735674573563567890295784902768787678287";
13581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = 48;
13681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String b = "4573563567890295784902768787678287";
13781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int bScale = 2;
13881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
13981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
14081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = -1;
14181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect result", result, aNumber.compareTo(bNumber));
14281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
14381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
14481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
14581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Compare to a number of an less scale
14681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
14781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testCompareLessScale1() {
14881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "12380964839238475457356735674573563567890295784902768787678287";
14981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = 18;
15081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String b = "4573563567890295784902768787678287";
15181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int bScale = 28;
15281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
15381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
15481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = 1;
15581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect result", result, aNumber.compareTo(bNumber));
15681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
15781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
15881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
15981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Compare to a number of an less scale
16081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
16181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testCompareLessScale2() {
16281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String a = "12380964839238475457356735674573";
16381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int aScale = 36;
16481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        String b = "45735635948573894578349572001798379183767890295784902768787678287";
16581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int bScale = 48;
16681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
16781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
16881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = -1;
16981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals("incorrect result", result, aNumber.compareTo(bNumber));
17081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
17181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
17281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
17381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Equals() for unequal BigDecimals
17481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
17581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testEqualsUnequal1() {
17681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
17781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = -24;
17881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "7472334223847623782375469293018787918347987234564568";
17981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 13;
18081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
18181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
18281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertFalse(aNumber.equals(bNumber));
18381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
18481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
18581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
18681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Equals() for unequal BigDecimals
18781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
18881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testEqualsUnequal2() {
18981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
19081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = -24;
19181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "92948782094488478231212478987482988429808779810457634781384756794987";
19281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 13;
19381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
19481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
19581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertFalse(aNumber.equals(bNumber));
19681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
19781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
19881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
19981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Equals() for unequal BigDecimals
20081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
20181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testEqualsUnequal3() {
20281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
20381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = -24;
20481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "92948782094488478231212478987482988429808779810457634781384756794987";
20581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
20681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertFalse(aNumber.equals(b));
20781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
20881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
20981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
21081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * equals() for equal BigDecimals
21181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
21281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testEqualsEqual() {
21381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
21481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = -24;
21581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "92948782094488478231212478987482988429808779810457634781384756794987";
21681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = -24;
21781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
21881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
21981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals(aNumber, bNumber);
22081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
22181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
22281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
22381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * equals() for equal BigDecimals
22481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
22581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testEqualsNull() {
22681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
22781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = -24;
22881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
22981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertFalse(aNumber.equals(null));
23081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
23181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
23281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
23381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * hashCode() for equal BigDecimals
23481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
23581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testHashCodeEqual() {
23681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
23781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = -24;
23881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "92948782094488478231212478987482988429808779810457634781384756794987";
23981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = -24;
24081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
24181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
24281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", aNumber.hashCode(), bNumber.hashCode());
24381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
24481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
24581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
24681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * hashCode() for unequal BigDecimals
24781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
24881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testHashCodeUnequal() {
24981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "8478231212478987482988429808779810457634781384756794987";
25081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
25181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "92948782094488478231212478987482988429808779810457634781384756794987";
25281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = -24;
25381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
25481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
25581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertTrue("incorrect value", aNumber.hashCode() != bNumber.hashCode());
25681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
25781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
25881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
25981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * max() for equal BigDecimals
26081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
26181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testMaxEqual() {
26281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "8478231212478987482988429808779810457634781384756794987";
26381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
26481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "8478231212478987482988429808779810457634781384756794987";
26581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 41;
26681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "8478231212478987482988429808779810457634781384756794987";
26781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
26881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
26981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
27081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
27181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.max(bNumber));
27281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
27381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
27481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
27581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * max() for unequal BigDecimals
27681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
27781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testMaxUnequal1() {
27881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
27981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 24;
28081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "92948782094488478231212478987482988429808779810457634781384756794987";
28181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 41;
28281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "92948782094488478231212478987482988429808779810457634781384756794987";
28381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 24;
28481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
28581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
28681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
28781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.max(bNumber));
28881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
28981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
29081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
29181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * max() for unequal BigDecimals
29281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
29381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testMaxUnequal2() {
29481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
29581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
29681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "94488478231212478987482988429808779810457634781384756794987";
29781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 41;
29881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "92948782094488478231212478987482988429808779810457634781384756794987";
29981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
30081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
30181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
30281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
30381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.max(bNumber));
30481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
30581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
30681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
30781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * min() for equal BigDecimals
30881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
30981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testMinEqual() {
31081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "8478231212478987482988429808779810457634781384756794987";
31181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
31281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "8478231212478987482988429808779810457634781384756794987";
31381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 41;
31481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "8478231212478987482988429808779810457634781384756794987";
31581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
31681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
31781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
31881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
31981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.min(bNumber));
32081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
32181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
32281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
32381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * min() for unequal BigDecimals
32481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
32581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testMinUnequal1() {
32681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
32781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 24;
32881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "92948782094488478231212478987482988429808779810457634781384756794987";
32981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 41;
33081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "92948782094488478231212478987482988429808779810457634781384756794987";
33181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
33281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
33381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
33481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
33581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.min(bNumber));
33681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
33781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
33881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
33981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * min() for unequal BigDecimals
34081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
34181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testMinUnequal2() {
34281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
34381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
34481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String b = "94488478231212478987482988429808779810457634781384756794987";
34581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int bScale = 41;
34681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "94488478231212478987482988429808779810457634781384756794987";
34781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
34881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
34981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal bNumber = new BigDecimal(new BigInteger(b), bScale);
35081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
35181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.min(bNumber));
35281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
35381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
35481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
35581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * plus() for a positive BigDecimal
35681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
35781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testPlusPositive() {
35881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
35981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
36081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "92948782094488478231212478987482988429808779810457634781384756794987";
36181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
36281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
36381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
36481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.plus());
36581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
36681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
36781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
36881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * plus(MathContext) for a positive BigDecimal
36981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
37081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testPlusMathContextPositive() {
37181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
37281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
37381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int precision = 37;
37481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       RoundingMode rm = RoundingMode.FLOOR;
37581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       MathContext mc = new MathContext(precision, rm);
37681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "929487820944884782312124789.8748298842";
37781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 10;
37881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
37981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal res = aNumber.plus(mc);
38081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", c, res.toString());
38181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect scale", cScale, res.scale());
38281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
38381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
38481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
38581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * plus() for a negative BigDecimal
38681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
38781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testPlusNegative() {
38881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
38981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
39081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "-92948782094488478231212478987482988429808779810457634781384756794987";
39181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
39281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
39381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
39481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.plus());
39581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
39681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
39781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
39881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * plus(MathContext) for a negative BigDecimal
39981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
40081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testPlusMathContextNegative() {
40181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
40281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 49;
40381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int precision = 46;
40481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       RoundingMode rm = RoundingMode.CEILING;
40581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       MathContext mc = new MathContext(precision, rm);
40681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "-9294878209448847823.121247898748298842980877981";
40781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 27;
40881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
40981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal res = aNumber.plus(mc);
41081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", c, res.toString());
41181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect scale", cScale, res.scale());
41281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
41381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
41481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
41581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * negate() for a positive BigDecimal
41681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
41781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testNegatePositive() {
41881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
41981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
42081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "-92948782094488478231212478987482988429808779810457634781384756794987";
42181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
42281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
42381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
42481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.negate());
42581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
42681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
42781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
42881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * negate(MathContext) for a positive BigDecimal
42981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
43081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testNegateMathContextPositive() {
43181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
43281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
43381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int precision = 37;
43481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       RoundingMode rm = RoundingMode.FLOOR;
43581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       MathContext mc = new MathContext(precision, rm);
436053490cb125225453fd17ec42653595233365249Elliott Hughes       String c = "-929487820944884782312124789.8748298843";
43781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 10;
43881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
43981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal res = aNumber.negate(mc);
44081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", c, res.toString());
44181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect scale", cScale, res.scale());
44281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
44381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
44481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
44581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * negate() for a negative BigDecimal
44681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
44781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testNegateNegative() {
44881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
44981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
45081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String c = "92948782094488478231212478987482988429808779810457634781384756794987";
45181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 41;
45281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
45381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal cNumber = new BigDecimal(new BigInteger(c), cScale);
45481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", cNumber, aNumber.negate());
45581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
45681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
45781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
45881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * negate(MathContext) for a negative BigDecimal
45981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
46081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testNegateMathContextNegative() {
46181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
46281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 49;
46381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int precision = 46;
46481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       RoundingMode rm = RoundingMode.CEILING;
46581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       MathContext mc = new MathContext(precision, rm);
466053490cb125225453fd17ec42653595233365249Elliott Hughes       String c = "9294878209448847823.121247898748298842980877982";
46781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int cScale = 27;
46881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
46981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal res = aNumber.negate(mc);
47081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", c, res.toString());
47181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect scale", cScale, res.scale());
47281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
47381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
47481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
47581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * signum() for a positive BigDecimal
47681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
47781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testSignumPositive() {
47881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "92948782094488478231212478987482988429808779810457634781384756794987";
47981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
48081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
48181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", 1, aNumber.signum());
48281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
48381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
48481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
48581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * signum() for a negative BigDecimal
48681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
48781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testSignumNegative() {
48881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
48981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
49081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
49181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", -1, aNumber.signum());
49281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
49381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
49481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /**
49581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * signum() for zero
49681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
49781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testSignumZero() {
49881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       String a = "0";
49981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       int aScale = 41;
50081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       BigDecimal aNumber = new BigDecimal(new BigInteger(a), aScale);
50181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes       assertEquals("incorrect value", 0, aNumber.signum());
50281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
50381ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes
50481ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    /*
50581ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     * Regression test for HARMONY-6406
50681ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes     */
50781ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    public void testApproxPrecision() {
50881ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        BigDecimal testInstance = BigDecimal.TEN.multiply(new BigDecimal("0.1"));
50981ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        int result = testInstance.compareTo(new BigDecimal("1.00"));
51081ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes        assertEquals(0, result);
51181ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes    }
51281ccea015ba3d2a2da1c641b14dd3713c6b40a76Elliott Hughes}
513