Skip to content

Commit

Permalink
📚 refactor invariant testing setup example
Browse files Browse the repository at this point in the history
  • Loading branch information
JaredBorders committed Apr 5, 2024
1 parent 2f62829 commit 3aeaa3f
Showing 1 changed file with 31 additions and 9 deletions.
40 changes: 31 additions & 9 deletions test/invariant/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
example
example of testing invariant(s) related to overflow and underflow

```solidity
// SPDX-License-Identifier: GPL-3.0-or-later
Expand Down Expand Up @@ -34,27 +34,49 @@ contract ExampleHandler is Test {
contract ExampleInvariantOverflow is Test {
ExampleHandler public exampleHandler;
ExampleTypeHandler public exampleTypeHandler;
function setUp() public {
exampleTypeHandler = new ExampleTypeHandler();
exampleHandler = new ExampleHandler(exampleTypeHandler);
// only add selectors that can result in overflow
bytes4[] memory selectors = new bytes4[](1);
selectors[0] = ExampleHandler.ghost_overflow.selector;
targetSelector(
FuzzSelector({addr: address(handler), selectors: selectors})
);
constructor(ExampleHandler _exampleHandler) {
exampleHandler = _exampleHandler;
targetContract(address(exampleHandler));
}
function invariant_overflow() public view {
bytes memory x;
exampleHandler.ghost_overflow(x);
// invariant assertion happens here
}
}
contract ExampleInvariantUnderflow is Test {
ExampleHandler public exampleHandler;
ExampleTypeHandler public exampleTypeHandler;
function setUp() public {
exampleTypeHandler = new ExampleTypeHandler();
exampleHandler = new ExampleHandler(exampleTypeHandler);
// only add selectors that can result in underflow
bytes4[] memory selectors = new bytes4[](1);
selectors[0] = ExampleHandler.ghost_underflow.selector;
targetSelector(
FuzzSelector({addr: address(handler), selectors: selectors})
);
constructor(ExampleHandler _exampleHandler) {
exampleHandler = _exampleHandler;
targetContract(address(exampleHandler));
}
function invariant_underflow() public view {
bytes memory x;
exampleHandler.ghost_underflow(x);
// invariant assertion happens here
}
}
```

0 comments on commit 3aeaa3f

Please sign in to comment.