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