Simple and fast contract checks.
- Java 98.8%
- Shell 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo | ||
| com.io7m.jaffirm.core | ||
| com.io7m.jaffirm.tests | ||
| src/site/resources | ||
| .gitignore | ||
| doc7m-books.json | ||
| pom.xml | ||
| README-CHANGES.xml | ||
| README-LICENSE.txt | ||
| README.in | ||
| README.md | ||
jaffirm
jaffirm
The jaffirm package provides simple and fast pre/postcondition and invariant
checking functions.
Features
- 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.
Usage
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
