### Question:
RangeCondition implements Predicate<Wrapper<?>> { static <X extends Number & Comparable<X>> RangeCondition<Ratio> relativeMoreThan(final Function<Wrapper<?>, X> part, final Function<Wrapper<?>, X> sum, final Ratio threshold) { final Domain<Ratio> allowedValues = AbstractRelativeRangeCondition.RELATIVE_DOMAIN; if (!allowedValues.test(threshold)) { throw new IllegalArgumentException("Threshold " + threshold + " does not fit " + allowedValues); } final Function<Wrapper<?>, Ratio> value = w -> getValueAccessor(w, part, sum); return new RangeCondition<>(value, v -> v.compareTo(threshold) > 0, "Relative range: (" + threshold + "; +inf.)"); } private  RangeCondition(final Function<Wrapper<?>, T> accessor, final Predicate<T> acceptor,
            final String toString); @Override boolean test(final Wrapper<?> wrapper); @Override String toString();  }### Answer:
@Test void relativeMoreThan() { final RangeCondition<Ratio> c = RangeCondition.relativeMoreThan(Wrapper::getRemainingTermInMonths, Wrapper::getOriginalTermInMonths, Ratio.fromPercentage(15)); final Wrapper<?> w = mock(Wrapper.class); when(w.getOriginalTermInMonths()).thenReturn(100); when(w.getRemainingTermInMonths()).thenReturn(15); assertThat(c).rejects(w); when(w.getRemainingTermInMonths()).thenReturn(16); assertThat(c).accepts(w); }