packages feed

hevm-0.50.0: test/contracts/fail/invariantFail.sol

import "ds-test/test.sol";

contract Testdapp {
    uint public x;
    function f() public {
        x++;
    }
    function g(uint y) public {
        if (y % 2 == 0) x*=2;
    }
}


contract TestdappTest is DSTest {
    Testdapp testdapp;

    function setUp() public {
        testdapp = new Testdapp();
    }

    function invariantFirst() public {
        assertLt(testdapp.x(), 100);
    }
}

contract InvariantCount is DSTest {
    BrokenAtStart count;
    address[] targetContracts_;

    function targetContracts() public returns (address[] memory) {
      return targetContracts_;
    }
    function setUp() public {
        count = new BrokenAtStart();
        targetContracts_.push(address(count));
    }

    // this can only fail if we call the invariant method before calling any other method in the target contracts
    function invariantCount() public {
        assertGt(count.count(), 0);
    }
}

contract BrokenAtStart {
    uint public count;

    function inc() public {
        count++;
    }
}