diff --git a/.gas-snapshot b/.gas-snapshot index 7ace68908..777fed57e 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,12 +1,12 @@ -BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2055, μ: 320946, ~: 320946) -BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2055, μ: 678755, ~: 678755) -LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 50996) -LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 8378) -LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 8363) -LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2055, μ: 84235, ~: 84235) -LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2055, μ: 9770, ~: 10284) -LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2055, μ: 8887, ~: 9401) -LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2055, μ: 43067, ~: 42630) +BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2056, μ: 320946, ~: 320946) +BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2056, μ: 678755, ~: 678755) +LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 53283) +LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 8603) +LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 8588) +LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2056, μ: 84460, ~: 84460) +LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2056, μ: 9770, ~: 10284) +LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2056, μ: 8887, ~: 9401) +LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2056, μ: 43052, ~: 42630) LibOpAddTest:testOpAddEval2InputsHappy() (gas: 160672) LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57669) LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 102991) @@ -19,10 +19,10 @@ LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91501) LibOpAddTest:testOpAddEvalTwoOutput() (gas: 43976) LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30212) LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 42994) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18199, ~: 18434) -LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13868, ~: 13733) -LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13865, ~: 13730) -LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2049, μ: 52173, ~: 52128) +LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 18196, ~: 18395) +LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13867, ~: 13733) +LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13864, ~: 13730) +LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2050, μ: 51985, ~: 51407) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 207750) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57822) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58551) @@ -31,13 +31,13 @@ LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57867) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30615) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34935) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43434) -LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19688, ~: 19947) -LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2055, μ: 16674, ~: 16674) +LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19692, ~: 19947) +LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2056, μ: 16674, ~: 16674) LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41593) LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40524) LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 719611) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13748, ~: 13661) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2055, μ: 16671, ~: 16671) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13747, ~: 13661) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2056, μ: 16671, ~: 16671) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18200) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35749) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45518) @@ -51,54 +51,54 @@ LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45416) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41240) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30668) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40237) -LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13747, ~: 13660) -LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2055, μ: 16628, ~: 16628) -LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2055, μ: 50952, ~: 50726) +LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13746, ~: 13660) +LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2056, μ: 16628, ~: 16628) +LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2056, μ: 50956, ~: 50726) LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 35162) LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 31463) LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 30454) -LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19644, ~: 19915) -LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2055, μ: 20844, ~: 20508) +LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19641, ~: 19881) +LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2056, μ: 20840, ~: 20508) LibOpCallTest:testCallTraceInnerOnly() (gas: 62979) LibOpCallTest:testCallTraceOuterOnly() (gas: 45549) -LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2053, μ: 39779, ~: 38378) -LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2055, μ: 59390, ~: 58878) -LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2050, μ: 58949, ~: 59532) +LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2054, μ: 39836, ~: 38449) +LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2056, μ: 59310, ~: 58833) +LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2051, μ: 59041, ~: 59676) LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 71893) LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 65508) LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 350425) -LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2055, μ: 47017, ~: 47017) -LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19677, ~: 19906) +LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2056, μ: 47017, ~: 47017) +LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19671, ~: 19934) LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34336) -LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2055, μ: 17123, ~: 17123) +LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2056, μ: 17123, ~: 17123) LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 31140) LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 30089) LibOpConstantTest:testOpConstantEvalNPE2E() (gas: 56065) LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41509) -LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 19194, ~: 19102) -LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 40159, ~: 39809) +LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 19195, ~: 19095) +LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 40155, ~: 39809) LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31648) LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41588) -LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2055, μ: 52464, ~: 51854) +LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2056, μ: 52449, ~: 51854) LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30264) LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40216) -LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 107, μ: 6552666, ~: 5288363) -LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 107, μ: 6579298, ~: 5288544) -LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 107, μ: 6552810, ~: 5288507) -LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 107, μ: 6539525, ~: 5244353) -LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 107, μ: 75273, ~: 72967) -LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2055, μ: 48210, ~: 48210) -LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 14499, ~: 14412) +LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 108, μ: 6495316, ~: 5266230) +LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 108, μ: 6521703, ~: 5266411) +LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 108, μ: 6495460, ~: 5266374) +LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 108, μ: 6482299, ~: 5151897) +LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 108, μ: 75053, ~: 72740) +LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2056, μ: 48210, ~: 48210) +LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 14498, ~: 14412) LibOpContextNPTest:testOpContextNPOneInput() (gas: 41587) -LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 107, μ: 10315059, ~: 7525557) -LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 107, μ: 10666711, ~: 8068784) -LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 107, μ: 10675801, ~: 8069699) +LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 108, μ: 10222905, ~: 7383211) +LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 108, μ: 10571985, ~: 7923969) +LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 108, μ: 10581009, ~: 7924884) LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46451) LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37255) LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36203) -LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2055, μ: 74578, ~: 85264) -LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13746, ~: 13659) -LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2055, μ: 16698, ~: 16698) +LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2056, μ: 74426, ~: 85264) +LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13745, ~: 13659) +LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2056, μ: 16698, ~: 16698) LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41134) LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 37006) LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31270) @@ -108,10 +108,10 @@ LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 46963) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42815) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37145) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41762) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2055, μ: 22114, ~: 22261) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2055, μ: 41496, ~: 41536) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 35686, ~: 35423) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2055, μ: 21008, ~: 20814) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2056, μ: 22115, ~: 22232) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2056, μ: 41493, ~: 41547) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2056, μ: 35684, ~: 35423) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2056, μ: 21009, ~: 20814) LibOpDivTest:testDebugOpDivRun() (gas: 13482) LibOpDivTest:testOpDivEvalOneInput() (gas: 126303) LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91477) @@ -124,21 +124,21 @@ LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 56399) LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41216) LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30168) LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40212) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18249, ~: 18479) -LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13821, ~: 13686) -LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13844, ~: 13709) -LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2049, μ: 37542, ~: 33508) +LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 18249, ~: 18409) +LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13820, ~: 13686) +LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13843, ~: 13709) +LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2050, μ: 37958, ~: 33727) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55846) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2055, μ: 72140, ~: 72039) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2056, μ: 72138, ~: 72039) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37102) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18606) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43633) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50665) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31108) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49641) -LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13710, ~: 13623) -LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2055, μ: 27668, ~: 27579) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2051, μ: 66052, ~: 66052) +LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13709, ~: 13623) +LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2056, μ: 27665, ~: 27579) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2052, μ: 66052, ~: 66052) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37207) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18664) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2049, μ: 62325, ~: 62325) @@ -146,16 +146,16 @@ LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49534) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44403) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31167) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43335) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13689, ~: 13602) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2053, μ: 28009, ~: 28009) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2052, μ: 59221, ~: 59221) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13688, ~: 13602) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2054, μ: 28009, ~: 28009) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2053, μ: 59221, ~: 59221) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18827) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2049, μ: 55461, ~: 55461) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43855) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38217) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 31350) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37189) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13733, ~: 13646) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13732, ~: 13646) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2054, μ: 27211, ~: 27211) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalHappy() (gas: 55241) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalOperandDisallowed() (gas: 18344) @@ -163,16 +163,16 @@ LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoInputs() (gas: 43451) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoOutputs() (gas: 37654) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroInputs() (gas: 30944) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroOutputs() (gas: 36625) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13750, ~: 13663) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2055, μ: 23615, ~: 23615) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2052, μ: 105309, ~: 105463) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19660, ~: 19920) +LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13749, ~: 13663) +LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2056, μ: 23615, ~: 23615) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2053, μ: 612051, ~: 105463) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19649, ~: 19930) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30811) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35101) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 44535) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21548) LibOpERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35568) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2052, μ: 26008, ~: 26008) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2053, μ: 26008, ~: 26008) LibOpERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45055) LibOpERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41062) LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31245) @@ -181,13 +181,13 @@ LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30694) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 34982) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44471) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18197) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2055, μ: 96647, ~: 93206) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2056, μ: 96592, ~: 92503) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35440) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44936) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31141) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39730) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 13762, ~: 13698) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2055, μ: 24201, ~: 24201) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2056, μ: 13762, ~: 13698) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2056, μ: 24201, ~: 24201) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40776) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 832520) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42038) @@ -195,10 +195,10 @@ LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 51785) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 47611) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37059) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 46607) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2055, μ: 18140, ~: 18135) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2055, μ: 41706, ~: 41753) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 35815, ~: 35552) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2055, μ: 21403, ~: 21212) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2056, μ: 18145, ~: 18197) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2056, μ: 41695, ~: 41753) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2056, μ: 35813, ~: 35552) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2056, μ: 21402, ~: 21212) LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34422) LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33947) LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 166193) @@ -207,10 +207,10 @@ LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45346) LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 111833) LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 17047) LibOpEnsureTest:testOpEnsureEvalZero() (gas: 29624) -LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19720, ~: 19989) -LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13812, ~: 13677) +LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19723, ~: 19931) +LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13811, ~: 13677) LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39583) -LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2051, μ: 18144, ~: 18151) +LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2052, μ: 18144, ~: 18151) LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 339133) LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 57634) LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 58320) @@ -219,15 +219,15 @@ LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 57657) LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 30048) LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 34359) LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 42783) -LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19675, ~: 19925) -LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2055, μ: 17542, ~: 17466) +LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19668, ~: 19925) +LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2056, μ: 17542, ~: 17466) LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 41048) LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 39957) LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 99749) LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115319) -LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2055, μ: 34923, ~: 34954) -LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2055, μ: 53367, ~: 53346) -LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2055, μ: 117917, ~: 117763) +LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2056, μ: 34934, ~: 34910) +LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2056, μ: 53394, ~: 53572) +LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2056, μ: 117700, ~: 117631) LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 308623) LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57488) LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 522490) @@ -238,12 +238,12 @@ LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39742) LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 35334) LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29757) LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 34304) -LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 20557, ~: 20839) -LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2055, μ: 19634, ~: 19638) -LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2055, μ: 47596, ~: 47610) -LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2055, μ: 49831, ~: 49835) -LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2055, μ: 51423, ~: 51427) -LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2055, μ: 24664, ~: 24668) +LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 20561, ~: 20799) +LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2056, μ: 19634, ~: 19638) +LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2056, μ: 47596, ~: 47610) +LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2056, μ: 49831, ~: 49835) +LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2056, μ: 51423, ~: 51427) +LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2056, μ: 24663, ~: 24668) LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58568) LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 61169) LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57883) @@ -255,8 +255,8 @@ LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34737) LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43078) LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58666) LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61370) -LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19686, ~: 19961) -LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2055, μ: 17418, ~: 17347) +LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19693, ~: 19942) +LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2056, μ: 17420, ~: 17347) LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41835) LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40787) LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 46285) @@ -264,13 +264,22 @@ LibOpHashNPTest:testOpHashNPEval1Input() (gas: 54893) LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 63237) LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 63910) LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 78464) -LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19711, ~: 19975) -LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2049, μ: 19459, ~: 19563) +LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19712, ~: 19981) +LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2050, μ: 19460, ~: 19563) LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30825) LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29451) +LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 53331) +LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 52289) +LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 52026) +LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 29957) +LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 38516) +LibOpIsZeroTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19773, ~: 20050) +LibOpIsZeroTest:testOpIsZeroRun(bytes32) (runs: 2056, μ: 16420, ~: 16421) +LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 36351) +LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 35057) LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 58390) LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57639) -LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19697, ~: 19947) +LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19692, ~: 19947) LibOpLessThanTest:testOpLessThanNP1_0Lt1() (gas: 58392) LibOpLessThanTest:testOpLessThanNP1_1Lt1_2() (gas: 60882) LibOpLessThanTest:testOpLessThanNPEval2InputsBothOne() (gas: 57663) @@ -279,7 +288,7 @@ LibOpLessThanTest:testOpLessThanNPMinus1Lt0() (gas: 58445) LibOpLessThanTest:testOpLessThanNPMinus1_1LtMinus1_2() (gas: 61106) LibOpLessThanTest:testOpLessThanNPTwoOutputs() (gas: 41921) LibOpLessThanTest:testOpLessThanNPZeroOutputs() (gas: 40036) -LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2055, μ: 17423, ~: 17353) +LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2056, μ: 17426, ~: 17353) LibOpLessThanTest:testOpLessThanToNPEvalFail0Inputs() (gas: 30151) LibOpLessThanTest:testOpLessThanToNPEvalFail1Input() (gas: 34441) LibOpLessThanTest:testOpLessThanToNPEvalFail3Inputs() (gas: 42821) @@ -289,19 +298,19 @@ LibOpMaxTest:testOpMaxEvalOneInput() (gas: 129040) LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 58885) LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40731) LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 30170) -LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18199, ~: 18381) -LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13822, ~: 13687) -LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13844, ~: 13709) -LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2049, μ: 26611, ~: 26345) +LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 18199, ~: 18381) +LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13821, ~: 13687) +LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13843, ~: 13709) +LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2050, μ: 26613, ~: 26437) LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 47280) LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 35109) -LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19651, ~: 19924) +LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19654, ~: 19865) LibOpMaxUint256Test:testOpMaxUint256Run() (gas: 15997) LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 31892) LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 30797) LibOpMaxValueTest:testOpMaxValueEval() (gas: 46896) LibOpMaxValueTest:testOpMaxValueEvalFail() (gas: 34417) -LibOpMaxValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19648, ~: 19921) +LibOpMaxValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19654, ~: 19911) LibOpMaxValueTest:testOpMaxValueRun() (gas: 16217) LibOpMaxValueTest:testOpMaxValueTwoOutputs() (gas: 31266) LibOpMaxValueTest:testOpMaxValueZeroOutputs() (gas: 30171) @@ -310,11 +319,11 @@ LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3458613) LibOpMinTest:testOpMinEvalOneInput() (gas: 126204) LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 58908) LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30150) -LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18281, ~: 18516) -LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13845, ~: 13710) -LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13822, ~: 13687) -LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2049, μ: 26553, ~: 26649) -LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13823, ~: 13688) +LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 18273, ~: 18512) +LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13844, ~: 13710) +LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13821, ~: 13687) +LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2050, μ: 26540, ~: 26579) +LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13822, ~: 13688) LibOpMulTest:testOpMulEvalOneInput() (gas: 126238) LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91499) LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 743697) @@ -322,12 +331,12 @@ LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 60803) LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 522883) LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 54354) LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30213) -LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18239, ~: 18470) -LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13866, ~: 13731) -LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2049, μ: 28963, ~: 26565) +LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 18243, ~: 18443) +LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13865, ~: 13731) +LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2050, μ: 29011, ~: 26693) LibOpMulTest:testOpMulTwoOutputs() (gas: 40752) LibOpMulTest:testOpMulZeroOutputs() (gas: 39706) -LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2055, μ: 17660, ~: 17665) +LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2056, μ: 17660, ~: 17665) LibOpSetTest:testLibOpSetEvalOneInput() (gas: 34192) LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39829) LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 56003) @@ -336,79 +345,92 @@ LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44625) LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 258452) LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40451) LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 29372) -LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 20431, ~: 20673) +LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 20439, ~: 20691) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 878842) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128113) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44447) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40331) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34606) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39256) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2054, μ: 19759, ~: 19698) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 35780, ~: 35518) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 41979, ~: 42523) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2055, μ: 16833, ~: 16833) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2055, μ: 19765, ~: 19728) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2056, μ: 35779, ~: 35518) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 41979, ~: 42587) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2056, μ: 16833, ~: 16833) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1053755) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 128703) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 106, μ: 19698, ~: 19207) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 107, μ: 36662, ~: 36899) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 107, μ: 40486, ~: 41169) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2054, μ: 16836, ~: 16836) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 106, μ: 19564, ~: 19089) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 108, μ: 36628, ~: 36899) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 108, μ: 40445, ~: 40926) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2056, μ: 16836, ~: 16836) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44571) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40391) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34665) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39340) LibOpStackNPTest:testOpStackEval() (gas: 65313) LibOpStackNPTest:testOpStackEvalSeveral() (gas: 87151) -LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2055, μ: 18899, ~: 18713) -LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2055, μ: 41430, ~: 41563) +LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2056, μ: 18894, ~: 18652) +LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2056, μ: 41417, ~: 41563) LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 39336) LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 42996) -LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 107, μ: 2082720, ~: 1866817) +LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 108, μ: 2064574, ~: 1852966) LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 37881) LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41506) LibOpSubTest:testOpSubEvalOneInput() (gas: 128861) LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226150) LibOpSubTest:testOpSubEvalTwoInputs() (gas: 342286) LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30131) -LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18239, ~: 18469) -LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13822, ~: 13687) -LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13823, ~: 13688) -LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2049, μ: 55778, ~: 54811) +LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 18245, ~: 18472) +LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13821, ~: 13687) +LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13822, ~: 13688) +LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2050, μ: 55668, ~: 54812) LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 65815) LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 58732) LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 56607) -LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2055, μ: 84981, ~: 84663) -LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19658, ~: 19920) -LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2055, μ: 20586, ~: 20364) +LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2056, μ: 84987, ~: 84663) +LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19667, ~: 19901) +LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2056, μ: 20592, ~: 20364) +LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 770716) +LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 143501) +LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1406661) +LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 479352) +LibOpUint256DivTest:testOpUint256DivEvalOneInput() (gas: 132967) +LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 61456) +LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 41423) +LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 30840) +LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 40331) +LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2056, μ: 18258, ~: 18497) +LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13843, ~: 13709) +LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2056, μ: 13823, ~: 13689) +LibOpUint256DivTest:testOpUint256DivRun(bytes32[]) (runs: 2050, μ: 24850, ~: 25168) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56648) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2055, μ: 70276, ~: 70276) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2056, μ: 70276, ~: 70276) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37942) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19254) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 44281) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51313) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31734) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50289) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13770, ~: 13683) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2055, μ: 24718, ~: 24718) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2055, μ: 63336, ~: 63336) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13769, ~: 13683) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2056, μ: 24718, ~: 24718) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2056, μ: 63336, ~: 63336) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37981) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19312) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50182) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 45051) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31837) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 44006) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13793, ~: 13706) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2055, μ: 24168, ~: 24168) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2055, μ: 56439, ~: 56439) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13792, ~: 13706) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2056, μ: 24168, ~: 24168) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2056, μ: 56439, ~: 56439) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19475) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 44503) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38877) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 32020) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37804) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13793, ~: 13706) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2055, μ: 23332, ~: 23332) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2055, μ: 610932, ~: 104853) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19674, ~: 19908) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2056, μ: 13792, ~: 13706) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2056, μ: 23332, ~: 23332) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2055, μ: 104695, ~: 104853) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2056, μ: 19678, ~: 19908) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 31459) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35844) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 45183) @@ -471,7 +493,7 @@ LibParseInputsOnlyGasTest:testParseGasInputsOnly09() (gas: 52192) LibParseInputsOnlyTest:testParseInputsOnlyMultiple() (gas: 52451) LibParseInputsOnlyTest:testParseInputsOnlySingle() (gas: 51541) LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexBounds() (gas: 18858) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2055, μ: 44982, ~: 43990) +LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2056, μ: 44966, ~: 43980) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE() (gas: 11195) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE0() (gas: 11173) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert() (gas: 11218) @@ -490,7 +512,7 @@ LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegative LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNonDecimal() (gas: 11150) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert0() (gas: 35135) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert1() (gas: 35045) -LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2055, μ: 27345, ~: 37882) +LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2056, μ: 27335, ~: 37882) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal00() (gas: 56730) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal01() (gas: 63896) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal02() (gas: 70152) @@ -509,23 +531,23 @@ LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex00() (gas: 55856) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex01() (gas: 61572) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex02() (gas: 66623) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHexUint256Max() (gas: 72869) -LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2055, μ: 16496, ~: 16416) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2054, μ: 30117, ~: 29992) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2055, μ: 19024, ~: 18937) +LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2056, μ: 16493, ~: 16416) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2055, μ: 30110, ~: 29987) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2056, μ: 19021, ~: 18937) LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2048, μ: 31901, ~: 31390) LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2050, μ: 13482, ~: 13384) LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2050, μ: 24343, ~: 24267) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 54552) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 5643) LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 100, μ: 68659, ~: 68371) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 106, μ: 65739, ~: 65197) +LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 107, μ: 65626, ~: 65155) LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 100, μ: 69407, ~: 69511) -LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 107, μ: 61709, ~: 61825) +LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 108, μ: 61656, ~: 61811) LibParseLiteralStringTest:testParseStringLiteralSimple() (gas: 54654) -LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 103, μ: 75269, ~: 75822) +LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 104, μ: 75164, ~: 75793) LibParseLiteralSubParseableTest:testParseLiteralSubParseableBody() (gas: 64571) LibParseLiteralSubParseableTest:testParseLiteralSubParseableEmptyBody() (gas: 19630) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2054, μ: 89620, ~: 87745) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2055, μ: 89597, ~: 87740) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchEmpty() (gas: 10659) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosed() (gas: 10619) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace0() (gas: 10679) @@ -590,36 +612,36 @@ LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecon LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultThird() (gas: 55536) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnclosed() (gas: 52609) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnopened() (gas: 47193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2055, μ: 12114, ~: 12193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2055, μ: 13578, ~: 13436) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2055, μ: 10367, ~: 10410) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2055, μ: 11731, ~: 11562) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2055, μ: 8643, ~: 8700) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2055, μ: 11710, ~: 11953) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2055, μ: 35390, ~: 35566) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2056, μ: 12114, ~: 12193) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2056, μ: 13578, ~: 13436) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2056, μ: 10368, ~: 10410) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2056, μ: 11731, ~: 11562) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2056, μ: 8643, ~: 8700) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2056, μ: 11709, ~: 11953) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2056, μ: 35376, ~: 35566) LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1NoValues() (gas: 4679) -LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2055, μ: 34773, ~: 34873) +LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2056, μ: 34760, ~: 34754) LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedNoValues() (gas: 3219) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2055, μ: 9918, ~: 10039) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2055, μ: 11258, ~: 11074) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2055, μ: 35194, ~: 35470) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2056, μ: 9918, ~: 10039) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2056, μ: 11258, ~: 11074) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2056, μ: 35181, ~: 35470) LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultNoValues() (gas: 4625) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2055, μ: 8807, ~: 9089) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2055, μ: 11279, ~: 11085) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2055, μ: 35088, ~: 35364) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2056, μ: 8807, ~: 9089) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2056, μ: 11278, ~: 11085) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2056, μ: 35075, ~: 35364) LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1NoValues() (gas: 3891) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2055, μ: 8180, ~: 8217) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2055, μ: 9321, ~: 9095) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2055, μ: 9878, ~: 9901) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2055, μ: 11185, ~: 11003) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2055, μ: 35009, ~: 35145) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2055, μ: 35029, ~: 35165) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2056, μ: 8180, ~: 8217) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2056, μ: 9321, ~: 9095) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2056, μ: 9878, ~: 9901) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2056, μ: 11185, ~: 11003) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2056, μ: 34996, ~: 35145) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2056, μ: 35016, ~: 35165) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultNoValues() (gas: 4599) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2055, μ: 7613, ~: 7893) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2056, μ: 7613, ~: 7893) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoValues() (gas: 3266) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2055, μ: 7652, ~: 7936) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2055, μ: 9290, ~: 9499) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2055, μ: 9331, ~: 9540) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2056, μ: 7652, ~: 7936) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2056, μ: 9290, ~: 9499) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2056, μ: 9331, ~: 9540) LibParseOperandM1M1Test:testOperandM1M1Both() (gas: 57649) LibParseOperandM1M1Test:testOperandM1M1BothZero() (gas: 55824) LibParseOperandM1M1Test:testOperandM1M1Elided() (gas: 51802) @@ -632,12 +654,12 @@ LibParseOperandM1M1Test:testOperandM1M1SecondZero() (gas: 57377) LibParseOperandM1M1Test:testOperandM1M1Unclosed() (gas: 251386) LibParseOperandM1M1Test:testOperandM1M1Unopened() (gas: 49346) LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 105, μ: 42975, ~: 42972) -LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 107, μ: 359106, ~: 354759) -LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 106, μ: 42852, ~: 42849) -LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 107, μ: 158284, ~: 159209) -LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 107, μ: 276153, ~: 269825) +LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 108, μ: 359783, ~: 355583) +LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 107, μ: 42852, ~: 42849) +LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 108, μ: 158424, ~: 159350) +LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 108, μ: 276901, ~: 271402) LibParseOperandParseOperandTest:testParseOperandTooManyValues() (gas: 54582) -LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 107, μ: 214045, ~: 215134) +LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 108, μ: 214272, ~: 215672) LibParseOperandParseOperandTest:testParseOperandUnclosed() (gas: 54141) LibParseOperandParseOperandTest:testParseOperandUnexpectedChars() (gas: 51419) LibParseOperandSingleFullTest:testOperandSingleFullElided() (gas: 51178) @@ -656,16 +678,16 @@ LibParseOperandSingleFullTest:testOperandSingleFullUint16MaxOverflow() (gas: 514 LibParseOperandSingleFullTest:testOperandSingleFullUnclosed() (gas: 49874) LibParseOperandSingleFullTest:testOperandSingleFullUnopened() (gas: 48263) LibParseOperandSingleFullTest:testOperandSingleFullZero() (gas: 54245) -LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2055, μ: 9458, ~: 9402) +LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2056, μ: 9457, ~: 9402) LibParseParseWordTest:testLibParseParseWordExamples() (gas: 26983) LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2050, μ: 6477, ~: 6257) -LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2053, μ: 9727, ~: 9660) -LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 107, μ: 8980, ~: 8938) -LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 107, μ: 16068, ~: 15977) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 106, μ: 173164, ~: 158943) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 106, μ: 355080, ~: 368921) +LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2054, μ: 9727, ~: 9660) +LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 108, μ: 8978, ~: 8938) +LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 108, μ: 16021, ~: 15900) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 107, μ: 171855, ~: 158056) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 107, μ: 352558, ~: 366997) LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserSpecificStrings() (gas: 254483) -LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 107, μ: 19715, ~: 17529) +LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 108, μ: 19639, ~: 17463) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored00() (gas: 8389) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored01() (gas: 8451) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored02() (gas: 8537) @@ -741,65 +763,65 @@ LibParseSingleRHSNamedGasTest:testParseGasRHS30() (gas: 119933) LibParseSourceInputsTest:testParseSourceInputsEmptyLinePrefix() (gas: 49446) LibParseSourceInputsTest:testParseSourceInputsMultipleLines() (gas: 52189) LibParseSourceInputsTest:testParseSourceInputsSingle() (gas: 49423) -LibParseStackNameTest:testPushAndRetrieveStackNameDouble((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2055, μ: 20470, ~: 20340) -LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2055, μ: 17750, ~: 17668) -LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2055, μ: 313396, ~: 261608) -LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2055, μ: 17714, ~: 17632) -LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2055, μ: 3330, ~: 3330) +LibParseStackNameTest:testPushAndRetrieveStackNameDouble((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2056, μ: 20467, ~: 20339) +LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2056, μ: 17747, ~: 17668) +LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2056, μ: 313424, ~: 261748) +LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2056, μ: 17711, ~: 17632) +LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2056, μ: 3330, ~: 3330) LibParseStateConstantValueBloomTest:testConstantValueBloomAllBits() (gas: 45879) -LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2055, μ: 3447, ~: 3447) -LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2055, μ: 148377, ~: 144970) -LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2055, μ: 13350, ~: 13470) -LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2055, μ: 7158, ~: 7158) +LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2056, μ: 3447, ~: 3447) +LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2056, μ: 148416, ~: 144998) +LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2056, μ: 13351, ~: 13470) +LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2056, μ: 7158, ~: 7158) LibParseStateNewActiveSourcePointerTest:testPreUnalignedNewPointer() (gas: 9188) -LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2055, μ: 4802, ~: 4799) -LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2055, μ: 6477, ~: 6474) -LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2055, μ: 225560, ~: 226516) -LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2055, μ: 7030, ~: 7030) -LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2055, μ: 134954, ~: 132196) -LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2055, μ: 17004, ~: 16935) -LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2055, μ: 44722, ~: 45094) -LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2055, μ: 15484, ~: 15501) +LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2056, μ: 4802, ~: 4799) +LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2056, μ: 6477, ~: 6474) +LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2056, μ: 225465, ~: 225640) +LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2056, μ: 7030, ~: 7030) +LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2056, μ: 134988, ~: 132213) +LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2056, μ: 17001, ~: 16935) +LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2056, μ: 44713, ~: 45088) +LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2056, μ: 15481, ~: 15494) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParen() (gas: 48678) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested() (gas: 68700) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested2() (gas: 70248) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested3() (gas: 80148) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested4() (gas: 80013) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2054, μ: 46790, ~: 46791) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2055, μ: 52911, ~: 52956) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2055, μ: 46790, ~: 46791) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2056, μ: 52910, ~: 52956) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOF() (gas: 132631) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOL() (gas: 132654) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2054, μ: 46382, ~: 46382) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2055, μ: 46382, ~: 46382) LibParseUnexpectedLHSTest:testParseUnexpectedLHSUnderscoreTail() (gas: 134986) -LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2054, μ: 46615, ~: 46615) +LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2055, μ: 46615, ~: 46615) LibParseUnexpectedRHSTest:testParseUnexpectedRHSLeftParen() (gas: 46106) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 50722) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 56990) -LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2055, μ: 13230, ~: 13163) -LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2055, μ: 11433, ~: 11167) -RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 7584813) -RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 7594781) -RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2055, μ: 7592254, ~: 7592254) +LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2056, μ: 13231, ~: 13163) +LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2056, μ: 11433, ~: 11167) +RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 7623015) +RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 7633333) +RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2056, μ: 7630456, ~: 7630456) RainterpreterExpressionDeployerMetaTest:testRainterpreterExpressionDeployerExpectedConstructionMetaHash() (gas: 6221) -RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2055, μ: 2502966, ~: 2502966) -RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2055, μ: 3458983, ~: 3458983) -RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17277348) -RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10418120) -RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10421412) -RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3457989) -RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3462914) -RainterpreterParserPointersTest:testParserParseMeta() (gas: 428003) -RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 2506868) +RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2056, μ: 2531626, ~: 2531626) +RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2056, μ: 3464600, ~: 3464600) +RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17305413) +RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10434962) +RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10438254) +RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3463606) +RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3468755) +RainterpreterParserPointersTest:testParserParseMeta() (gas: 1608965) +RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 2535752) RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 2160048) RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 2159634) RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 2158330) RainterpreterReferenceExternDescribedByMetaV1:testRainterpreterReferenceExternDescribedByMetaV1Happy() (gas: 2081641) -RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2055, μ: 2093899, ~: 2093899) +RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2056, μ: 2093899, ~: 2093899) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2183789) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2178028) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 107, μ: 3597, ~: 3597) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 107, μ: 756204, ~: 760591) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 107, μ: 2095481, ~: 2095759) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 108, μ: 3597, ~: 3597) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 108, μ: 749443, ~: 759376) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 108, μ: 2095496, ~: 2095759) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 100, μ: 2091863, ~: 2091662) RainterpreterReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 2081736) RainterpreterReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 2081779) @@ -808,13 +830,13 @@ RainterpreterReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 208 RainterpreterReferenceExternPointersTest:testSubParserOperandParsers() (gas: 2082229) RainterpreterReferenceExternPointersTest:testSubParserParseMeta() (gas: 22017) RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2212950) -RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2055, μ: 2167477, ~: 2167581) +RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2056, μ: 2167483, ~: 2167581) RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 2128684) RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 52336) RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 83065) -RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2055, μ: 229923, ~: 229923) -RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 102, μ: 1614946, ~: 1605278) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 107, μ: 3472745, ~: 3318341) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 107, μ: 1881833, ~: 1898212) -RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 104, μ: 249550, ~: 250045) +RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2056, μ: 229923, ~: 229923) +RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 103, μ: 1618862, ~: 1605309) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 108, μ: 3455422, ~: 3312550) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 108, μ: 1867991, ~: 1884915) +RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 105, μ: 249369, ~: 249891) RainterpreterTest:testRainterpreterOddFunctionPointersLength() (gas: 3672) \ No newline at end of file diff --git a/src/generated/Rainterpreter.pointers.sol b/src/generated/Rainterpreter.pointers.sol index 39474e1f6..cf1a05c64 100644 --- a/src/generated/Rainterpreter.pointers.sol +++ b/src/generated/Rainterpreter.pointers.sol @@ -10,11 +10,11 @@ pragma solidity =0.8.25; /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xf600fb5624e0091521818a502a7278ee518b7fb7c350b53b9f3b77aaf46bdb0b); +bytes32 constant BYTECODE_HASH = bytes32(0xf09dd191531ee0069e04762263165ea01d561d261cb3b1cadf92004524818224); /// @dev The function pointers known to the interpreter for dynamic dispatch. /// By setting these as a constant they can be inlined into the interpreter /// and loaded at eval time for very low gas (~100) due to the compiler /// optimising it to a single `codecopy` to build the in memory bytes array. bytes constant OPCODE_FUNCTION_POINTERS = - hex"077507a707cb09570a200a320a440a5d0a810ab50ac60ad70b790b980c560d060d8a0ecc0fff0c5610f811aa124c12c412d512e612e612f71384139d13b113ca13f5140e1421148314d1151f1550159e15ec163a1721"; + hex"077e07b007d409600a290a3b0a4d0a660a8a0abe0acf0ae00b820ba10c5f0d0f0d930ed510080c5f110111b3125512cd12de12ef12ef1300138d13a613ba13d313fe1417142a148c14da1528157615a715f5164316911778"; diff --git a/src/generated/RainterpreterExpressionDeployer.pointers.sol b/src/generated/RainterpreterExpressionDeployer.pointers.sol index 90070d2ae..729acb627 100644 --- a/src/generated/RainterpreterExpressionDeployer.pointers.sol +++ b/src/generated/RainterpreterExpressionDeployer.pointers.sol @@ -10,11 +10,11 @@ pragma solidity =0.8.25; /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x04e7730820de63ed51e17b1f09e390559332982ffd0f2782db71f340592774ac); +bytes32 constant BYTECODE_HASH = bytes32(0xce632fd9c0b6f1bc6ec0187dc34a82890cda5054c0f2faa9a2ad631668aa0553); /// @dev The hash of the meta that describes the contract. -bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xfc12f7a5af034243bd61d42d021d000dc40c7c1c8a059b9973ec70cbff9f5fe3); +bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x9913ced3ebacf8ef3d859004e3e324fa78cd0a6651a00395a8ab23f8652eeef3); /// @dev The function pointers for the integrity check fns. bytes constant INTEGRITY_FUNCTION_POINTERS = - hex"0e100e8e0ef2106c107610761080108910a4114a114a11a6121e122b10761080122b107610801076107610761080106c106c106c106c123510761076107610801076106c123f1267123f106c123f1267126710801235"; + hex"0e180e960efa1074107e107e1088109110ac1152115211ae12261233107e10881233107e1088107e107e107e10881074107410741074123d107e107e107e1088107e107412471247126f124710741247126f126f1088123d"; diff --git a/src/generated/RainterpreterParser.pointers.sol b/src/generated/RainterpreterParser.pointers.sol index 32c7321e1..0e1175ad8 100644 --- a/src/generated/RainterpreterParser.pointers.sol +++ b/src/generated/RainterpreterParser.pointers.sol @@ -10,7 +10,7 @@ pragma solidity =0.8.25; /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0x74d90562fe80acca7dc3ccd293ed98a0a51ec14dc39ea9c0a5d01ec43d4b3423); +bytes32 constant BYTECODE_HASH = bytes32(0x2900f79bc97792788345da165dc96c373effb756617809d2dc9c179487a4b70c); /// @dev The parse meta that is used to lookup word definitions. /// The structure of the parse meta is: @@ -29,7 +29,7 @@ bytes32 constant BYTECODE_HASH = bytes32(0x74d90562fe80acca7dc3ccd293ed98a0a51ec /// bit count of the previous bloom filter. If we reach the end of the bloom /// filters then we have a miss. bytes constant PARSE_META = - hex"0178a8806000299010000908a00a30484001280030060000180000000cc2200408a00c95d8382948145c2a34b3f325d587e204afc8f01d95a26007b9a51f0d5e6f2803ce312215fae0a1118cfd53051c784d1681ac9620ac6dfc26a4e5e91e5fc32a0e92b2401cbbd837100ef76b00cd8814229714ec133135921ff880501427634f0f23b4970ac0e53d0b895f991ac908be0983724f12c080bc279d7b7d235c0ab5086d2a7b19bcb24402af7d4506414b8117b04fb31bb2182f18ef532921c301e328fa5d8001336a5924ab2461"; + hex"0178a8806000299010800908a00a30484001280030060000180000000cc2200408a00c95d8382a48145c2b34b3f326d587e204afc8f01d95a26007b9a51f0d5e6f2803ce312215fae0a1118cfd53051c784d1681ac9620ac6dfc27a4e5e91e5fc32a0e92b2401cbbd837100ef76b00cd8814239714ec133135921ff880501427634f0f23b4970ac0e53d0b895f991ac908be0983724f12c080bc289d7b7d226f62e0245c0ab5086d2a7b19bcb24402af7d4506414b8117b04fb31bb2182f18ef532921c301e329fa5d8001336a5925ab2461"; /// @dev The build depth of the parser meta. @@ -39,11 +39,11 @@ uint8 constant PARSE_META_BUILD_DEPTH = 2; /// These positional indexes all map to the same indexes looked up in the parse /// meta. bytes constant OPERAND_HANDLER_FUNCTION_POINTERS = - hex"19f319f319f31ac81bdf1bdf1bdf1ac81ac819f319f319f31bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf1bdf19f31bdf1bdf"; + hex"19fb19fb19fb1ad01be71be71be71ad01ad019fb19fb19fb1be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be71be719fb1be71be7"; /// @dev Every two bytes is a function pointer for a literal parser. /// Literal dispatches are determined by the first byte(s) of the literal /// rather than a full word lookup, and are done with simple conditional /// jumps as the possibilities are limited compared to the number of words we /// have. -bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"153b176d17b0184e"; +bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"1543177517b81856"; diff --git a/src/lib/op/LibAllStandardOps.sol b/src/lib/op/LibAllStandardOps.sol index 513eaaa0d..209d2fa4f 100644 --- a/src/lib/op/LibAllStandardOps.sol +++ b/src/lib/op/LibAllStandardOps.sol @@ -106,7 +106,7 @@ import {LibParseLiteralHex} from "../parse/literal/LibParseLiteralHex.sol"; import {LibParseLiteralSubParseable} from "../parse/literal/LibParseLiteralSubParseable.sol"; /// @dev Number of ops currently provided by `AllStandardOps`. -uint256 constant ALL_STANDARD_OPS_LENGTH = 43; +uint256 constant ALL_STANDARD_OPS_LENGTH = 44; /// @title LibAllStandardOps /// @notice Every opcode available from the core repository laid out as a single @@ -242,10 +242,10 @@ library LibAllStandardOps { // "Calculates a linear growth curve as `base + (rate * t)` where `base` is the initial value, `rate` is the rate of growth and `t` is units of time. Inputs in order are `base`, `rate`, and `t` respectively." // ), AuthoringMetaV2("uint256-max-value", "The maximum possible unsigned integer value (all binary bits are 1)."), - // AuthoringMetaV2( - // "uint256-div", - // "Divides the first input by all other inputs as uint256 values. Errors if any divisor is zero. Rounds down." - // ), + AuthoringMetaV2( + "uint256-div", + "Divides the first input by all other inputs as uint256 values. Errors if any divisor is zero. Rounds down." + ), // AuthoringMetaV2( // "uint256-mul", // "Multiplies all inputs together as uint256 values. Errors if the multiplication exceeds `max-value()`." @@ -451,8 +451,8 @@ library LibAllStandardOps { // LibParseOperand.handleOperandDisallowed, // uint256-max-value LibParseOperand.handleOperandDisallowed, - // // uint256-div - // LibParseOperand.handleOperandDisallowed, + // uint256-div + LibParseOperand.handleOperandDisallowed, // // uint256-mul // LibParseOperand.handleOperandDisallowed, // // uint256-power @@ -594,7 +594,7 @@ library LibAllStandardOps { // LibOpExponentialGrowth.integrity, // LibOpLinearGrowth.integrity, LibOpMaxUint256.integrity, - // LibOpUint256Div.integrity, + LibOpUint256Div.integrity, // LibOpUint256Mul.integrity, // LibOpUint256Pow.integrity, LibOpAdd.integrity, @@ -707,7 +707,7 @@ library LibAllStandardOps { // LibOpExponentialGrowth.run, // LibOpLinearGrowth.run, LibOpMaxUint256.run, - // LibOpUint256Div.run, + LibOpUint256Div.run, // LibOpUint256Mul.run, // LibOpUint256Pow.run, LibOpAdd.run, diff --git a/src/lib/op/math/uint256/LibOpUint256Div.sol b/src/lib/op/math/uint256/LibOpUint256Div.sol index 39a68bbb2..d74455ddd 100644 --- a/src/lib/op/math/uint256/LibOpUint256Div.sol +++ b/src/lib/op/math/uint256/LibOpUint256Div.sol @@ -5,6 +5,7 @@ import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpre import {Pointer} from "rain.solmem/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; /// @title LibOpUint256Div /// @notice Opcode to divide N integers. Errors on divide by zero. Truncates @@ -52,20 +53,20 @@ library LibOpUint256Div { } /// Gas intensive reference implementation of division for testing. - function referenceFn(InterpreterState memory, OperandV2, uint256[] memory inputs) + function referenceFn(InterpreterState memory, OperandV2, StackItem[] memory inputs) internal pure - returns (uint256[] memory outputs) + returns (StackItem[] memory outputs) { // Unchecked so that when we assert that an overflow error is thrown, we // see the revert from the real function and not the reference function. unchecked { - uint256 acc = inputs[0]; + uint256 acc = uint256(StackItem.unwrap(inputs[0])); for (uint256 i = 1; i < inputs.length; i++) { - acc /= inputs[i]; + acc /= uint256(StackItem.unwrap(inputs[i])); } - outputs = new uint256[](1); - outputs[0] = acc; + outputs = new StackItem[](1); + outputs[0] = StackItem.wrap(bytes32(acc)); } } } diff --git a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol index 382614991..3d7b8c03c 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol @@ -1,181 +1,199 @@ // SPDX-License-Identifier: CAL pragma solidity =0.8.25; -// import {OpTest, IntegrityCheckState, Operand, InterpreterState, stdError} from "test/abstract/OpTest.sol"; -// import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; -// import {UnexpectedOperand} from "src/error/ErrParse.sol"; -// import {LibOpUint256Div} from "src/lib/op/math/uint256/LibOpUint256Div.sol"; -// import {LibOperand} from "test/lib/operand/LibOperand.sol"; - -// contract LibOpUint256DivTest is OpTest { -// /// Directly test the integrity logic of LibOpUint256Div. This tests the happy -// /// path where the inputs input and calc match. -// function testOpUint256DivIntegrityHappy(IntegrityCheckState memory state, uint8 inputs, uint16 operandData) -// external -// pure -// { -// inputs = uint8(bound(inputs, 2, 0x0F)); -// (uint256 calcInputs, uint256 calcOutputs) = -// LibOpUint256Div.integrity(state, LibOperand.build(inputs, 1, operandData)); - -// assertEq(calcInputs, inputs); -// assertEq(calcOutputs, 1); -// } - -// /// Directly test the integrity logic of LibOpUint256Div. This tests the unhappy -// /// path where the operand is invalid due to 0 inputs. -// function testOpUint256DivIntegrityUnhappyZeroInputs(IntegrityCheckState memory state) external pure { -// (uint256 calcInputs, uint256 calcOutputs) = LibOpUint256Div.integrity(state, Operand.wrap(0)); -// // Calc inputs will be minimum 2. -// assertEq(calcInputs, 2); -// assertEq(calcOutputs, 1); -// } - -// /// Directly test the integrity logic of LibOpUint256Div. This tests the unhappy -// /// path where the operand is invalid due to 1 inputs. -// function testOpUint256DivIntegrityUnhappyOneInput(IntegrityCheckState memory state) external pure { -// (uint256 calcInputs, uint256 calcOutputs) = LibOpUint256Div.integrity(state, Operand.wrap(0x010000)); -// // Calc inputs will be minimum 2. -// assertEq(calcInputs, 2); -// assertEq(calcOutputs, 1); -// } - -// /// Directly test the runtime logic of LibOpUint256Div. -// function testOpUint256DivRun(uint256[] memory inputs) external { -// InterpreterState memory state = opTestDefaultInterpreterState(); -// vm.assume(inputs.length >= 2); -// vm.assume(inputs.length <= 0x0F); -// Operand operand = LibOperand.build(uint8(inputs.length), 1, 0); - -// uint256 divZeros = 0; -// for (uint256 i = 1; i < inputs.length; i++) { -// if (inputs[i] == 0) { -// divZeros++; -// } -// } -// if (divZeros > 0) { -// vm.expectRevert(stdError.divisionError); -// } -// opReferenceCheck( -// state, operand, LibOpUint256Div.referenceFn, LibOpUint256Div.integrity, LibOpUint256Div.run, inputs -// ); -// } - -// /// Test the eval of `uint256-div` opcode parsed from a string. Tests zero inputs. -// function testOpUint256DivEvalZeroInputs() external { -// checkBadInputs("_: uint256-div();", 0, 2, 0); -// } - -// /// Test the eval of `uint256-div` opcode parsed from a string. Tests one input. -// function testOpUint256DivEvalOneInput() external { -// checkBadInputs("_: uint256-div(5e-18);", 1, 2, 1); -// checkBadInputs("_: uint256-div(0e-18);", 1, 2, 1); -// checkBadInputs("_: uint256-div(1e-18);", 1, 2, 1); -// checkBadInputs("_: uint256-div(max-value());", 1, 2, 1); -// } - -// function testOpUint256DivEvalZeroOutputs() external { -// checkBadOutputs(": uint256-div(0 0);", 2, 1, 0); -// } - -// function testOpUint256DivEvalTwoOutputs() external { -// checkBadOutputs("_ _: uint256-div(0 0);", 2, 1, 2); -// } - -// /// Test the eval of `uint256-div` opcode parsed from a string. Tests two inputs. -// /// Tests the happy path where we do not divide by zero. -// /// Note that the division truncates (rounds down). -// function testOpUint256DivEval2InputsHappy() external view { -// // Show that the division truncates (rounds down). -// checkHappy("_: uint256-div(6e-18 1e-18);", 6, "6 / 1"); -// checkHappy("_: uint256-div(6e-18 2e-18);", 3, "6 / 2"); -// checkHappy("_: uint256-div(6e-18 3e-18);", 2, "6 / 3"); -// checkHappy("_: uint256-div(6e-18 4e-18);", 1, "6 / 4"); -// checkHappy("_: uint256-div(6e-18 5e-18);", 1, "6 / 5"); -// checkHappy("_: uint256-div(6e-18 6e-18);", 1, "6 / 6"); -// checkHappy("_: uint256-div(6e-18 7e-18);", 0, "6 / 7"); -// checkHappy("_: uint256-div(6e-18 max-value());", 0, "6 / max-value()"); - -// // Anything divided by 1 is itself. -// checkHappy("_: uint256-div(0 1e-18);", 0, "0 / 1"); -// checkHappy("_: uint256-div(1e-18 1e-18);", 1, "1 / 1"); -// checkHappy("_: uint256-div(2e-18 1e-18);", 2, "2 / 1"); -// checkHappy("_: uint256-div(3e-18 1e-18);", 3, "3 / 1"); -// checkHappy("_: uint256-div(max-value() 1e-18);", type(uint256).max, "max-value() / 1"); - -// // Anything divided by itself is 1 (except 0). -// checkHappy("_: uint256-div(1e-18 1e-18);", 1, "1 / 1"); -// checkHappy("_: uint256-div(2e-18 2e-18);", 1, "2 / 2"); -// checkHappy("_: uint256-div(3e-18 3e-18);", 1, "3 / 3"); -// checkHappy("_: uint256-div(max-value() max-value());", 1, "max-value() / max-value()"); -// } - -// /// Test the eval of `uint256-div` opcode parsed from a string. Tests two inputs. -// /// Tests the unhappy path where we divide by zero. -// function testOpUint256DivEval2InputsUnhappy() external { -// checkUnhappy("_: uint256-div(0 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(1e-18 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(max-value() 0);", stdError.divisionError); -// } - -// /// Test the eval of `uint256-div` opcode parsed from a string. Tests three inputs. -// /// Tests the happy path where we do not divide by zero. -// function testOpUint256DivEval3InputsHappy() external view { -// // Show that the division truncates (rounds down). -// checkHappy("_: uint256-div(6e-18 1e-18 1e-18);", 6, "6 / 1 / 1"); -// checkHappy("_: uint256-div(6e-18 2e-18 1e-18);", 3, "6 / 2 / 1"); -// checkHappy("_: uint256-div(6e-18 3e-18 1e-18);", 2, "6 / 3 / 1"); -// checkHappy("_: uint256-div(6e-18 4e-18 1e-18);", 1, "6 / 4 / 1"); -// checkHappy("_: uint256-div(6e-18 5e-18 1e-18);", 1, "6 / 5 / 1"); -// checkHappy("_: uint256-div(6e-18 6e-18 1e-18);", 1, "6 / 6 / 1"); -// checkHappy("_: uint256-div(6e-18 7e-18 1e-18);", 0, "6 / 7 / 1"); -// checkHappy("_: uint256-div(6e-18 max-value() 1e-18);", 0, "6 / max-value() / 1"); -// checkHappy("_: uint256-div(6e-18 1e-18 2e-18);", 3, "6 / 1 / 2"); -// checkHappy("_: uint256-div(6e-18 2e-18 2e-18);", 1, "6 / 2 / 2"); -// checkHappy("_: uint256-div(6e-18 3e-18 2e-18);", 1, "6 / 3 / 2"); -// checkHappy("_: uint256-div(6e-18 4e-18 2e-18);", 0, "6 / 4 / 2"); -// checkHappy("_: uint256-div(6e-18 5e-18 2e-18);", 0, "6 / 5 / 2"); -// checkHappy("_: uint256-div(6e-18 6e-18 2e-18);", 0, "6 / 6 / 2"); -// checkHappy("_: uint256-div(6e-18 7e-18 2e-18);", 0, "6 / 7 / 2"); -// checkHappy("_: uint256-div(6e-18 max-value() 2e-18);", 0, "6 / max-value() / 2"); - -// // Anything divided by 1 is itself. -// checkHappy("_: uint256-div(0 1e-18 1e-18);", 0, "0 / 1 / 1"); -// checkHappy("_: uint256-div(1e-18 1e-18 1e-18);", 1, "1 / 1 / 1"); -// checkHappy("_: uint256-div(2e-18 1e-18 1e-18);", 2, "2 / 1 / 1"); -// checkHappy("_: uint256-div(3e-18 1e-18 1e-18);", 3, "3 / 1 / 1"); -// checkHappy("_: uint256-div(max-value() 1e-18 1e-18);", type(uint256).max, "max-value() / 1 / 1"); - -// // Anything divided by itself is 1 (except 0). -// checkHappy("_: uint256-div(1e-18 1e-18 1e-18);", 1, "1 / 1 / 1"); -// checkHappy("_: uint256-div(2e-18 2e-18 1e-18);", 1, "2 / 2 / 1"); -// checkHappy("_: uint256-div(2e-18 1e-18 2e-18);", 1, "2 / 1 / 2"); -// checkHappy("_: uint256-div(3e-18 3e-18 1e-18);", 1, "3 / 3 / 1"); -// checkHappy("_: uint256-div(3e-18 1e-18 3e-18);", 1, "3 / 1 / 3"); -// checkHappy("_: uint256-div(max-value() max-value() 1e-18);", 1, "max-value() / max-value() / 1"); -// checkHappy("_: uint256-div(max-value() 1e-18 max-value());", 1, "max-value() / 1 / max-value()"); -// } - -// /// Test the eval of `uint256-div` opcode parsed from a string. Tests three inputs. -// /// Tests the unhappy path where we divide by zero. -// function testOpUint256DivEval3InputsUnhappy() external { -// checkUnhappy("_: uint256-div(0 0 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(1e-18 0 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(max-value() 0 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(0 1e-18 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(1e-18 1e-18 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(max-value() max-value() 0);", stdError.divisionError); -// checkUnhappy("_: uint256-div(0 0 1e-18);", stdError.divisionError); -// checkUnhappy("_: uint256-div(1e-18 0 1e-18);", stdError.divisionError); -// checkUnhappy("_: uint256-div(max-value() 0 1e-18);", stdError.divisionError); -// } - -// /// Test the eval of `uint256-div` opcode parsed from a string. -// /// Tests that operands are disallowed. -// function testOpUint256DivEvalOperandDisallowed() external { -// checkDisallowedOperand("_: uint256-div<0>(0 0 0);"); -// checkDisallowedOperand("_: uint256-div<1>(0 0 0);"); -// checkDisallowedOperand("_: uint256-div<2>(0 0 0);"); -// checkDisallowedOperand("_: uint256-div<3 1>(0 0 0);"); -// } -// } +import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, stdError} from "test/abstract/OpTest.sol"; +import {LibOpUint256Div} from "src/lib/op/math/uint256/LibOpUint256Div.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; + +contract LibOpUint256DivTest is OpTest { + /// Directly test the integrity logic of LibOpUint256Div. This tests the happy + /// path where the inputs input and calc match. + function testOpUint256DivIntegrityHappy(IntegrityCheckState memory state, uint8 inputs, uint16 operandData) + external + pure + { + inputs = uint8(bound(inputs, 2, 0x0F)); + (uint256 calcInputs, uint256 calcOutputs) = + LibOpUint256Div.integrity(state, LibOperand.build(inputs, 1, operandData)); + + assertEq(calcInputs, inputs); + assertEq(calcOutputs, 1); + } + + /// Directly test the integrity logic of LibOpUint256Div. This tests the unhappy + /// path where the operand is invalid due to 0 inputs. + function testOpUint256DivIntegrityUnhappyZeroInputs(IntegrityCheckState memory state) external pure { + (uint256 calcInputs, uint256 calcOutputs) = LibOpUint256Div.integrity(state, OperandV2.wrap(0)); + // Calc inputs will be minimum 2. + assertEq(calcInputs, 2); + assertEq(calcOutputs, 1); + } + + /// Directly test the integrity logic of LibOpUint256Div. This tests the unhappy + /// path where the operand is invalid due to 1 inputs. + function testOpUint256DivIntegrityUnhappyOneInput(IntegrityCheckState memory state) external pure { + (uint256 calcInputs, uint256 calcOutputs) = + LibOpUint256Div.integrity(state, OperandV2.wrap(bytes32(uint256(0x010000)))); + // Calc inputs will be minimum 2. + assertEq(calcInputs, 2); + assertEq(calcOutputs, 1); + } + + function _testOpUint256DivRun(OperandV2 operand, StackItem[] memory inputs) external view { + InterpreterState memory state = opTestDefaultInterpreterState(); + opReferenceCheck( + state, operand, LibOpUint256Div.referenceFn, LibOpUint256Div.integrity, LibOpUint256Div.run, inputs + ); + } + + /// Directly test the runtime logic of LibOpUint256Div. + function testOpUint256DivRun(StackItem[] memory inputs) external { + vm.assume(inputs.length >= 2); + vm.assume(inputs.length <= 0x0F); + OperandV2 operand = LibOperand.build(uint8(inputs.length), 1, 0); + + uint256 divZeros = 0; + for (uint256 i = 1; i < inputs.length; i++) { + if (StackItem.unwrap(inputs[i]) == 0) { + divZeros++; + } + } + if (divZeros > 0) { + vm.expectRevert(stdError.divisionError); + } + this._testOpUint256DivRun(operand, inputs); + } + + /// Test the eval of `uint256-div` opcode parsed from a string. Tests zero inputs. + function testOpUint256DivEvalZeroInputs() external { + checkBadInputs("_: uint256-div();", 0, 2, 0); + } + + /// Test the eval of `uint256-div` opcode parsed from a string. Tests one input. + function testOpUint256DivEvalOneInput() external { + checkBadInputs("_: uint256-div(5e-18);", 1, 2, 1); + checkBadInputs("_: uint256-div(0e-18);", 1, 2, 1); + checkBadInputs("_: uint256-div(1e-18);", 1, 2, 1); + checkBadInputs("_: uint256-div(max-value());", 1, 2, 1); + } + + function testOpUint256DivEvalZeroOutputs() external { + checkBadOutputs(": uint256-div(0 0);", 2, 1, 0); + } + + function testOpUint256DivEvalTwoOutputs() external { + checkBadOutputs("_ _: uint256-div(0 0);", 2, 1, 2); + } + + /// Test the eval of `uint256-div` opcode parsed from a string. Tests two inputs. + /// Tests the happy path where we do not divide by zero. + /// Note that the division truncates (rounds down). + function testOpUint256DivEval2InputsHappy() external view { + // Show that the division truncates (rounds down). + checkHappy("_: uint256-div(0x06 0x01);", bytes32(uint256(6)), "6 / 1"); + checkHappy("_: uint256-div(0x06 0x02);", bytes32(uint256(3)), "6 / 2"); + checkHappy("_: uint256-div(0x06 0x03);", bytes32(uint256(2)), "6 / 3"); + checkHappy("_: uint256-div(0x06 0x04);", bytes32(uint256(1)), "6 / 4"); + checkHappy("_: uint256-div(0x06 0x05);", bytes32(uint256(1)), "6 / 5"); + checkHappy("_: uint256-div(0x06 0x06);", bytes32(uint256(1)), "6 / 6"); + checkHappy("_: uint256-div(0x06 0x07);", bytes32(uint256(0)), "6 / 7"); + checkHappy("_: uint256-div(0x06 uint256-max-value());", 0, "6 / uint256-max-value()"); + + // Anything divided by 1 is itself. + checkHappy("_: uint256-div(0 0x01);", bytes32(uint256(0)), "0 / 1"); + checkHappy("_: uint256-div(0x01 0x01);", bytes32(uint256(1)), "1 / 1"); + checkHappy("_: uint256-div(0x02 0x01);", bytes32(uint256(2)), "2 / 1"); + checkHappy("_: uint256-div(0x03 0x01);", bytes32(uint256(3)), "3 / 1"); + checkHappy("_: uint256-div(uint256-max-value() 0x01);", bytes32(type(uint256).max), "uint256-max-value() / 1"); + + // Anything divided by itself is 1 (except 0). + checkHappy("_: uint256-div(0x01 0x01);", bytes32(uint256(1)), "1 / 1"); + checkHappy("_: uint256-div(0x02 0x02);", bytes32(uint256(1)), "2 / 2"); + checkHappy("_: uint256-div(0x03 0x03);", bytes32(uint256(1)), "3 / 3"); + checkHappy( + "_: uint256-div(uint256-max-value() uint256-max-value());", + bytes32(uint256(1)), + "uint256-max-value() / uint256-max-value()" + ); + } + + /// Test the eval of `uint256-div` opcode parsed from a string. Tests two inputs. + /// Tests the unhappy path where we divide by zero. + function testOpUint256DivEval2InputsUnhappy() external { + checkUnhappy("_: uint256-div(0 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(0x01 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(uint256-max-value() 0);", stdError.divisionError); + } + + /// Test the eval of `uint256-div` opcode parsed from a string. Tests three inputs. + /// Tests the happy path where we do not divide by zero. + function testOpUint256DivEval3InputsHappy() external view { + // Show that the division truncates (rounds down). + checkHappy("_: uint256-div(0x06 0x01 0x01);", bytes32(uint256(6)), "6 / 1 / 1"); + checkHappy("_: uint256-div(0x06 0x02 0x01);", bytes32(uint256(3)), "6 / 2 / 1"); + checkHappy("_: uint256-div(0x06 0x03 0x01);", bytes32(uint256(2)), "6 / 3 / 1"); + checkHappy("_: uint256-div(0x06 0x04 0x01);", bytes32(uint256(1)), "6 / 4 / 1"); + checkHappy("_: uint256-div(0x06 0x05 0x01);", bytes32(uint256(1)), "6 / 5 / 1"); + checkHappy("_: uint256-div(0x06 0x06 0x01);", bytes32(uint256(1)), "6 / 6 / 1"); + checkHappy("_: uint256-div(0x06 0x07 0x01);", 0, "6 / 7 / 1"); + checkHappy("_: uint256-div(0x06 uint256-max-value() 0x01);", 0, "6 / uint256-max-value() / 1"); + checkHappy("_: uint256-div(0x06 0x01 0x02);", bytes32(uint256(3)), "6 / 1 / 2"); + checkHappy("_: uint256-div(0x06 0x02 0x02);", bytes32(uint256(1)), "6 / 2 / 2"); + checkHappy("_: uint256-div(0x06 0x03 0x02);", bytes32(uint256(1)), "6 / 3 / 2"); + checkHappy("_: uint256-div(0x06 0x04 0x02);", bytes32(uint256(0)), "6 / 4 / 2"); + checkHappy("_: uint256-div(0x06 0x05 0x02);", 0, "6 / 5 / 2"); + checkHappy("_: uint256-div(0x06 0x06 0x02);", 0, "6 / 6 / 2"); + checkHappy("_: uint256-div(0x06 0x07 0x02);", 0, "6 / 7 / 2"); + checkHappy("_: uint256-div(0x06 uint256-max-value() 0x02);", 0, "6 / uint256-max-value() / 2"); + + // Anything divided by 1 is itself. + checkHappy("_: uint256-div(0 0x01 0x01);", 0, "0 / 1 / 1"); + checkHappy("_: uint256-div(0x01 0x01 0x01);", bytes32(uint256(1)), "1 / 1 / 1"); + checkHappy("_: uint256-div(0x02 0x01 0x01);", bytes32(uint256(2)), "2 / 1 / 1"); + checkHappy("_: uint256-div(0x03 0x01 0x01);", bytes32(uint256(3)), "3 / 1 / 1"); + checkHappy( + "_: uint256-div(uint256-max-value() 0x01 0x01);", bytes32(type(uint256).max), "uint256-max-value() / 1 / 1" + ); + + // Anything divided by itself is 1 (except 0). + checkHappy("_: uint256-div(0x01 0x01 0x01);", bytes32(uint256(1)), "1 / 1 / 1"); + checkHappy("_: uint256-div(0x02 0x02 0x01);", bytes32(uint256(1)), "2 / 2 / 1"); + checkHappy("_: uint256-div(0x02 0x01 0x02);", bytes32(uint256(1)), "2 / 1 / 2"); + checkHappy("_: uint256-div(0x03 0x03 0x01);", bytes32(uint256(1)), "3 / 3 / 1"); + checkHappy("_: uint256-div(0x03 0x01 0x03);", bytes32(uint256(1)), "3 / 1 / 3"); + checkHappy( + "_: uint256-div(uint256-max-value() uint256-max-value() 0x01);", + bytes32(uint256(1)), + "uint256-max-value() / uint256-max-value() / 1" + ); + checkHappy( + "_: uint256-div(uint256-max-value() 0x01 uint256-max-value());", + bytes32(uint256(1)), + "uint256-max-value() / 1 / uint256-max-value()" + ); + } + + /// Test the eval of `uint256-div` opcode parsed from a string. Tests three inputs. + /// Tests the unhappy path where we divide by zero. + function testOpUint256DivEval3InputsUnhappy() external { + checkUnhappy("_: uint256-div(0 0 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(1e-18 0 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(max-value() 0 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(0 1e-18 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(1e-18 1e-18 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(max-value() max-value() 0);", stdError.divisionError); + checkUnhappy("_: uint256-div(0 0 1e-18);", stdError.divisionError); + checkUnhappy("_: uint256-div(1e-18 0 1e-18);", stdError.divisionError); + checkUnhappy("_: uint256-div(max-value() 0 1e-18);", stdError.divisionError); + } + + /// Test the eval of `uint256-div` opcode parsed from a string. + /// Tests that operands are disallowed. + function testOpUint256DivEvalOperandDisallowed() external { + checkDisallowedOperand("_: uint256-div<0>(0 0 0);"); + checkDisallowedOperand("_: uint256-div<1>(0 0 0);"); + checkDisallowedOperand("_: uint256-div<2>(0 0 0);"); + checkDisallowedOperand("_: uint256-div<3 1>(0 0 0);"); + } +}