arnaucube
arnaucube/poseidon-solidity-examplePublic Self-hosted repository
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}