MultiplierFuzzTest.t.sol

June 15, 2023 ยท View on GitHub

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0;

import "forge-std/Test.sol"; import "src/lib/Multiplier.sol";

contract FuzzMultiplierTest is Test { function testZ__FuzzMultiplier(uint40 time, uint24 timeGap, uint64 _lastMul, uint64 _fee) public { time = uint40(bound(time, 1500000000, 2500000000)); vm.warp(time); uint fee = bound(_fee, 0, 1e18); uint lastMul = bound(_lastMul, 0, 1e18); ( uint256 trackedTimestamp, uint256 trackedMultiplier, uint256 newFeeAccrued, uint256 currentMultiplier ) = Multiplier.computeMultiplier(0, lastMul, fee); console.log(trackedTimestamp, trackedMultiplier, newFeeAccrued, currentMultiplier); assertLe(currentMultiplier, trackedMultiplier, "curr <= tracked"); assertLe(trackedMultiplier, lastMul, "tracked <= last"); assertGe(trackedTimestamp, time - 1 days, "tracked >= oldTime"); assertLe(trackedTimestamp, time, "tracked <= time"); assertLe(newFeeAccrued, 1e18, "newFeeAccrued <= 1e18");

    vm.warp(time + timeGap);
    (
        uint trackedTimestamp2,
        uint trackedMultiplier2,
        uint newFeeAccrued2,
        uint currentMultiplier2
    ) = Multiplier.computeMultiplier(trackedTimestamp, trackedMultiplier, fee);
    console.log(trackedTimestamp2, trackedMultiplier2, newFeeAccrued2, currentMultiplier2);
    assertLe(currentMultiplier2, currentMultiplier, "curr");
    assertLe(trackedMultiplier2, trackedMultiplier, "tracked");
    assertGe(trackedTimestamp2, block.timestamp - 1 days, "tracked >= oldTime");
    assertLe(trackedTimestamp2, block.timestamp, "tracked <= newTime");
}

}