001/* 002 * Copyright (c) 2012, 2013, Werner Keil, Credit Suisse (Anatole Tresch). Licensed under the Apache 003 * License, Version 2.0 (the "License"); you may not use this file except in compliance with the 004 * License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 005 * Unless required by applicable law or agreed to in writing, software distributed under the License 006 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 007 * or implied. See the License for the specific language governing permissions and limitations under 008 * the License. Contributors: Anatole Tresch - initial version. 009 */ 010package org.javamoney.tck.tests.internal; 011 012import javax.money.NumberValue; 013import java.math.BigDecimal; 014import java.math.BigInteger; 015import java.math.MathContext; 016import java.util.Objects; 017 018/** 019 * Test NumberValue implementation. 020 */ 021public final class TestNumberValue extends NumberValue { 022 private static final long serialVersionUID = 1L; 023 024 private BigDecimal value; 025 026 public TestNumberValue(Number value) { 027 Objects.requireNonNull(value); 028 this.value = new BigDecimal(String.valueOf(value)); 029 } 030 031 @Override 032 public long longValue() { 033 return value.longValue(); 034 } 035 036 @Override 037 public int intValue() { 038 return value.intValue(); 039 } 040 041 @Override 042 public float floatValue() { 043 return value.floatValue(); 044 } 045 046 @Override 047 public double doubleValue() { 048 return value.doubleValue(); 049 } 050 051 @Override 052 public <T extends Number> T numberValueExact(Class<T> numberType) { 053 return null; 054 } 055 056 @Override 057 public long getAmountFractionNumerator() { 058 return 0; 059 } 060 061 @Override 062 public long getAmountFractionDenominator() { 063 return 0; 064 } 065 066 @Override 067 public <T extends Number> T numberValue(Class<T> numberType) { 068 if (numberType.equals(Integer.class)) { 069 return (T) Integer.valueOf(value.intValue()); 070 } 071 if (numberType.equals(BigInteger.class)) { 072 return (T) BigInteger.valueOf(value.intValue()); 073 } 074 if (numberType.equals(BigDecimal.class)) { 075 return (T) BigDecimal.valueOf(value.doubleValue()); 076 } 077 throw new UnsupportedOperationException(numberType.getCanonicalName()); 078 } 079 080 @Override 081 public NumberValue round(MathContext mathContext) { 082 return new TestNumberValue(this.value.round(mathContext)); 083 } 084 085 @Override 086 public long longValueExact() { 087 return value.longValue(); 088 } 089 090 @Override 091 public int intValueExact() { 092 return value.intValue(); 093 } 094 095 @Override 096 public int getScale() { 097 return value.scale(); 098 } 099 100 @Override 101 public int getPrecision() { 102 return value.precision(); 103 } 104 105 @Override 106 public Class<?> getNumberType() { 107 return BigDecimal.class; 108 } 109 110 @Override 111 public double doubleValueExact() { 112 return value.doubleValue(); 113 } 114 115 @Override 116 public String toString() { 117 return this.value.toString(); 118 } 119}