JVM | Platform | Status |
---|---|---|
OpenJDK (Temurin) Current | Linux | |
OpenJDK (Temurin) LTS | Linux | |
OpenJDK (Temurin) Current | Windows | |
OpenJDK (Temurin) LTS | Windows |
The jaffirm
package provides simple and fast pre/postcondition and invariant
checking functions.
- Static invocation, zero-allocation code paths for the common case of non-failing contracts.
- Specialized and generic variants of all functions for use in low-latency software.
- Detailed contract failure messages by construction.
- Written in pure Java 17.
- High coverage test suite.
- OSGi-ready
- JPMS-ready
- ISC license.
Declare preconditions with the Preconditions
class.
Declare postconditions with the Postconditions
class.
Declare invariants with the Invariants
class.
import static com.io7m.jaffirm.core.Contracts.conditionI;
import static com.io7m.jaffirm.core.Preconditions.checkPreconditionI;
import static com.io7m.jaffirm.core.Preconditions.checkPreconditionsI;
int exampleSingles(final int x)
{
checkPreconditionI(x, x > 0, i -> "Input " + i + " must be > 0");
checkPreconditionI(x, x % 2 == 0, i -> "Input " + i + " must be even");
return x * 2;
}
int exampleMultis(final int x)
{
checkPreconditionsI(
x,
conditionI(i -> i > 0, i -> "Input " + i + " must be > 0"),
conditionI(i -> i % 2 == 0, i -> "Input " + i + " must be even"));
return x * 2;
}
> exampleSingles(0)
Exception in thread "main" com.io7m.jaffirm.core.PreconditionViolationException: Precondition violation.
Received: 0
Violated conditions:
[0]: Input 0 must be > 0
> exampleSingles(1)
Exception in thread "main" com.io7m.jaffirm.core.PreconditionViolationException: Precondition violation.
Received: 1
Violated conditions:
[0]: Input 1 must be even
> exampleMultis(-1)
Exception in thread "main" com.io7m.jaffirm.core.PreconditionViolationException: Precondition violation.
Received: -1
Violated conditions:
[0]: Input -1 must be > 0
[1]: Input -1 must be even