import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
-import java.math.BigDecimal;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Uint64;
import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
private static final QName INT64 = QName.create(DECIMAL, "int64");
private static final QName UINT64 = QName.create(DECIMAL, "uint64");
- static final LeafNode<?> DECIMAL_DATA = ImmutableNodes.leafNode(DECIMAL, new BigDecimal("1.1"));
+ static final LeafNode<?> DECIMAL_DATA = ImmutableNodes.leafNode(DECIMAL, Decimal64.valueOf("1.1"));
static final LeafNode<?> INT64_DATA = ImmutableNodes.leafNode(INT64, 2L);
static final LeafNode<?> UINT64_DATA = ImmutableNodes.leafNode(UINT64, Uint64.ONE);
*/
package org.opendaylight.yangtools.yang.data.api.codec;
-import java.math.BigDecimal;
import org.opendaylight.yangtools.concepts.IllegalArgumentCodec;
+import org.opendaylight.yangtools.yang.common.Decimal64;
-public interface DecimalCodec<T> extends IllegalArgumentCodec<T, BigDecimal> {
+public interface DecimalCodec<T> extends IllegalArgumentCodec<T, Decimal64> {
}
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
-import java.math.BigDecimal;
import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.data.api.codec.DecimalCodec;
import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
* Do not use this class outside of yangtools, its presence does not fall into the API stability contract.
*/
@Beta
-public final class DecimalStringCodec extends TypeDefinitionAwareCodec<BigDecimal, DecimalTypeDefinition>
+public final class DecimalStringCodec extends TypeDefinitionAwareCodec<Decimal64, DecimalTypeDefinition>
implements DecimalCodec<String> {
private DecimalStringCodec(final DecimalTypeDefinition typeDef) {
- super(typeDef, BigDecimal.class);
+ super(typeDef, Decimal64.class);
}
public static @NonNull DecimalStringCodec from(final DecimalTypeDefinition type) {
}
@Override
- protected BigDecimal deserializeImpl(final String product) {
+ protected Decimal64 deserializeImpl(final String product) {
// FIXME: run value validation
- return new BigDecimal(product);
+ return Decimal64.valueOf(product);
}
@Override
- protected @NonNull String serializeImpl(@NonNull final BigDecimal input) {
+ protected String serializeImpl(final Decimal64 input) {
return input.toString();
}
}
import static org.junit.Assert.assertEquals;
-import java.math.BigDecimal;
import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.codec.DecimalCodec;
import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
@Test
public void testSerialize() {
DecimalCodec<String> codec = TypeDefinitionAwareCodecTestHelper.getCodec(getType(), DecimalCodec.class);
- assertEquals("serialize", "123.456", codec.serialize(new BigDecimal("123.456")));
+ assertEquals("123.456", codec.serialize(Decimal64.valueOf("123.456")));
}
@SuppressWarnings("unchecked")
public void testDeserialize() {
DecimalCodec<String> codec = TypeDefinitionAwareCodecTestHelper.getCodec(getType(), DecimalCodec.class);
- assertEquals("deserialize", new BigDecimal("123.456"), codec.deserialize("123.456"));
+ assertEquals(Decimal64.valueOf("123.456"), codec.deserialize("123.456"));
TypeDefinitionAwareCodecTestHelper.deserializeWithExpectedIllegalArgEx(codec, "12o.3");
TypeDefinitionAwareCodecTestHelper.deserializeWithExpectedIllegalArgEx(codec, "");
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertThrows;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
public static void deserializeWithExpectedIllegalArgEx(final Codec<String, ?, IllegalArgumentException> codec,
final @NonNull String param) {
- try {
- codec.deserialize(param);
- fail("Expected IllegalArgumentException");
- } catch (IllegalArgumentException e) {
- // Expected ...
- }
+ assertThrows(IllegalArgumentException.class, () -> codec.deserialize(param));
}
public static EnumTypeDefinition toEnumTypeDefinition(final String... enums) {
*/
package org.opendaylight.yangtools.yang.model.api.type;
-import java.math.BigDecimal;
import java.util.Objects;
+import org.opendaylight.yangtools.yang.common.Decimal64;
/**
* Contains methods for getting data from the YANG <code>type</code> substatement for <code>decimal64</code> built-in
* type.
*/
-public interface DecimalTypeDefinition extends RangeRestrictedTypeDefinition<DecimalTypeDefinition, BigDecimal> {
+public interface DecimalTypeDefinition extends RangeRestrictedTypeDefinition<DecimalTypeDefinition, Decimal64> {
/**
* Returns integer between 1 and 18 inclusively.
*
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableRangeSet;
import com.google.common.collect.Range;
-import java.math.BigDecimal;
import java.util.Collection;
import java.util.Optional;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
-final class BaseDecimalType extends AbstractRangeRestrictedBaseType<DecimalTypeDefinition, BigDecimal>
+final class BaseDecimalType extends AbstractRangeRestrictedBaseType<DecimalTypeDefinition, Decimal64>
implements DecimalTypeDefinition {
private static final ConstraintMetaDefinition BUILTIN_CONSTRAINT = new ConstraintMetaDefinition() {
}
};
- private static final ImmutableList<RangeConstraint<BigDecimal>> IMPLICIT_RANGE_STATEMENTS = ImmutableList.of(
+ private static final ImmutableList<RangeConstraint<Decimal64>> IMPLICIT_RANGE_STATEMENTS = ImmutableList.of(
createRangeConstraint("-922337203685477580.8", "922337203685477580.7"),
createRangeConstraint("-92233720368547758.08", "92233720368547758.07"),
createRangeConstraint("-9223372036854775.808", "9223372036854775.807"),
createRangeConstraint("-92.23372036854775808", "92.23372036854775807"),
createRangeConstraint("-9.223372036854775808", "9.223372036854775807"));
- private static RangeConstraint<BigDecimal> createRangeConstraint(final String min, final String max) {
+ private static RangeConstraint<Decimal64> createRangeConstraint(final String min, final String max) {
return new ResolvedRangeConstraint<>(BUILTIN_CONSTRAINT, ImmutableRangeSet.of(
- Range.closed(new BigDecimal(min), new BigDecimal(max))));
+ Range.closed(Decimal64.valueOf(min), Decimal64.valueOf(max))));
}
- static RangeConstraint<BigDecimal> constraintsForDigits(final int fractionDigits) {
+ static RangeConstraint<Decimal64> constraintsForDigits(final int fractionDigits) {
return verifyNotNull(IMPLICIT_RANGE_STATEMENTS.get(fractionDigits - 1));
}
private final int fractionDigits;
BaseDecimalType(final QName qname, final Collection<? extends UnknownSchemaNode> unknownSchemaNodes,
- final int fractionDigits, final RangeConstraint<BigDecimal> rangeConstraint) {
+ final int fractionDigits, final RangeConstraint<Decimal64> rangeConstraint) {
super(qname, unknownSchemaNodes, rangeConstraint);
this.fractionDigits = fractionDigits;
}
import static com.google.common.base.Preconditions.checkState;
import com.google.common.base.Preconditions;
-import java.math.BigDecimal;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
-public final class DecimalTypeBuilder extends RangeRestrictedTypeBuilder<DecimalTypeDefinition, BigDecimal> {
+public final class DecimalTypeBuilder extends RangeRestrictedTypeBuilder<DecimalTypeDefinition, Decimal64> {
private Integer fractionDigits;
DecimalTypeBuilder(final QName qname) {
*/
package org.opendaylight.yangtools.yang.model.ri.type;
-import java.math.BigDecimal;
import java.util.Collection;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
-final class DerivedDecimalType extends AbstractRangeRestrictedDerivedType<DecimalTypeDefinition, BigDecimal>
+final class DerivedDecimalType extends AbstractRangeRestrictedDerivedType<DecimalTypeDefinition, Decimal64>
implements DecimalTypeDefinition {
DerivedDecimalType(final DecimalTypeDefinition baseType, final QName qname, final Object defaultValue,
final String description, final String reference, final Status status, final String units,
import static com.google.common.base.Preconditions.checkArgument;
import com.google.common.collect.ImmutableMap;
-import java.math.BigDecimal;
import java.util.Comparator;
import java.util.function.Function;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.opendaylight.yangtools.yang.common.Uint64;
return ((Uint32)o1).compareTo((Uint32) o2);
} else if (o1 instanceof Uint64) {
return ((Uint64)o1).compareTo((Uint64) o2);
- } else if (o1 instanceof BigDecimal) {
- return ((BigDecimal)o1).compareTo((BigDecimal) o2);
+ } else if (o1 instanceof Decimal64) {
+ return ((Decimal64)o1).compareTo((Decimal64) o2);
} else {
throw new IllegalArgumentException("Unsupported Number class " + o1.getClass());
}
return Long.valueOf(input.toString());
});
- b.put(BigDecimal.class, input -> {
- if (input instanceof BigDecimal) {
+ b.put(Decimal64.class, input -> {
+ if (input instanceof Decimal64) {
return input;
}
if (input instanceof Byte || input instanceof Short || input instanceof Integer || input instanceof Long) {
- return BigDecimal.valueOf(input.longValue());
+ return Decimal64.valueOf(input.longValue());
}
- return new BigDecimal(input.toString());
+ return Decimal64.valueOf(input.toString());
});
b.put(Uint8.class, input -> {
if (input instanceof Uint8) {
*/
package org.opendaylight.yangtools.yang.model.ri.type;
-import java.math.BigDecimal;
import java.util.Collection;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
-final class RestrictedDecimalType extends AbstractRangeRestrictedType<DecimalTypeDefinition, BigDecimal>
+final class RestrictedDecimalType extends AbstractRangeRestrictedType<DecimalTypeDefinition, Decimal64>
implements DecimalTypeDefinition {
RestrictedDecimalType(final DecimalTypeDefinition baseType, final QName qname,
final Collection<? extends UnknownSchemaNode> unknownSchemaNodes,
- final @Nullable RangeConstraint<BigDecimal> rangeConstraint) {
+ final @Nullable RangeConstraint<Decimal64> rangeConstraint) {
super(baseType, qname, unknownSchemaNodes, rangeConstraint);
}
package org.opendaylight.yangtools.yang.model.ri.type;
import com.google.common.annotations.Beta;
-import java.math.BigDecimal;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint32;
};
}
- public static @NonNull RangeRestrictedTypeBuilder<DecimalTypeDefinition, BigDecimal> newDecima64Builder(
+ public static @NonNull RangeRestrictedTypeBuilder<DecimalTypeDefinition, Decimal64> newDecima64Builder(
final DecimalTypeDefinition baseType, final QName qname) {
return new RangeRestrictedTypeBuilderWithBase<>(baseType, qname) {
@Override
- DecimalTypeDefinition buildType(final RangeConstraint<BigDecimal> rangeConstraint) {
+ DecimalTypeDefinition buildType(final RangeConstraint<@NonNull Decimal64> rangeConstraint) {
return new RestrictedDecimalType(getBaseType(), getQName(), getUnknownSchemaNodes(), rangeConstraint);
}
};
import java.math.BigInteger;
import java.util.function.Function;
import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.opendaylight.yangtools.yang.common.Uint64;
}
@Test
- public void testRangeCoveredForBigDecimal() {
- final BigDecimal min = new BigDecimal(100.0);
- final BigDecimal superMin = new BigDecimal(50.0);
- final BigDecimal max = new BigDecimal(200.0);
- final BigDecimal superMax = new BigDecimal(300.0);
+ public void testRangeCoveredForDecimal64() {
+ final Decimal64 min = Decimal64.valueOf(100.0);
+ final Decimal64 superMin = Decimal64.valueOf(50.0);
+ final Decimal64 max = Decimal64.valueOf(200.0);
+ final Decimal64 superMax = Decimal64.valueOf(300.0);
assertTrue(NumberUtil.isRangeCovered(min, max, superMin, superMax));
}
@Test
public void testConverterToBigDecimal() {
- BigDecimal bigDecNum = new BigDecimal(20.0);
- final Function<Number, BigDecimal> numberFunction = NumberUtil.converterTo(BigDecimal.class);
+ Decimal64 bigDecNum = Decimal64.valueOf(20.0);
+ final Function<Number, Decimal64> numberFunction = NumberUtil.converterTo(Decimal64.class);
assertEquals(bigDecNum, numberFunction.apply(bigDecNum));
int intNum = 20;
assertEquals(bigDecNum, numberFunction.apply(intNum));
double doubleNum = 20.0;
- bigDecNum = new BigDecimal("20.0");
+ bigDecNum = Decimal64.valueOf("20.0");
assertEquals(bigDecNum, numberFunction.apply(doubleNum));
}
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
-import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Uint64;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
// Deal with decimal64, i.e. 'decimal-value' production of the RFC6020 ABNF
if (value.indexOf('.') != -1) {
try {
- // FIXME: YANGTOOLS-556: Use Decimal64 here
- return new BigDecimal(value);
+ return Decimal64.valueOf(value);
} catch (NumberFormatException e) {
throw new SourceException(ctx, e, "Value %s is not a valid decimal number", value);
}
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import java.math.BigDecimal;
import java.util.Collection;
import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.Empty;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
private static @NonNull TypeEffectiveStatement<TypeStatement> createDecimal(final Current<QName, ?> ctx,
final DecimalTypeDefinition baseType, final TypeStatement declared,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- final RangeRestrictedTypeBuilder<DecimalTypeDefinition, BigDecimal> builder =
+ final RangeRestrictedTypeBuilder<DecimalTypeDefinition, Decimal64> builder =
RestrictedTypes.newDecima64Builder(baseType, typeEffectiveQName(ctx));
for (EffectiveStatement<?, ?> stmt : substatements) {
import static org.junit.Assert.assertTrue;
import com.google.common.collect.Range;
-import java.math.BigDecimal;
import java.util.Collection;
import java.util.Set;
import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.type.TypeDefinitions;
public class TypedefConstraintsTest {
-
@Test
public void decimalRangeConstraintsTest() throws Exception {
final SchemaContext context = StmtTestUtils.parseYangSources("/stmt-test/constraints");
assertEquals(1, decRangeConstraints.size());
final Range<?> range = decRangeConstraints.iterator().next();
- assertEquals(new BigDecimal(1.5), range.lowerEndpoint());
- assertEquals(new BigDecimal(5.5), range.upperEndpoint());
+ assertEquals(Decimal64.valueOf(1.5), range.lowerEndpoint());
+ assertEquals(Decimal64.valueOf(5.5), range.upperEndpoint());
assertEquals(TypeDefinitions.DECIMAL64.bindTo(leafDecimal.getQName().getModule()), decType.getQName());
assertNull(decType.getBaseType());