package fj.demo.test;
import static fj.test.Arbitrary.arbIntegerBoundaries;
import static fj.test.Bool.bool;
import static fj.test.CheckResult.summary;
import fj.test.Property;
import static fj.test.Property.property;
import static fj.test.Shrink.shrinkInteger;
/*
Adding two positive integers, a and b, results in a positive integer. This is not true, since the
integer value may overflow during the addition resulting in a negative value. This property is
tested with shrinking; note the reasonably small counter-example.
*/
public final class IntegerOverflow {
public static void main(final String[] args) {
final Property p = property(arbIntegerBoundaries, arbIntegerBoundaries, shrinkInteger, shrinkInteger,
(a, b) -> bool(a > 0 && b > 0).implies(a + b > 0));
summary.println(p.check()); // Falsified after 4 passed tests with arguments: [8,2147483647]
}
}