@Override public boolean contains(final Object value) { if (_values.contains(value)) return true; for (final RestrictedDatatype<? extends T> rd : _ranges) if (rd.contains(value)) return true; return false; }
@Override public boolean contains(final Object value) { if (_values.contains(value)) return true; for (final RestrictedDatatype<? extends T> rd : _ranges) if (rd.contains(value)) return true; return false; }
@Override public ATermAppl getLiteral(final Object value) { for (final Datatype<?> dt : _coreDatatypes.values()) if (dt.isPrimitive()) if (dt.asDataRange().contains(value)) return dt.getLiteral(value); final String msg = "Value is not in the value space of any recognized datatypes: " + value.toString(); _logger.severe(msg); throw new IllegalArgumentException(msg); }
@Override public ATermAppl getLiteral(final Object value) { for (final Datatype<?> dt : _coreDatatypes.values()) if (dt.isPrimitive()) if (dt.asDataRange().contains(value)) return dt.getLiteral(value); final String msg = "Value is not in the value space of any recognized datatypes: " + value.toString(); _logger.severe(msg); throw new IllegalArgumentException(msg); }
@Test public void maxExclusiveFacetInt1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), null, null); dr = dr.applyConstrainingFacet(MAX_EXCLUSIVE.getName(), 3); assertFalse(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertTrue(dr.contains(Long.MIN_VALUE)); assertTrue(dr.contains(0)); assertTrue(dr.contains(2)); assertFalse(dr.contains(decimal("2.9999"))); assertFalse(dr.contains(3)); assertFalse(dr.contains(decimal("3.0001"))); assertFalse(dr.contains(4)); assertFalse(dr.contains(Long.MAX_VALUE)); assertFalse(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void maxInclusiveFacetInt1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), null, null); dr = dr.applyConstrainingFacet(MAX_INCLUSIVE.getName(), 3); assertFalse(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertTrue(dr.contains(Long.MIN_VALUE)); assertTrue(dr.contains(0)); assertTrue(dr.contains(2)); assertFalse(dr.contains(decimal("2.9999"))); assertTrue(dr.contains(3)); assertFalse(dr.contains(decimal("3.0001"))); assertFalse(dr.contains(4)); assertFalse(dr.contains(Long.MAX_VALUE)); assertFalse(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void minInclusiveFacetInt1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), null, null); dr = dr.applyConstrainingFacet(MIN_INCLUSIVE.getName(), 3); assertFalse(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertFalse(dr.contains(Long.MIN_VALUE)); assertFalse(dr.contains(0)); assertFalse(dr.contains(2)); assertFalse(dr.contains(decimal("2.9999"))); assertTrue(dr.contains(3)); assertFalse(dr.contains(decimal("3.0001"))); assertTrue(dr.contains(4)); assertTrue(dr.contains(Long.MAX_VALUE)); assertFalse(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Override public T getValue(final ATermAppl literal) throws InvalidLiteralException { final T value = _range.getDatatype().getValue(literal); if (!_range.contains(value)) throw new InvalidLiteralException(_name, literal.getArgument(ATermUtils.LIT_VAL_INDEX).toString()); return value; }
@Override public T getValue(final ATermAppl literal) throws InvalidLiteralException { final T value = _range.getDatatype().getValue(literal); if (!_range.contains(value)) throw new InvalidLiteralException(_name, literal.getArgument(ATermUtils.LIT_VAL_INDEX).toString()); return value; }
@Test public void maxInclusiveFacetCon1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.applyConstrainingFacet(MAX_INCLUSIVE.getName(), decimal("3.5")); assertTrue(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertTrue(dr.contains(Long.MIN_VALUE)); assertTrue(dr.contains(0)); assertTrue(dr.contains(decimal("3.4999"))); assertTrue(dr.contains(decimal("3.5"))); assertFalse(dr.contains(decimal("3.5001"))); assertFalse(dr.contains(Long.MAX_VALUE)); assertFalse(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void minInclusiveFacetCon1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.applyConstrainingFacet(MIN_INCLUSIVE.getName(), decimal("3.5")); assertFalse(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertFalse(dr.contains(Long.MIN_VALUE)); assertFalse(dr.contains(0)); assertFalse(dr.contains(decimal("3.4999"))); assertTrue(dr.contains(decimal("3.5"))); assertTrue(dr.contains(decimal("3.5001"))); assertTrue(dr.contains(Long.MAX_VALUE)); assertTrue(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void maxExclusiveFacetCon1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.applyConstrainingFacet(MAX_EXCLUSIVE.getName(), decimal("3.5")); assertTrue(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertTrue(dr.contains(Long.MIN_VALUE)); assertTrue(dr.contains(0)); assertTrue(dr.contains(decimal("3.4999"))); assertFalse(dr.contains(decimal("3.5"))); assertFalse(dr.contains(decimal("3.5001"))); assertFalse(dr.contains(Long.MAX_VALUE)); assertFalse(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void minExclusiveFacetCon1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.applyConstrainingFacet(MIN_EXCLUSIVE.getName(), decimal("3.5")); assertFalse(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertFalse(dr.contains(Long.MIN_VALUE)); assertFalse(dr.contains(0)); assertFalse(dr.contains(decimal("3.4999"))); assertFalse(dr.contains(decimal("3.5"))); assertTrue(dr.contains(decimal("3.5001"))); assertTrue(dr.contains(Long.MAX_VALUE)); assertTrue(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void minExclusiveFacetNoI1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.intersect(new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), null, null), true); dr = dr.applyConstrainingFacet(MIN_EXCLUSIVE.getName(), decimal("3.5")); assertFalse(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertFalse(dr.contains(Long.MIN_VALUE)); assertFalse(dr.contains(0)); assertFalse(dr.contains(2)); assertFalse(dr.contains(decimal("3.4999"))); assertFalse(dr.contains(decimal("3.5"))); assertTrue(dr.contains(decimal("3.5001"))); assertFalse(dr.contains(Long.MAX_VALUE)); assertTrue(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void maxExclusiveFacetNoI1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.intersect(new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), null, null), true); dr = dr.applyConstrainingFacet(MAX_EXCLUSIVE.getName(), decimal("3.5")); assertTrue(dr.contains(BigDecimal.valueOf(Long.MIN_VALUE).subtract(BigDecimal.valueOf(0.1)))); assertFalse(dr.contains(Long.MIN_VALUE)); assertFalse(dr.contains(0)); assertFalse(dr.contains(2)); assertTrue(dr.contains(decimal("3.4999"))); assertFalse(dr.contains(decimal("3.5"))); assertFalse(dr.contains(decimal("3.5001"))); assertFalse(dr.contains(Long.MAX_VALUE)); assertFalse(dr.contains(BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.valueOf(0.1)))); }
@Test public void minMaxIncIncInt1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), null, null); dr = dr.applyConstrainingFacet(MIN_INCLUSIVE.getName(), 25); dr = dr.applyConstrainingFacet(MAX_INCLUSIVE.getName(), 35); assertFalse(dr.contains(24)); assertFalse(dr.contains(decimal("24.999"))); assertTrue(dr.contains(25)); assertFalse(dr.contains(decimal("25.001"))); assertTrue(dr.contains(30)); assertFalse(dr.contains(decimal("34.999"))); assertTrue(dr.contains(35)); assertFalse(dr.contains(decimal("3.5001"))); assertFalse(dr.contains(36)); }
@Test public void minMaxIncIncCon1() throws InvalidConstrainingFacetException { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.applyConstrainingFacet(MIN_INCLUSIVE.getName(), decimal("2.5")); dr = dr.applyConstrainingFacet(MAX_INCLUSIVE.getName(), decimal("3.5")); assertFalse(dr.contains(2)); assertFalse(dr.contains(decimal("2.4999"))); assertTrue(dr.contains(decimal("2.5"))); assertTrue(dr.contains(decimal("2.5001"))); assertTrue(dr.contains(3)); assertTrue(dr.contains(decimal("3.4999"))); assertTrue(dr.contains(decimal("3.5"))); assertFalse(dr.contains(decimal("3.5001"))); assertFalse(dr.contains(4)); }
/** * Test that intersecting a full number line with the negation of one that only permits decimals, leaves only rationals */ @Test public void intersectToNZOnly() { RestrictedDatatype<XMLGregorianCalendar> dr = new RestrictedTimelineDatatype(dt, DatatypeConstants.DATETIME, false); assertTrue(dr.contains(dateTime("2009-01-01T12:00:00Z"))); assertTrue(dr.contains(dateTime("2006-06-01T06:14:23"))); dr = dr.intersect(new RestrictedTimelineDatatype(dt, DatatypeConstants.DATETIME, true), true); assertFalse(dr.contains(dateTime("2009-01-01T12:00:00Z"))); assertTrue(dr.contains(dateTime("2006-06-01T06:14:23"))); } }
/** * Test that intersecting a full number line with the negation of one that only permits decimals, leaves only rationals */ @Test public void intersectToRationalOnly() { RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); assertTrue(dr.contains(0)); assertTrue(dr.contains(decimal("0.33"))); assertTrue(dr.contains(rational(1, 3))); dr = dr.intersect(new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), null), true); assertFalse(dr.contains(0)); assertFalse(dr.contains(decimal("0.33"))); assertTrue(dr.contains(rational(1, 3))); }
/** * Test that an irrelevant value can be excluded */ @Test public void excludeIrrelevant1() { final String value = "A String, not a Number"; RestrictedDatatype<Number> dr = new RestrictedRealDatatype(dt, IntegerInterval.allIntegers(), ContinuousRealInterval.allReals(), ContinuousRealInterval.allReals()); dr = dr.exclude(singleton(value)); assertFalse(dr.contains(value)); assertFalse(dr.isEmpty()); assertFalse(dr.isEnumerable()); assertFalse(dr.isFinite()); }