/** * Copyright (c) 2012, 2015, Credit Suisse (Anatole Tresch), Werner Keil and others by the @author tag. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.javamoney.moneta.spi; import static junit.framework.Assert.assertEquals; import java.math.BigDecimal; import java.math.BigInteger; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import javax.money.NumberValue; import org.testng.annotations.Test; public class DefaultNumberValueTest { @Test(expectedExceptions = NullPointerException.class) public void shouldReturnNPEWhenUseNullOnOfMethod() { DefaultNumberValue.of(null); } @Test(expectedExceptions = NullPointerException.class) public void shouldReturnNPEWhenUseNullOnConstructor() { new DefaultNumberValue(null); } @Test public void shouldReturnNumberType() { NumberValue numberValueLong = DefaultNumberValue.of(10L); NumberValue numberValueInteger = DefaultNumberValue.of(10); NumberValue numberValueDouble = DefaultNumberValue.of(10D); NumberValue numberValueBigDecimal = DefaultNumberValue.of(BigDecimal.TEN); NumberValue numberValueBigInteger = DefaultNumberValue.of(BigInteger.TEN); assertEquals(numberValueLong.getNumberType(), Long.class); assertEquals(numberValueInteger.getNumberType(), Integer.class); assertEquals(numberValueDouble.getNumberType(), Double.class); assertEquals(numberValueBigDecimal.getNumberType(), BigDecimal.class); assertEquals(numberValueBigInteger.getNumberType(), BigInteger.class); } @Test public void shouldReturnScale() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(numberValue.getScale(), 2); } @Test public void shouldReturnPrecision() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(numberValue.getPrecision(), 5); } @Test public void shouldReturnIntValue() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(numberValue.intValue(), 132); } @Test public void shouldReturnIntValueExact() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132)); assertEquals(numberValue.intValueExact(), 132); } @Test(expectedExceptions = ArithmeticException.class) public void shouldReturnErrorWhenIntValueExactMustBeTruncated() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.12)); numberValue.intValueExact(); } @Test public void shouldReturnLong() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(numberValue.longValue(), 132L); } @Test public void shouldReturnLongValueExact() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132)); assertEquals(numberValue.longValueExact(), 132L); } @Test(expectedExceptions = ArithmeticException.class) public void shouldReturnErrorWhenLongValueExactMustBeTruncated() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.12)); numberValue.longValueExact(); } @Test public void shouldReturnFloat() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(numberValue.floatValue(), 132.21F); } @Test public void shouldReturnDouble() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(numberValue.doubleValue(), 132.21); } @Test public void shouldReturnDoubleExact() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(numberValue.doubleValueExact(), 132.21); } @Test public void shouldReturnAmountFractionNumerator() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(132L, numberValue.getAmountFractionNumerator()); } @Test public void shouldReturnAmountFractionDenominator() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(132.21)); assertEquals(21L, numberValue.getAmountFractionDenominator()); } @Test public void shouldReturnNumberValue() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(21)); assertEquals(Long.valueOf(21L), numberValue.numberValue(Long.class)); assertEquals(Integer.valueOf(21),numberValue.numberValue(Integer.class)); assertEquals(Float.valueOf(21),numberValue.numberValue(Float.class)); assertEquals(Byte.valueOf((byte)21),numberValue.numberValue(Byte.class)); assertEquals(Short.valueOf((short)21),numberValue.numberValue(Short.class)); assertEquals(new AtomicLong(21L).get(),numberValue.numberValue(AtomicLong.class).get()); assertEquals(new AtomicInteger(21).get(),numberValue.numberValue(AtomicInteger.class).get()); assertEquals(BigDecimal.valueOf(21L),numberValue.numberValue(BigDecimal.class)); assertEquals(BigInteger.valueOf(21L),numberValue.numberValue(BigInteger.class)); } @Test public void shouldReturnNumberValueExact() { NumberValue numberValue = DefaultNumberValue.of(BigDecimal.valueOf(21)); assertEquals(Long.valueOf(21L), numberValue.numberValueExact(Long.class)); assertEquals(Integer.valueOf(21),numberValue.numberValueExact(Integer.class)); assertEquals(Float.valueOf(21),numberValue.numberValueExact(Float.class)); assertEquals(Byte.valueOf((byte)21),numberValue.numberValueExact(Byte.class)); assertEquals(Short.valueOf((short)21),numberValue.numberValueExact(Short.class)); assertEquals(new AtomicLong(21L).get(),numberValue.numberValueExact(AtomicLong.class).get()); assertEquals(new AtomicInteger(21).get(),numberValue.numberValueExact(AtomicInteger.class).get()); assertEquals(BigDecimal.valueOf(21L),numberValue.numberValueExact(BigDecimal.class)); assertEquals(BigInteger.valueOf(21L),numberValue.numberValueExact(BigInteger.class)); } }