DecimalDomain extends NumberDomain<BigDecimal> { public void setRange( Range range) { Optional<Range> ifRange = Optional.ofNullable( range); setExcluded( ifRange.map( Range::getExcluded).orElse( emptySet()) .stream() .map( BigDecimal::new) .collect( toSet())); BigDecimal min = Optional.ofNullable( ifRange.map( Range::getMin).orElse( null)) .map( BigDecimal::new) .orElse( new BigDecimal( -getMaxRange())); BigDecimal max = Optional.ofNullable( ifRange.map( Range::getMax).orElse( null)) .map( BigDecimal::new) .orElse( new BigDecimal( getMaxRange())); int unitScale = Math.max( 1, Math.max( min.scale(), max.scale())); BigDecimal unit = new BigDecimal( BigInteger.ONE, unitScale); setRange( ifRange.map( Range::isMinExclusive).orElse( false)? min.add( unit) : min, ifRange.map( Range::isMaxExclusive).orElse( false)? max.subtract( unit) : max); } DecimalDomain();  DecimalDomain( String format);  DecimalDomain( long maxRange);  DecimalDomain( long maxRange, String format);  DecimalDomain( BigDecimal min, BigDecimal max);  DecimalDomain( BigDecimal min, BigDecimal max, String format);  DecimalDomain( double min, double max);  DecimalDomain( double min, double max, String format);  DecimalDomain( Range range, String format); void setRange( Range range); void setRange( BigDecimal min, BigDecimal max); void setMultipleOf( String multipleOf); void setNotMultipleOfs( String[] notMultipleOfs); Stream<DataValue<BigDecimal>> values( ResolverContext context);  }
@Test public void whenExcluded() { DecimalDomain domain = new DecimalDomain(); domain.setRange( Range.of( VarBindingBuilder.with( "Decimal") .value( "Other") .has( "excluded", "-1.23", "4.5", "67.89").build())); verifyContainsValues( domain, 1000); assertThat( "Contains", domain.contains( new BigDecimal( "4.5")), is( false)); assertThat( "Contains", domain.contains( new BigDecimal( "890.12")), is( true)); assertThat( "Contains", domain.contains( new BigDecimal( "0.00")), is( true)); }