poseidon-solidity-example/lib/forge-std/src/InvariantTest.sol
lib/forge-std/src/InvariantTest.solRaw
1// SPDX-License-Identifier: MIT
2pragma solidity >=0.6.2 <0.9.0;
3
4pragma experimental ABIEncoderV2;
5
6contract InvariantTest {
7 struct FuzzSelector {
8 address addr;
9 bytes4[] selectors;
10 }
11
12 address[] private _excludedContracts;
13 address[] private _excludedSenders;
14 address[] private _targetedContracts;
15 address[] private _targetedSenders;
16
17 string[] private _excludedArtifacts;
18 string[] private _targetedArtifacts;
19
20 FuzzSelector[] private _targetedArtifactSelectors;
21 FuzzSelector[] private _targetedSelectors;
22
23 // Functions for users:
24 // These are intended to be called in tests.
25
26 function excludeContract(address newExcludedContract_) internal {
27 _excludedContracts.push(newExcludedContract_);
28 }
29
30 function excludeSender(address newExcludedSender_) internal {
31 _excludedSenders.push(newExcludedSender_);
32 }
33
34 function targetArtifact(string memory newTargetedArtifact_) internal {
35 _targetedArtifacts.push(newTargetedArtifact_);
36 }
37
38 function targetArtifactSelector(FuzzSelector memory newTargetedArtifactSelector_) internal {
39 _targetedArtifactSelectors.push(newTargetedArtifactSelector_);
40 }
41
42 function targetContract(address newTargetedContract_) internal {
43 _targetedContracts.push(newTargetedContract_);
44 }
45
46 function targetSelector(FuzzSelector memory newTargetedSelector_) internal {
47 _targetedSelectors.push(newTargetedSelector_);
48 }
49
50 function targetSender(address newTargetedSender_) internal {
51 _targetedSenders.push(newTargetedSender_);
52 }
53
54 // Functions for forge:
55 // These are called by forge to run invariant tests and don't need to be called in tests.
56
57 function excludeArtifact(string memory newExcludedArtifact_) internal {
58 _excludedArtifacts.push(newExcludedArtifact_);
59 }
60
61 function excludeArtifacts() public view returns (string[] memory excludedArtifacts_) {
62 excludedArtifacts_ = _excludedArtifacts;
63 }
64
65 function excludeContracts() public view returns (address[] memory excludedContracts_) {
66 excludedContracts_ = _excludedContracts;
67 }
68
69 function excludeSenders() public view returns (address[] memory excludedSenders_) {
70 excludedSenders_ = _excludedSenders;
71 }
72
73 function targetArtifacts() public view returns (string[] memory targetedArtifacts_) {
74 targetedArtifacts_ = _targetedArtifacts;
75 }
76
77 function targetArtifactSelectors() public view returns (FuzzSelector[] memory targetedArtifactSelectors_) {
78 targetedArtifactSelectors_ = _targetedArtifactSelectors;
79 }
80
81 function targetContracts() public view returns (address[] memory targetedContracts_) {
82 targetedContracts_ = _targetedContracts;
83 }
84
85 function targetSelectors() public view returns (FuzzSelector[] memory targetedSelectors_) {
86 targetedSelectors_ = _targetedSelectors;
87 }
88
89 function targetSenders() public view returns (address[] memory targetedSenders_) {
90 targetedSenders_ = _targetedSenders;
91 }
92}