001/* 002 * Licensed under the Apache License, Version 2.0 (the "License"); 003 * you may not use this file except in compliance with the License. 004 * You may obtain a copy of the License at 005 * 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * 008 * Unless required by applicable law or agreed to in writing, software 009 * distributed under the License is distributed on an "AS IS" BASIS, 010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 011 * See the License for the specific language governing permissions and 012 * limitations under the License. 013 */ 014package org.gbif.utils.number; 015 016import java.math.BigDecimal; 017 018import org.junit.jupiter.api.Test; 019 020import static org.junit.jupiter.api.Assertions.assertEquals; 021import static org.junit.jupiter.api.Assertions.assertNotEquals; 022import static org.junit.jupiter.api.Assertions.assertThrows; 023 024/** 025 * 026 * Tests for BigDecimal utility class 027 * 028 */ 029public class BigDecimalUtilsTest { 030 031 /** 032 * This test is simply to illustrate why we use the BigDecimal(String) constructor. 033 * new BigDecimal(23.1) equals 23.10000000000000142108547152020037174224853515625 034 */ 035 @Test 036 public void testBigDecimalConstructor() { 037 assertNotEquals(new BigDecimal("23.1"), new BigDecimal(23.1d)); 038 } 039 040 @Test 041 public void testBigDecimalConstructorNull() { 042 assertThrows(NullPointerException.class, () -> BigDecimalUtils.fromDouble(null, false)); 043 } 044 045 /** 046 * This test is simply to show why we are not using BigDecimal stripTrailingZeros function. 047 */ 048 @Test 049 public void demonstrateBigDecimalStripTrailingZerosEquality() { 050 assertNotEquals(new BigDecimal("500.0").stripTrailingZeros(), new BigDecimal("500")); 051 052 // but, compareTo function will work as expected 053 assertEquals(0, new BigDecimal("500").compareTo(new BigDecimal("500.0").stripTrailingZeros())); 054 } 055 056 @Test 057 public void testFromDouble() { 058 assertEquals(new BigDecimal("23.4"), BigDecimalUtils.fromDouble(23.4, true)); 059 assertEquals(new BigDecimal("23.4"), BigDecimalUtils.fromDouble(23.4, false)); 060 061 assertEquals(new BigDecimal("23"), BigDecimalUtils.fromDouble(23d, true)); 062 assertEquals(new BigDecimal("23.0"), BigDecimalUtils.fromDouble(23d, false)); 063 064 assertEquals(new BigDecimal("23"), BigDecimalUtils.fromDouble(23.0, true)); 065 assertEquals(new BigDecimal("23.0"), BigDecimalUtils.fromDouble(23.0, false)); 066 067 assertEquals(new BigDecimal("23"), BigDecimalUtils.fromDouble(23.0000000000, true)); 068 assertEquals(new BigDecimal("23.0"), BigDecimalUtils.fromDouble(23.0000000000, false)); 069 070 assertEquals( 071 new BigDecimal("23.000000000001"), BigDecimalUtils.fromDouble(23.000000000001, true)); 072 assertEquals( 073 new BigDecimal("23.000000000001"), BigDecimalUtils.fromDouble(23.000000000001, false)); 074 075 assertEquals(new BigDecimal("500"), BigDecimalUtils.fromDouble(500d, true)); 076 assertEquals(new BigDecimal("500.0"), BigDecimalUtils.fromDouble(500d, false)); 077 078 assertEquals(new BigDecimal("50000"), BigDecimalUtils.fromDouble(50000d, true)); 079 assertEquals(new BigDecimal("50000.0"), BigDecimalUtils.fromDouble(50000d, false)); 080 081 assertEquals(new BigDecimal("50000.01"), BigDecimalUtils.fromDouble(50000.01, true)); 082 assertEquals(new BigDecimal("50000.01"), BigDecimalUtils.fromDouble(50000.01, false)); 083 } 084}