// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; import {Vm} from "./Vm.sol"; abstract contract StdAssertions { Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); event log(string); event logs(bytes); event log_address(address); event log_bytes32(bytes32); event log_int(int256); event log_uint(uint256); event log_bytes(bytes); event log_string(string); event log_named_address(string key, address val); event log_named_bytes32(string key, bytes32 val); event log_named_decimal_int(string key, int256 val, uint256 decimals); event log_named_decimal_uint(string key, uint256 val, uint256 decimals); event log_named_int(string key, int256 val); event log_named_uint(string key, uint256 val); event log_named_bytes(string key, bytes val); event log_named_string(string key, string val); event log_array(uint256[] val); event log_array(int256[] val); event log_array(address[] val); event log_named_array(string key, uint256[] val); event log_named_array(string key, int256[] val); event log_named_array(string key, address[] val); bool private _failed; function failed() public view returns (bool) { if (_failed) { return _failed; } else { return vm.load(address(vm), bytes32("failed")) != bytes32(0); } } function fail() internal virtual { vm.store(address(vm), bytes32("failed"), bytes32(uint256(1))); _failed = true; } function assertTrue(bool data) internal pure virtual { vm.assertTrue(data); } function assertTrue(bool data, string memory err) internal pure virtual { vm.assertTrue(data, err); } function assertFalse(bool data) internal pure virtual { vm.assertFalse(data); } function assertFalse(bool data, string memory err) internal pure virtual { vm.assertFalse(data, err); } function assertEq(bool left, bool right) internal pure virtual { vm.assertEq(left, right); } function assertEq(bool left, bool right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(uint256 left, uint256 right) internal pure virtual { vm.assertEq(left, right); } function assertEq(uint256 left, uint256 right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEqDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual { vm.assertEqDecimal(left, right, decimals); } function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertEqDecimal(left, right, decimals, err); } function assertEq(int256 left, int256 right) internal pure virtual { vm.assertEq(left, right); } function assertEq(int256 left, int256 right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEqDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual { vm.assertEqDecimal(left, right, decimals); } function assertEqDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertEqDecimal(left, right, decimals, err); } function assertEq(address left, address right) internal pure virtual { vm.assertEq(left, right); } function assertEq(address left, address right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(bytes32 left, bytes32 right) internal pure virtual { vm.assertEq(left, right); } function assertEq(bytes32 left, bytes32 right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq32(bytes32 left, bytes32 right) internal pure virtual { assertEq(left, right); } function assertEq32(bytes32 left, bytes32 right, string memory err) internal pure virtual { assertEq(left, right, err); } function assertEq(string memory left, string memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(string memory left, string memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(bytes memory left, bytes memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(bytes memory left, bytes memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(bool[] memory left, bool[] memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(bool[] memory left, bool[] memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(uint256[] memory left, uint256[] memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(uint256[] memory left, uint256[] memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(int256[] memory left, int256[] memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(int256[] memory left, int256[] memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(address[] memory left, address[] memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(address[] memory left, address[] memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(bytes32[] memory left, bytes32[] memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(bytes32[] memory left, bytes32[] memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(string[] memory left, string[] memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(string[] memory left, string[] memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } function assertEq(bytes[] memory left, bytes[] memory right) internal pure virtual { vm.assertEq(left, right); } function assertEq(bytes[] memory left, bytes[] memory right, string memory err) internal pure virtual { vm.assertEq(left, right, err); } // Legacy helper function assertEqUint(uint256 left, uint256 right) internal pure virtual { assertEq(left, right); } function assertNotEq(bool left, bool right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(bool left, bool right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(uint256 left, uint256 right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(uint256 left, uint256 right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual { vm.assertNotEqDecimal(left, right, decimals); } function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertNotEqDecimal(left, right, decimals, err); } function assertNotEq(int256 left, int256 right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(int256 left, int256 right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEqDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual { vm.assertNotEqDecimal(left, right, decimals); } function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertNotEqDecimal(left, right, decimals, err); } function assertNotEq(address left, address right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(address left, address right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(bytes32 left, bytes32 right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(bytes32 left, bytes32 right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq32(bytes32 left, bytes32 right) internal pure virtual { assertNotEq(left, right); } function assertNotEq32(bytes32 left, bytes32 right, string memory err) internal pure virtual { assertNotEq(left, right, err); } function assertNotEq(string memory left, string memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(string memory left, string memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(bytes memory left, bytes memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(bytes memory left, bytes memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(bool[] memory left, bool[] memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(bool[] memory left, bool[] memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(uint256[] memory left, uint256[] memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(uint256[] memory left, uint256[] memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(int256[] memory left, int256[] memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(int256[] memory left, int256[] memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(address[] memory left, address[] memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(address[] memory left, address[] memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(bytes32[] memory left, bytes32[] memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(bytes32[] memory left, bytes32[] memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(string[] memory left, string[] memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(string[] memory left, string[] memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertNotEq(bytes[] memory left, bytes[] memory right) internal pure virtual { vm.assertNotEq(left, right); } function assertNotEq(bytes[] memory left, bytes[] memory right, string memory err) internal pure virtual { vm.assertNotEq(left, right, err); } function assertLt(uint256 left, uint256 right) internal pure virtual { vm.assertLt(left, right); } function assertLt(uint256 left, uint256 right, string memory err) internal pure virtual { vm.assertLt(left, right, err); } function assertLtDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual { vm.assertLtDecimal(left, right, decimals); } function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertLtDecimal(left, right, decimals, err); } function assertLt(int256 left, int256 right) internal pure virtual { vm.assertLt(left, right); } function assertLt(int256 left, int256 right, string memory err) internal pure virtual { vm.assertLt(left, right, err); } function assertLtDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual { vm.assertLtDecimal(left, right, decimals); } function assertLtDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertLtDecimal(left, right, decimals, err); } function assertGt(uint256 left, uint256 right) internal pure virtual { vm.assertGt(left, right); } function assertGt(uint256 left, uint256 right, string memory err) internal pure virtual { vm.assertGt(left, right, err); } function assertGtDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual { vm.assertGtDecimal(left, right, decimals); } function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertGtDecimal(left, right, decimals, err); } function assertGt(int256 left, int256 right) internal pure virtual { vm.assertGt(left, right); } function assertGt(int256 left, int256 right, string memory err) internal pure virtual { vm.assertGt(left, right, err); } function assertGtDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual { vm.assertGtDecimal(left, right, decimals); } function assertGtDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertGtDecimal(left, right, decimals, err); } function assertLe(uint256 left, uint256 right) internal pure virtual { vm.assertLe(left, right); } function assertLe(uint256 left, uint256 right, string memory err) internal pure virtual { vm.assertLe(left, right, err); } function assertLeDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual { vm.assertLeDecimal(left, right, decimals); } function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertLeDecimal(left, right, decimals, err); } function assertLe(int256 left, int256 right) internal pure virtual { vm.assertLe(left, right); } function assertLe(int256 left, int256 right, string memory err) internal pure virtual { vm.assertLe(left, right, err); } function assertLeDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual { vm.assertLeDecimal(left, right, decimals); } function assertLeDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertLeDecimal(left, right, decimals, err); } function assertGe(uint256 left, uint256 right) internal pure virtual { vm.assertGe(left, right); } function assertGe(uint256 left, uint256 right, string memory err) internal pure virtual { vm.assertGe(left, right, err); } function assertGeDecimal(uint256 left, uint256 right, uint256 decimals) internal pure virtual { vm.assertGeDecimal(left, right, decimals); } function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertGeDecimal(left, right, decimals, err); } function assertGe(int256 left, int256 right) internal pure virtual { vm.assertGe(left, right); } function assertGe(int256 left, int256 right, string memory err) internal pure virtual { vm.assertGe(left, right, err); } function assertGeDecimal(int256 left, int256 right, uint256 decimals) internal pure virtual { vm.assertGeDecimal(left, right, decimals); } function assertGeDecimal(int256 left, int256 right, uint256 decimals, string memory err) internal pure virtual { vm.assertGeDecimal(left, right, decimals, err); } function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta) internal pure virtual { vm.assertApproxEqAbs(left, right, maxDelta); } function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string memory err) internal pure virtual { vm.assertApproxEqAbs(left, right, maxDelta, err); } function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals) internal pure virtual { vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals); } function assertApproxEqAbsDecimal( uint256 left, uint256 right, uint256 maxDelta, uint256 decimals, string memory err ) internal pure virtual { vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals, err); } function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta) internal pure virtual { vm.assertApproxEqAbs(left, right, maxDelta); } function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string memory err) internal pure virtual { vm.assertApproxEqAbs(left, right, maxDelta, err); } function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals) internal pure virtual { vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals); } function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals, string memory err) internal pure virtual { vm.assertApproxEqAbsDecimal(left, right, maxDelta, decimals, err); } function assertApproxEqRel( uint256 left, uint256 right, uint256 maxPercentDelta // An 18 decimal fixed point number, where 1e18 == 100% ) internal pure virtual { vm.assertApproxEqRel(left, right, maxPercentDelta); } function assertApproxEqRel( uint256 left, uint256 right, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% string memory err ) internal pure virtual { vm.assertApproxEqRel(left, right, maxPercentDelta, err); } function assertApproxEqRelDecimal( uint256 left, uint256 right, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% uint256 decimals ) internal pure virtual { vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals); } function assertApproxEqRelDecimal( uint256 left, uint256 right, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% uint256 decimals, string memory err ) internal pure virtual { vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals, err); } function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta) internal pure virtual { vm.assertApproxEqRel(left, right, maxPercentDelta); } function assertApproxEqRel( int256 left, int256 right, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% string memory err ) internal pure virtual { vm.assertApproxEqRel(left, right, maxPercentDelta, err); } function assertApproxEqRelDecimal( int256 left, int256 right, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% uint256 decimals ) internal pure virtual { vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals); } function assertApproxEqRelDecimal( int256 left, int256 right, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% uint256 decimals, string memory err ) internal pure virtual { vm.assertApproxEqRelDecimal(left, right, maxPercentDelta, decimals, err); } // Inherited from DSTest, not used but kept for backwards-compatibility function checkEq0(bytes memory left, bytes memory right) internal pure returns (bool) { return keccak256(left) == keccak256(right); } function assertEq0(bytes memory left, bytes memory right) internal pure virtual { assertEq(left, right); } function assertEq0(bytes memory left, bytes memory right, string memory err) internal pure virtual { assertEq(left, right, err); } function assertNotEq0(bytes memory left, bytes memory right) internal pure virtual { assertNotEq(left, right); } function assertNotEq0(bytes memory left, bytes memory right, string memory err) internal pure virtual { assertNotEq(left, right, err); } function assertEqCall(address target, bytes memory callDataA, bytes memory callDataB) internal virtual { assertEqCall(target, callDataA, target, callDataB, true); } function assertEqCall(address targetA, bytes memory callDataA, address targetB, bytes memory callDataB) internal virtual { assertEqCall(targetA, callDataA, targetB, callDataB, true); } function assertEqCall(address target, bytes memory callDataA, bytes memory callDataB, bool strictRevertData) internal virtual { assertEqCall(target, callDataA, target, callDataB, strictRevertData); } function assertEqCall( address targetA, bytes memory callDataA, address targetB, bytes memory callDataB, bool strictRevertData ) internal virtual { (bool successA, bytes memory returnDataA) = address(targetA).call(callDataA); (bool successB, bytes memory returnDataB) = address(targetB).call(callDataB); if (successA && successB) { assertEq(returnDataA, returnDataB, "Call return data does not match"); } if (!successA && !successB && strictRevertData) { assertEq(returnDataA, returnDataB, "Call revert data does not match"); } if (!successA && successB) { emit log("Error: Calls were not equal"); emit log_named_bytes(" Left call revert data", returnDataA); emit log_named_bytes(" Right call return data", returnDataB); revert("assertion failed"); } if (successA && !successB) { emit log("Error: Calls were not equal"); emit log_named_bytes(" Left call return data", returnDataA); emit log_named_bytes(" Right call revert data", returnDataB); revert("assertion failed"); } } }