diff --git a/.gas-snapshot b/.gas-snapshot index 3cbda50a0..bcc18b8a0 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,642 +1,654 @@ BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2060, μ: 320946, ~: 320946) BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2060, μ: 678755, ~: 678755) -LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 73154) -LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 10629) -LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 10614) -LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2060, μ: 86499, ~: 86499) +LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 75677) +LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 10854) +LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 10827) +LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2060, μ: 86712, ~: 86712) LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2060, μ: 9767, ~: 10284) LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2060, μ: 8884, ~: 9401) LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2060, μ: 43061, ~: 42630) -LibOpAbsTest:testOpAbsEval() (gas: 293215) -LibOpAbsTest:testOpAbsEvalOperandDisallowed() (gas: 17580) +LibOpAbsTest:testOpAbsEval() (gas: 293257) +LibOpAbsTest:testOpAbsEvalOperandDisallowed() (gas: 17587) LibOpAbsTest:testOpAbsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13757, ~: 13664) LibOpAbsTest:testOpAbsRun(bytes32,uint16) (runs: 2060, μ: 17409, ~: 17349) -LibOpAbsTest:testOpAbsTwoInputs() (gas: 40006) -LibOpAbsTest:testOpAbsTwoOutputs() (gas: 35837) -LibOpAbsTest:testOpAbsZeroInputs() (gas: 30165) -LibOpAbsTest:testOpAbsZeroOutputs() (gas: 34829) -LibOpAddTest:testOpAddEval2InputsHappy() (gas: 160798) -LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57711) -LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 103075) -LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 199120) -LibOpAddTest:testOpAddEval2InputsUnhappy() (gas: 103211) -LibOpAddTest:testOpAddEval3InputsHappy() (gas: 309669) -LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 709191) -LibOpAddTest:testOpAddEvalOneInput() (gas: 36624) -LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91651) -LibOpAddTest:testOpAddEvalTwoOutput() (gas: 44008) -LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30244) -LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 43026) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18207, ~: 18372) +LibOpAbsTest:testOpAbsTwoInputs() (gas: 40012) +LibOpAbsTest:testOpAbsTwoOutputs() (gas: 35843) +LibOpAbsTest:testOpAbsZeroInputs() (gas: 30172) +LibOpAbsTest:testOpAbsZeroOutputs() (gas: 34835) +LibOpAddTest:testOpAddEval2InputsHappy() (gas: 160816) +LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57717) +LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 104545) +LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 199144) +LibOpAddTest:testOpAddEval2InputsUnhappy() (gas: 104998) +LibOpAddTest:testOpAddEval3InputsHappy() (gas: 309704) +LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 725603) +LibOpAddTest:testOpAddEvalOneInput() (gas: 36630) +LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91693) +LibOpAddTest:testOpAddEvalTwoOutput() (gas: 44014) +LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30251) +LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 43032) +LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18210, ~: 18400) LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13877, ~: 13765) LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13874, ~: 13762) -LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2052, μ: 52053, ~: 52098) -LibOpAnyTest:testOpAnyEval1FalseInput() (gas: 51921) -LibOpAnyTest:testOpAnyEval1TrueInput() (gas: 51869) -LibOpAnyTest:testOpAnyEval2FalseInputs() (gas: 57215) -LibOpAnyTest:testOpAnyEval2MixedInputs() (gas: 57782) -LibOpAnyTest:testOpAnyEval2MixedInputs2() (gas: 57869) -LibOpAnyTest:testOpAnyEval2MixedInputsZeroExponent() (gas: 58887) -LibOpAnyTest:testOpAnyEval2TrueInputs() (gas: 57803) -LibOpAnyTest:testOpAnyEvalFail() (gas: 29751) +LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2052, μ: 52133, ~: 51729) +LibOpAnyTest:testOpAnyEval1FalseInput() (gas: 51927) +LibOpAnyTest:testOpAnyEval1TrueInput() (gas: 51875) +LibOpAnyTest:testOpAnyEval2FalseInputs() (gas: 57221) +LibOpAnyTest:testOpAnyEval2MixedInputs() (gas: 57788) +LibOpAnyTest:testOpAnyEval2MixedInputs2() (gas: 57875) +LibOpAnyTest:testOpAnyEval2MixedInputsZeroExponent() (gas: 58893) +LibOpAnyTest:testOpAnyEval2TrueInputs() (gas: 57809) +LibOpAnyTest:testOpAnyEvalFail() (gas: 29758) LibOpAnyTest:testOpAnyIntegrityGas0() (gas: 3251) -LibOpAnyTest:testOpAnyIntegrityHappy(uint8,uint16) (runs: 2060, μ: 8291, ~: 8417) +LibOpAnyTest:testOpAnyIntegrityHappy(uint8,uint16) (runs: 2060, μ: 8295, ~: 8417) LibOpAnyTest:testOpAnyIntegrityUnhappyZeroInputs() (gas: 4059) -LibOpAnyTest:testOpAnyRun(bytes32[],uint16) (runs: 2052, μ: 21816, ~: 21797) +LibOpAnyTest:testOpAnyRun(bytes32[],uint16) (runs: 2052, μ: 21817, ~: 21797) LibOpAnyTest:testOpAnyRunGas0() (gas: 3345) -LibOpAnyTest:testOpAnyTwoOutputs() (gas: 35807) -LibOpAnyTest:testOpAnyZeroOutputs() (gas: 34777) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 207916) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57864) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58593) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstZeroSecondOne() (gas: 58595) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57909) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30647) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34967) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43465) -LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19708, ~: 19966) +LibOpAnyTest:testOpAnyTwoOutputs() (gas: 35813) +LibOpAnyTest:testOpAnyZeroOutputs() (gas: 34783) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 207942) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57870) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58599) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstZeroSecondOne() (gas: 58601) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57915) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30654) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34973) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43471) +LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19706, ~: 19972) LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2060, μ: 16674, ~: 16674) -LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41625) -LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40556) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 720283) +LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41631) +LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40562) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 720379) LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13757, ~: 13664) LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2060, μ: 16671, ~: 16671) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18225) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35781) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45550) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41354) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30803) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40328) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEval() (gas: 718989) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18166) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35722) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45448) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41272) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30700) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40269) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18232) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35787) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45556) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41360) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30810) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40334) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEval() (gas: 719085) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18173) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35728) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45454) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41278) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30707) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40275) LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13756, ~: 13663) LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2060, μ: 16628, ~: 16628) -LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2060, μ: 50998, ~: 50767) -LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 35194) -LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 31495) -LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 30486) -LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19661, ~: 19891) -LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2060, μ: 20848, ~: 21044) -LibOpCallTest:testCallTraceInnerOnly() (gas: 63024) -LibOpCallTest:testCallTraceOuterOnly() (gas: 45592) -LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2056, μ: 39733, ~: 38527) -LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2060, μ: 59332, ~: 58640) -LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2053, μ: 58482, ~: 59051) -LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 72599) -LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 65540) -LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 350739) -LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2060, μ: 47732, ~: 47732) -LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19686, ~: 19925) -LibOpChainIdTest:testOpChainIdEvalFail() (gas: 35042) +LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2060, μ: 50999, ~: 50774) +LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 35200) +LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 31502) +LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 30493) +LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19651, ~: 19910) +LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2060, μ: 20846, ~: 21044) +LibOpCallTest:testCallTraceInnerOnly() (gas: 63030) +LibOpCallTest:testCallTraceOuterOnly() (gas: 45598) +LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2058, μ: 39916, ~: 38789) +LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2060, μ: 59270, ~: 58514) +LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2053, μ: 59169, ~: 59546) +LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 72605) +LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 65546) +LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 350805) +LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2060, μ: 47065, ~: 47065) +LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19681, ~: 19925) +LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34374) LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2060, μ: 17123, ~: 17123) -LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 31846) -LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 30795) -LibOpConditionsTest:testOpConditionsEval1FalseInput1TrueInput() (gas: 70620) -LibOpConditionsTest:testOpConditionsEval1FalseInputRevert() (gas: 54971) -LibOpConditionsTest:testOpConditionsEval1TrueInput1FalseInput() (gas: 70506) -LibOpConditionsTest:testOpConditionsEval1TrueInputZeroOutput() (gas: 58738) -LibOpConditionsTest:testOpConditionsEval2MixedInputs() (gas: 58761) -LibOpConditionsTest:testOpConditionsEval2TrueInputs() (gas: 70571) -LibOpConditionsTest:testOpConditionsEvalErrorCode() (gas: 67690) -LibOpConditionsTest:testOpConditionsEvalFail0Inputs() (gas: 30387) -LibOpConditionsTest:testOpConditionsEvalFail1Inputs() (gas: 34676) -LibOpConditionsTest:testOpConditionsEvalUnhappyOperand() (gas: 18108) -LibOpConditionsTest:testOpConditionsIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 20244, ~: 20464) -LibOpConditionsTest:testOpConditionsRun(bytes32[],bytes32) (runs: 2052, μ: 19735, ~: 19850) +LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 31179) +LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 30128) +LibOpConditionsTest:testOpConditionsEval1FalseInput1TrueInput() (gas: 70626) +LibOpConditionsTest:testOpConditionsEval1FalseInputRevert() (gas: 54977) +LibOpConditionsTest:testOpConditionsEval1TrueInput1FalseInput() (gas: 70512) +LibOpConditionsTest:testOpConditionsEval1TrueInputZeroOutput() (gas: 58744) +LibOpConditionsTest:testOpConditionsEval2MixedInputs() (gas: 58767) +LibOpConditionsTest:testOpConditionsEval2TrueInputs() (gas: 70577) +LibOpConditionsTest:testOpConditionsEvalErrorCode() (gas: 67697) +LibOpConditionsTest:testOpConditionsEvalFail0Inputs() (gas: 30394) +LibOpConditionsTest:testOpConditionsEvalFail1Inputs() (gas: 34682) +LibOpConditionsTest:testOpConditionsEvalUnhappyOperand() (gas: 18115) +LibOpConditionsTest:testOpConditionsIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 20242, ~: 20469) +LibOpConditionsTest:testOpConditionsRun(bytes32[],bytes32) (runs: 2052, μ: 19736, ~: 19850) LibOpConditionsTest:testOpConditionsRunNoConditionsMet(bytes32[],string) (runs: 2056, μ: 29107, ~: 29334) -LibOpConditionsTest:testOpConditionsTwoOutputs() (gas: 39977) -LibOpConditionsTest:testOpConditionsZeroOutputs() (gas: 38927) -LibOpConstantTest:testOpConstantEvalNPE2E() (gas: 56107) -LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41541) -LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 19204, ~: 19095) -LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 40182, ~: 39809) -LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31680) -LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41620) -LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2060, μ: 52424, ~: 51854) -LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30296) -LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40248) -LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 112, μ: 6372575, ~: 5266326) -LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 112, μ: 6398026, ~: 5266507) -LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 112, μ: 6372719, ~: 5266470) -LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 112, μ: 6360032, ~: 5151992) -LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 112, μ: 74635, ~: 72777) -LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2060, μ: 48248, ~: 48248) +LibOpConditionsTest:testOpConditionsTwoOutputs() (gas: 39983) +LibOpConditionsTest:testOpConditionsZeroOutputs() (gas: 38933) +LibOpConstantTest:testOpConstantEvalNPE2E() (gas: 56113) +LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41547) +LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 19202, ~: 19095) +LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 40181, ~: 39809) +LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31686) +LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41626) +LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2060, μ: 52421, ~: 51854) +LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30302) +LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40254) +LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 112, μ: 6372582, ~: 5266333) +LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 112, μ: 6398033, ~: 5266514) +LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 112, μ: 6372726, ~: 5266477) +LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 112, μ: 6360039, ~: 5151999) +LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 112, μ: 74642, ~: 72784) +LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2060, μ: 48255, ~: 48255) LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 14508, ~: 14415) -LibOpContextNPTest:testOpContextNPOneInput() (gas: 41619) -LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 111, μ: 10008980, ~: 7240865) -LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 112, μ: 10351311, ~: 7923969) -LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 111, μ: 10361356, ~: 7780069) -LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46483) -LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37287) -LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36235) -LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2060, μ: 74366, ~: 85279) +LibOpContextNPTest:testOpContextNPOneInput() (gas: 41625) +LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 112, μ: 10005862, ~: 7383211) +LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 112, μ: 10351306, ~: 7923969) +LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 112, μ: 10360033, ~: 7924884) +LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46489) +LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37294) +LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36242) +LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2060, μ: 74400, ~: 85286) LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13755, ~: 13662) LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2060, μ: 16698, ~: 16698) -LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41166) -LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 37038) -LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31302) -LibOpCtPopNPTest:testOpCtPopNPZeroOutputs() (gas: 35987) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalHappy() (gas: 836064) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 46995) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42847) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37177) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41794) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2060, μ: 22145, ~: 22224) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2060, μ: 41519, ~: 41632) +LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41172) +LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 37044) +LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31309) +LibOpCtPopNPTest:testOpCtPopNPZeroOutputs() (gas: 35993) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalHappy() (gas: 836172) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 47001) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42853) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37184) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41800) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2060, μ: 22135, ~: 22287) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2060, μ: 41525, ~: 41547) LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2060, μ: 35715, ~: 35466) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2060, μ: 21011, ~: 20814) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2060, μ: 21010, ~: 20814) LibOpDivTest:testDebugOpDivRun() (gas: 13482) -LibOpDivTest:testOpDivEvalOneInput() (gas: 126431) -LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91627) -LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 337590) -LibOpDivTest:testOpDivEvalThreeInputsUnhappy() (gas: 212052) -LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 63042) -LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 295969) -LibOpDivTest:testOpDivEvalTwoInputsUnhappy() (gas: 143727) -LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 56438) -LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41248) -LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30200) -LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40244) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18260, ~: 18486) +LibOpDivTest:testOpDivEvalOneInput() (gas: 127185) +LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91669) +LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 337627) +LibOpDivTest:testOpDivEvalThreeInputsUnhappy() (gas: 212961) +LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 63914) +LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 296005) +LibOpDivTest:testOpDivEvalTwoInputsUnhappy() (gas: 144474) +LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 57330) +LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41254) +LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30207) +LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40250) +LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18259, ~: 18486) LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13830, ~: 13718) LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13853, ~: 13741) -LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2052, μ: 37772, ~: 33786) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55878) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2060, μ: 72173, ~: 72082) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37134) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18631) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43664) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50697) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31140) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49673) +LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2052, μ: 37154, ~: 33531) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55884) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2060, μ: 72179, ~: 72088) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37140) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18637) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43671) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50703) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31147) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49679) LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13719, ~: 13626) -LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2059, μ: 27674, ~: 27579) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2060, μ: 66093, ~: 66093) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37239) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18689) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2048, μ: 62362, ~: 62362) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49565) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44434) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31199) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43366) +LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2059, μ: 27665, ~: 27579) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2059, μ: 66100, ~: 66100) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37245) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18695) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2049, μ: 62369, ~: 62369) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49572) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44441) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31206) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43373) LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13698, ~: 13605) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2058, μ: 28009, ~: 28009) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2060, μ: 59262, ~: 59262) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18852) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2048, μ: 55498, ~: 55498) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43886) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38248) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 31382) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37220) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2055, μ: 28009, ~: 28009) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2060, μ: 59268, ~: 59268) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18858) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2048, μ: 55504, ~: 55504) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43893) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38254) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 31389) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37226) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13742, ~: 13649) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2057, μ: 27211, ~: 27211) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalHappy() (gas: 55284) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalOperandDisallowed() (gas: 18369) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoInputs() (gas: 43482) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoOutputs() (gas: 37686) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroInputs() (gas: 30976) -LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroOutputs() (gas: 36657) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalHappy() (gas: 55290) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalOperandDisallowed() (gas: 18376) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoInputs() (gas: 43489) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoOutputs() (gas: 37692) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroInputs() (gas: 30983) +LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroOutputs() (gas: 36663) LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13759, ~: 13666) LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2059, μ: 23615, ~: 23615) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2057, μ: 105359, ~: 105505) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19671, ~: 19911) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30843) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35133) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 44567) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21573) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35600) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2057, μ: 26008, ~: 26008) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45087) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41093) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31277) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 39911) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30726) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 35014) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44503) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18222) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2059, μ: 96386, ~: 92364) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35472) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44968) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31173) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39762) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2056, μ: 105364, ~: 105511) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19675, ~: 19911) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30850) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35139) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 44573) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21579) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35606) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2056, μ: 26008, ~: 26008) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45093) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41100) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31284) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 39917) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30733) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 35020) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44509) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18228) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2059, μ: 96653, ~: 92526) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35478) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44974) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31180) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39768) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2060, μ: 13772, ~: 13701) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2059, μ: 24201, ~: 24201) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40808) -LibOpETest:testOpEEval() (gas: 44615) -LibOpETest:testOpEEvalOneInput() (gas: 34280) -LibOpETest:testOpEEvalTwoOutputs() (gas: 30647) -LibOpETest:testOpEEvalZeroOutputs() (gas: 29596) -LibOpETest:testOpEIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19705, ~: 19968) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40814) +LibOpETest:testOpEEval() (gas: 44622) +LibOpETest:testOpEEvalOneInput() (gas: 34286) +LibOpETest:testOpEEvalTwoOutputs() (gas: 30654) +LibOpETest:testOpEEvalZeroOutputs() (gas: 29603) +LibOpETest:testOpEIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19705, ~: 19952) LibOpETest:testOpERun(uint16) (runs: 2060, μ: 16132, ~: 16132) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 833176) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42070) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 51817) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 47643) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37091) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 46639) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2060, μ: 18146, ~: 18144) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2060, μ: 41732, ~: 41757) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 833276) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42076) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 51823) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 47649) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37098) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 46645) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2060, μ: 18155, ~: 18148) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2060, μ: 41728, ~: 41757) LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2060, μ: 35844, ~: 35595) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2060, μ: 21399, ~: 21212) -LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34447) -LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33972) -LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 166094) -LibOpEnsureTest:testOpEnsureEvalOne() (gas: 34660) -LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45377) -LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 164823) -LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 17072) -LibOpEnsureTest:testOpEnsureEvalZero() (gas: 29656) -LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19726, ~: 19960) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2060, μ: 21404, ~: 21212) +LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34453) +LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33978) +LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 166113) +LibOpEnsureTest:testOpEnsureEvalOne() (gas: 34666) +LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45384) +LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 164844) +LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 17079) +LibOpEnsureTest:testOpEnsureEvalZero() (gas: 29663) +LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19729, ~: 19960) LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13821, ~: 13709) -LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39615) -LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2053, μ: 18056, ~: 18106) -LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 339427) -LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 57676) -LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 58362) -LibOpEqualToNPTest:testOpEqualToEval2InputsFirstZeroSecondOne() (gas: 58365) -LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 57699) -LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 30080) -LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 34391) -LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 42815) -LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19683, ~: 19915) -LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2060, μ: 17543, ~: 17466) -LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 41080) -LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 39989) -LibOpEveryTest:testOpEveryEval1FalseInput() (gas: 52714) -LibOpEveryTest:testOpEveryEval1TrueInput() (gas: 52994) -LibOpEveryTest:testOpEveryEval2FalseInputs() (gas: 57897) -LibOpEveryTest:testOpEveryEval2MixedInputs() (gas: 58688) -LibOpEveryTest:testOpEveryEval2MixedInputs2() (gas: 58627) -LibOpEveryTest:testOpEveryEval2TrueInputs() (gas: 58970) -LibOpEveryTest:testOpEveryEvalFail() (gas: 30560) -LibOpEveryTest:testOpEveryEvalZeroWithExponent() (gas: 59667) -LibOpEveryTest:testOpEveryIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19801, ~: 20033) +LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39621) +LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2053, μ: 18054, ~: 18106) +LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 339469) +LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 57682) +LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 58368) +LibOpEqualToNPTest:testOpEqualToEval2InputsFirstZeroSecondOne() (gas: 58371) +LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 57705) +LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 30087) +LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 34397) +LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 42821) +LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19683, ~: 19925) +LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2060, μ: 17544, ~: 17466) +LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 41086) +LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 39995) +LibOpEveryTest:testOpEveryEval1FalseInput() (gas: 52046) +LibOpEveryTest:testOpEveryEval1TrueInput() (gas: 52326) +LibOpEveryTest:testOpEveryEval2FalseInputs() (gas: 57229) +LibOpEveryTest:testOpEveryEval2MixedInputs() (gas: 58020) +LibOpEveryTest:testOpEveryEval2MixedInputs2() (gas: 57959) +LibOpEveryTest:testOpEveryEval2TrueInputs() (gas: 58302) +LibOpEveryTest:testOpEveryEvalFail() (gas: 29893) +LibOpEveryTest:testOpEveryEvalZeroWithExponent() (gas: 58999) +LibOpEveryTest:testOpEveryIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19807, ~: 20037) LibOpEveryTest:testOpEveryIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13869, ~: 13757) -LibOpEveryTest:testOpEveryRun(bytes32[]) (runs: 2052, μ: 20838, ~: 20873) -LibOpEveryTest:testOpEveryTwoOutputs() (gas: 36681) -LibOpEveryTest:testOpEveryZeroOutputs() (gas: 35652) -LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 99790) -LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115360) -LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2060, μ: 34959, ~: 34950) -LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2060, μ: 53455, ~: 53408) -LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2059, μ: 117901, ~: 117725) -LibOpFloorTest:testOpFloorEval() (gas: 254759) -LibOpFloorTest:testOpFloorEvalOperandDisallowed() (gas: 17720) +LibOpEveryTest:testOpEveryRun(bytes32[]) (runs: 2052, μ: 20835, ~: 20873) +LibOpEveryTest:testOpEveryTwoOutputs() (gas: 36013) +LibOpEveryTest:testOpEveryZeroOutputs() (gas: 34984) +LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 99797) +LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115367) +LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2059, μ: 34984, ~: 34960) +LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2059, μ: 53530, ~: 53720) +LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2059, μ: 117989, ~: 117926) +LibOpFloorTest:testOpFloorEval() (gas: 254795) +LibOpFloorTest:testOpFloorEvalOperandDisallowed() (gas: 17727) LibOpFloorTest:testOpFloorIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13756, ~: 13663) LibOpFloorTest:testOpFloorRun(bytes32,uint16) (runs: 2060, μ: 17155, ~: 17138) -LibOpFloorTest:testOpFloorTwoInputs() (gas: 40190) -LibOpFloorTest:testOpFloorTwoOutputs() (gas: 35998) -LibOpFloorTest:testOpFloorZeroInputs() (gas: 30328) -LibOpFloorTest:testOpFloorZeroOutputs() (gas: 34991) -LibOpFracTest:testOpFracEval() (gas: 337386) -LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 17638) +LibOpFloorTest:testOpFloorTwoInputs() (gas: 40196) +LibOpFloorTest:testOpFloorTwoOutputs() (gas: 36004) +LibOpFloorTest:testOpFloorZeroInputs() (gas: 30335) +LibOpFloorTest:testOpFloorZeroOutputs() (gas: 34997) +LibOpFracTest:testOpFracEval() (gas: 337434) +LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 17645) LibOpFracTest:testOpFracIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13798, ~: 13705) -LibOpFracTest:testOpFracRun(bytes32,uint16) (runs: 2060, μ: 17114, ~: 17096) -LibOpFracTest:testOpFracTwoInputs() (gas: 40077) -LibOpFracTest:testOpFracTwoOutputs() (gas: 35928) -LibOpFracTest:testOpFracZeroInputs() (gas: 30213) -LibOpFracTest:testOpFracZeroOutputs() (gas: 34876) -LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 308928) -LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57588) -LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 522891) -LibOpGetTest:testLibOpGetEvalStoreAndSetAndGet() (gas: 255678) -LibOpGetTest:testLibOpGetEvalStoreThenGet() (gas: 476382) -LibOpGetTest:testLibOpGetEvalThreeInputs() (gas: 45015) -LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39774) -LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 35366) -LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29789) -LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 34336) -LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 20566, ~: 20826) +LibOpFracTest:testOpFracRun(bytes32,uint16) (runs: 2060, μ: 17113, ~: 17096) +LibOpFracTest:testOpFracTwoInputs() (gas: 40083) +LibOpFracTest:testOpFracTwoOutputs() (gas: 35934) +LibOpFracTest:testOpFracZeroInputs() (gas: 30220) +LibOpFracTest:testOpFracZeroOutputs() (gas: 34882) +LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 308965) +LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57616) +LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 522940) +LibOpGetTest:testLibOpGetEvalStoreAndSetAndGet() (gas: 255698) +LibOpGetTest:testLibOpGetEvalStoreThenGet() (gas: 476432) +LibOpGetTest:testLibOpGetEvalThreeInputs() (gas: 45022) +LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39780) +LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 35372) +LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29796) +LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 34342) +LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 20570, ~: 20799) LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2060, μ: 19634, ~: 19638) -LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2060, μ: 47596, ~: 47610) +LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2060, μ: 47595, ~: 47610) LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2060, μ: 49831, ~: 49835) LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2060, μ: 51423, ~: 51427) LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2060, μ: 24664, ~: 24668) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsBothOne() (gas: 59054) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 59762) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 59762) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2ZeroInputs() (gas: 59097) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail0Inputs() (gas: 31397) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail1Input() (gas: 35825) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail3Inputs() (gas: 44174) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsBothOne() (gas: 59060) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 59769) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 59769) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2ZeroInputs() (gas: 59103) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail0Inputs() (gas: 31404) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail1Input() (gas: 35831) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail3Inputs() (gas: 44180) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2060, μ: 13751, ~: 13680) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToRun(bytes32,bytes32) (runs: 2060, μ: 17394, ~: 17323) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToTwoOutputs() (gas: 43018) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToZeroOutputs() (gas: 41793) -LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58610) -LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 61211) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57925) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 58656) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 58675) -LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 57946) -LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 30448) -LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34769) -LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43110) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58708) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61412) -LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19700, ~: 19942) -LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2060, μ: 17418, ~: 17347) -LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41867) -LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40819) -LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 46326) -LibOpHashNPTest:testOpHashNPEval1Input() (gas: 54936) -LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 63278) -LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 63951) -LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 78506) -LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19718, ~: 19965) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToTwoOutputs() (gas: 43025) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToZeroOutputs() (gas: 41799) +LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58616) +LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 61217) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57931) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 58662) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 58681) +LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 57952) +LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 30455) +LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34775) +LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43116) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58714) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61418) +LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19701, ~: 19951) +LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2060, μ: 17419, ~: 17347) +LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41873) +LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40825) +LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 46333) +LibOpHashNPTest:testOpHashNPEval1Input() (gas: 54942) +LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 63284) +LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 63958) +LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 78513) +LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19711, ~: 19975) LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2052, μ: 19458, ~: 19563) -LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30857) -LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29483) -LibOpIfTest:testOpIfEval3InputsFirstOneSecondTwoThirdThree() (gas: 63699) -LibOpIfTest:testOpIfEval3InputsFirstOneSecondZeroThirdThree() (gas: 63451) -LibOpIfTest:testOpIfEval3InputsFirstTwoSecondThreeThirdFour() (gas: 63655) -LibOpIfTest:testOpIfEval3InputsFirstTwoSecondZeroThirdFour() (gas: 63451) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdTwo() (gas: 63698) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdZero() (gas: 62898) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdOne() (gas: 62946) -LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdThree() (gas: 62949) -LibOpIfTest:testOpIfEvalEmptyStringTruthy() (gas: 163788) -LibOpIfTest:testOpIfEvalFail0Inputs() (gas: 29616) -LibOpIfTest:testOpIfEvalFail1Input() (gas: 33971) -LibOpIfTest:testOpIfEvalFail2Inputs() (gas: 38100) -LibOpIfTest:testOpIfEvalFail4Inputs() (gas: 46468) -LibOpIfTest:testOpIfEvalTwoOutputs() (gas: 45971) -LibOpIfTest:testOpIfEvalZeroExponent() (gas: 65003) -LibOpIfTest:testOpIfEvalZeroOutputs() (gas: 44902) -LibOpIfTest:testOpIfIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19678, ~: 19905) +LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30864) +LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29490) +LibOpIfTest:testOpIfEval3InputsFirstOneSecondTwoThirdThree() (gas: 63706) +LibOpIfTest:testOpIfEval3InputsFirstOneSecondZeroThirdThree() (gas: 63458) +LibOpIfTest:testOpIfEval3InputsFirstTwoSecondThreeThirdFour() (gas: 63662) +LibOpIfTest:testOpIfEval3InputsFirstTwoSecondZeroThirdFour() (gas: 63458) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdTwo() (gas: 63705) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondOneThirdZero() (gas: 62904) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdOne() (gas: 62952) +LibOpIfTest:testOpIfEval3InputsFirstZeroSecondZeroThirdThree() (gas: 62955) +LibOpIfTest:testOpIfEvalEmptyStringTruthy() (gas: 163809) +LibOpIfTest:testOpIfEvalFail0Inputs() (gas: 29623) +LibOpIfTest:testOpIfEvalFail1Input() (gas: 33977) +LibOpIfTest:testOpIfEvalFail2Inputs() (gas: 38106) +LibOpIfTest:testOpIfEvalFail4Inputs() (gas: 46474) +LibOpIfTest:testOpIfEvalTwoOutputs() (gas: 45977) +LibOpIfTest:testOpIfEvalZeroExponent() (gas: 65010) +LibOpIfTest:testOpIfEvalZeroOutputs() (gas: 44908) +LibOpIfTest:testOpIfIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19680, ~: 19872) LibOpIfTest:testOpIfRun(bytes32,bytes32,bytes32) (runs: 2060, μ: 17013, ~: 17014) -LibOpInvTest:testOpExpEvalOperandDisallowed() (gas: 17619) -LibOpInvTest:testOpInvEval() (gas: 176946) +LibOpInvTest:testOpExpEvalOperandDisallowed() (gas: 17626) +LibOpInvTest:testOpInvEval() (gas: 176970) LibOpInvTest:testOpInvIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13756, ~: 13663) LibOpInvTest:testOpInvRun(int224,int32,uint16) (runs: 2060, μ: 25068, ~: 25219) -LibOpInvTest:testOpInvTwoInputs() (gas: 40092) -LibOpInvTest:testOpInvTwoOutputs() (gas: 35878) -LibOpInvTest:testOpInvZeroInputs() (gas: 30208) -LibOpInvTest:testOpInvZeroOutputs() (gas: 34871) -LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 53374) -LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 52332) -LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 52069) -LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 29989) -LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 38548) -LibOpIsZeroTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19794, ~: 20088) +LibOpInvTest:testOpInvTwoInputs() (gas: 40098) +LibOpInvTest:testOpInvTwoOutputs() (gas: 35884) +LibOpInvTest:testOpInvZeroInputs() (gas: 30215) +LibOpInvTest:testOpInvZeroOutputs() (gas: 34877) +LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 54054) +LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 53012) +LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 52749) +LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 30670) +LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 39228) +LibOpIsZeroTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19785, ~: 20008) LibOpIsZeroTest:testOpIsZeroRun(bytes32) (runs: 2060, μ: 16420, ~: 16421) -LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 36383) -LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 35089) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsBothOne() (gas: 57236) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 57946) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 57967) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2ZeroInputs() (gas: 57260) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail0Inputs() (gas: 31132) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail1Input() (gas: 35488) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail3Inputs() (gas: 43951) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19685, ~: 19912) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToRun(bytes32,bytes32) (runs: 2060, μ: 17400, ~: 17329) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToTwoOutputs() (gas: 42618) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToZeroOutputs() (gas: 41571) -LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 58432) -LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57681) -LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19708, ~: 19956) -LibOpLessThanTest:testOpLessThanNP1_0Lt1() (gas: 58434) -LibOpLessThanTest:testOpLessThanNP1_1Lt1_2() (gas: 60924) -LibOpLessThanTest:testOpLessThanNPEval2InputsBothOne() (gas: 57705) -LibOpLessThanTest:testOpLessThanNPEval2InputsFirstOneSecondZero() (gas: 58389) -LibOpLessThanTest:testOpLessThanNPMinus1Lt0() (gas: 58487) -LibOpLessThanTest:testOpLessThanNPMinus1_1LtMinus1_2() (gas: 61148) -LibOpLessThanTest:testOpLessThanNPTwoOutputs() (gas: 41953) -LibOpLessThanTest:testOpLessThanNPZeroOutputs() (gas: 40068) -LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2060, μ: 17426, ~: 17353) -LibOpLessThanTest:testOpLessThanToNPEvalFail0Inputs() (gas: 30183) -LibOpLessThanTest:testOpLessThanToNPEvalFail1Input() (gas: 34473) -LibOpLessThanTest:testOpLessThanToNPEvalFail3Inputs() (gas: 42853) -LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 783798) -LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 51212) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 36039) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 18407) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoInputs() (gas: 41388) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 46904) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 30631) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 45855) +LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 37063) +LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 35769) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsBothOne() (gas: 57242) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 57952) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 57973) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2ZeroInputs() (gas: 57266) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail0Inputs() (gas: 31139) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail1Input() (gas: 35494) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail3Inputs() (gas: 43957) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19678, ~: 19931) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToRun(bytes32,bytes32) (runs: 2060, μ: 17402, ~: 17329) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToTwoOutputs() (gas: 42624) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToZeroOutputs() (gas: 41577) +LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 58438) +LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57687) +LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19710, ~: 19966) +LibOpLessThanTest:testOpLessThanNP1_0Lt1() (gas: 58440) +LibOpLessThanTest:testOpLessThanNP1_1Lt1_2() (gas: 60930) +LibOpLessThanTest:testOpLessThanNPEval2InputsBothOne() (gas: 57711) +LibOpLessThanTest:testOpLessThanNPEval2InputsFirstOneSecondZero() (gas: 58395) +LibOpLessThanTest:testOpLessThanNPMinus1Lt0() (gas: 58493) +LibOpLessThanTest:testOpLessThanNPMinus1_1LtMinus1_2() (gas: 61154) +LibOpLessThanTest:testOpLessThanNPTwoOutputs() (gas: 41959) +LibOpLessThanTest:testOpLessThanNPZeroOutputs() (gas: 40074) +LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2060, μ: 17424, ~: 17353) +LibOpLessThanTest:testOpLessThanToNPEvalFail0Inputs() (gas: 30190) +LibOpLessThanTest:testOpLessThanToNPEvalFail1Input() (gas: 34479) +LibOpLessThanTest:testOpLessThanToNPEvalFail3Inputs() (gas: 42859) +LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 783891) +LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 51218) +LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 36045) +LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 18414) +LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoInputs() (gas: 41394) +LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 46910) +LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 30638) +LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 45861) LibOpLinearGrowthTest:testOpLinearGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13755, ~: 13662) -LibOpLinearGrowthTest:testOpLinearGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2060, μ: 36141, ~: 36743) -LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 880826) -LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 2030637) -LibOpMaxTest:testOpMaxEvalOneInput() (gas: 129168) -LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 58985) -LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40763) -LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 30202) -LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18211, ~: 18380) +LibOpLinearGrowthTest:testOpLinearGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2060, μ: 36146, ~: 36756) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueEval() (gas: 47399) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueEvalFail() (gas: 35205) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueRun() (gas: 16187) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueTwoOutputs() (gas: 31969) +LibOpMaxNegativeValueTest:testOpMaxNegativeValueZeroOutputs() (gas: 30961) +LibOpMaxNegativeValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19670, ~: 19845) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueEvalFail() (gas: 35204) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueRun() (gas: 16196) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueTwoOutputs() (gas: 32034) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueZeroOutputs() (gas: 30938) +LibOpMaxPositiveValueTest:testOpMaxPositivepValueEval() (gas: 47441) +LibOpMaxPositiveValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19708, ~: 19928) +LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 885590) +LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 2038875) +LibOpMaxTest:testOpMaxEvalOneInput() (gas: 129922) +LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 59013) +LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40769) +LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 30209) +LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18215, ~: 18435) LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13831, ~: 13719) LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13853, ~: 13741) -LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2052, μ: 26599, ~: 26397) -LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 47321) -LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 35141) -LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19655, ~: 19903) +LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2052, μ: 26584, ~: 26441) +LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 47328) +LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 35147) +LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19664, ~: 19883) LibOpMaxUint256Test:testOpMaxUint256Run() (gas: 15997) -LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 31924) -LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 30829) -LibOpMaxValueTest:testOpMaxValueEval() (gas: 46707) -LibOpMaxValueTest:testOpMaxValueEvalFail() (gas: 34449) -LibOpMaxValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19658, ~: 19902) -LibOpMaxValueTest:testOpMaxValueRun() (gas: 16217) -LibOpMaxValueTest:testOpMaxValueTwoOutputs() (gas: 31298) -LibOpMaxValueTest:testOpMaxValueZeroOutputs() (gas: 30203) -LibOpMinTest:testOpMinEval2InputsHappy() (gas: 973677) -LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3461267) -LibOpMinTest:testOpMinEvalOneInput() (gas: 126332) -LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 59008) -LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30182) -LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18290, ~: 18477) +LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 31931) +LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 30836) +LibOpMinNegativeValueTest:testOpMinNegativeValueEval() (gas: 47419) +LibOpMinNegativeValueTest:testOpMinNegativeValueEvalFail() (gas: 35227) +LibOpMinNegativeValueTest:testOpMinNegativeValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19690, ~: 19945) +LibOpMinNegativeValueTest:testOpMinNegativeValueRun() (gas: 16218) +LibOpMinNegativeValueTest:testOpMinNegativeValueTwoOutputs() (gas: 31990) +LibOpMinNegativeValueTest:testOpMinNegativeValueZeroOutputs() (gas: 30960) +LibOpMinPositiveValueTest:testOpMinPositiveValueEvalFail() (gas: 35184) +LibOpMinPositiveValueTest:testOpMinPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19663, ~: 19888) +LibOpMinPositiveValueTest:testOpMinPositiveValueRun() (gas: 16218) +LibOpMinPositiveValueTest:testOpMinPositiveValueTwoOutputs() (gas: 31989) +LibOpMinPositiveValueTest:testOpMinPositiveValueZeroOutputs() (gas: 30959) +LibOpMinPositiveValueTest:testOpMinPositivepValueEval() (gas: 47398) +LibOpMinTest:testOpMinEval2InputsHappy() (gas: 978454) +LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3502561) +LibOpMinTest:testOpMinEvalOneInput() (gas: 127086) +LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 59036) +LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30189) +LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18288, ~: 18504) LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13854, ~: 13742) LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13831, ~: 13719) -LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2052, μ: 26539, ~: 26614) -LibOpMinValueTest:testOpMinValueEval() (gas: 46684) -LibOpMinValueTest:testOpMinValueEvalFail() (gas: 34515) -LibOpMinValueTest:testOpMinValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19679, ~: 19937) -LibOpMinValueTest:testOpMinValueRun() (gas: 16210) -LibOpMinValueTest:testOpMinValueTwoOutputs() (gas: 31275) -LibOpMinValueTest:testOpMinValueZeroOutputs() (gas: 30225) +LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2052, μ: 26530, ~: 26581) LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13832, ~: 13720) -LibOpMulTest:testOpMulEvalOneInput() (gas: 126366) -LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91649) -LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 744291) -LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 60841) -LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 523345) -LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 54393) -LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30245) -LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18246, ~: 18473) +LibOpMulTest:testOpMulEvalOneInput() (gas: 127120) +LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91691) +LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 745259) +LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 61734) +LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 524140) +LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 55128) +LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30252) +LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18250, ~: 18473) LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13875, ~: 13763) -LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2052, μ: 29013, ~: 26565) -LibOpMulTest:testOpMulTwoOutputs() (gas: 40784) -LibOpMulTest:testOpMulZeroOutputs() (gas: 39738) -LibOpPowTest:testOpPowEval() (gas: 541445) -LibOpPowTest:testOpPowEvalOneInput() (gas: 35370) -LibOpPowTest:testOpPowEvalOperandDisallowed() (gas: 17783) +LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2052, μ: 28971, ~: 26565) +LibOpMulTest:testOpMulTwoOutputs() (gas: 40790) +LibOpMulTest:testOpMulZeroOutputs() (gas: 39744) +LibOpPowTest:testOpPowEval() (gas: 541511) +LibOpPowTest:testOpPowEvalOneInput() (gas: 35376) +LibOpPowTest:testOpPowEvalOperandDisallowed() (gas: 17790) LibOpPowTest:testOpPowIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13776, ~: 13683) -LibOpPowTest:testOpPowNegativeBaseError() (gas: 100954) -LibOpPowTest:testOpPowRun(int224,int32,int224,int32) (runs: 2060, μ: 64999, ~: 68645) -LibOpPowTest:testOpPowThreeInputs() (gas: 45096) -LibOpPowTest:testOpPowTwoOutputs() (gas: 40900) -LibOpPowTest:testOpPowZeroOutputs() (gas: 39895) +LibOpPowTest:testOpPowNegativeBaseError() (gas: 100966) +LibOpPowTest:testOpPowRun(int224,int32,int224,int32) (runs: 2060, μ: 64967, ~: 68645) +LibOpPowTest:testOpPowThreeInputs() (gas: 45102) +LibOpPowTest:testOpPowTwoOutputs() (gas: 40906) +LibOpPowTest:testOpPowZeroOutputs() (gas: 39901) LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2060, μ: 17660, ~: 17665) -LibOpSetTest:testLibOpSetEvalOneInput() (gas: 34224) -LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39861) -LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 56103) -LibOpSetTest:testLibOpSetEvalSetTwice() (gas: 78290) -LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44656) -LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 258702) -LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40483) -LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 29404) -LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 20446, ~: 20686) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 879690) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128234) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44479) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40363) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34638) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39288) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2060, μ: 19775, ~: 19726) +LibOpSetTest:testLibOpSetEvalOneInput() (gas: 34230) +LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39867) +LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 56131) +LibOpSetTest:testLibOpSetEvalSetTwice() (gas: 78296) +LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44663) +LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 258732) +LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40489) +LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 29411) +LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 20453, ~: 20686) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 879810) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128259) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44485) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40369) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34645) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39294) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2059, μ: 19775, ~: 19760) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2060, μ: 35810, ~: 35560) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 42007, ~: 42587) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2060, μ: 16833, ~: 16833) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1054773) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 128823) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 112, μ: 19747, ~: 19089) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 42003, ~: 42519) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2059, μ: 16833, ~: 16833) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1054917) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 128847) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 112, μ: 19804, ~: 19207) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 112, μ: 37172, ~: 37164) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 112, μ: 40981, ~: 41177) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2059, μ: 16836, ~: 16836) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44603) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40423) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34697) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39372) -LibOpStackNPTest:testOpStackEval() (gas: 66030) -LibOpStackNPTest:testOpStackEvalSeveral() (gas: 90562) -LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2060, μ: 18891, ~: 18656) -LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2060, μ: 41403, ~: 41563) -LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 40041) -LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 43027) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 112, μ: 40978, ~: 41177) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2060, μ: 16836, ~: 16836) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44609) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40429) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34704) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39378) +LibOpStackNPTest:testOpStackEval() (gas: 66036) +LibOpStackNPTest:testOpStackEvalSeveral() (gas: 90569) +LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2060, μ: 18888, ~: 18657) +LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2060, μ: 41410, ~: 41563) +LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 40047) +LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 43033) LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 112, μ: 2022596, ~: 1852966) -LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 38586) -LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41537) -LibOpSubTest:testOpSubEvalOneInput() (gas: 128989) -LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226322) -LibOpSubTest:testOpSubEvalTwoInputs() (gas: 342580) -LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30163) -LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18250, ~: 18399) +LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 38592) +LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41543) +LibOpSubTest:testOpSubEvalOneInput() (gas: 129743) +LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226346) +LibOpSubTest:testOpSubEvalTwoInputs() (gas: 343351) +LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30170) +LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18256, ~: 18476) LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13831, ~: 13719) LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13832, ~: 13720) -LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2052, μ: 55773, ~: 55073) -LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 65879) -LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 58796) -LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 56671) -LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2060, μ: 85072, ~: 84745) -LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19682, ~: 19939) -LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2060, μ: 20594, ~: 20364) -LibOpUint256AddTest:testOpUint256AddEvalOneInput() (gas: 128399) -LibOpUint256AddTest:testOpUint256AddEvalOperandsDisallowed() (gas: 95537) -LibOpUint256AddTest:testOpUint256AddEvalThreeInputsHappy() (gas: 209853) -LibOpUint256AddTest:testOpUint256AddEvalThreeInputsUnhappy() (gas: 114866) -LibOpUint256AddTest:testOpUint256AddEvalTwoInputsHappy() (gas: 280341) -LibOpUint256AddTest:testOpUint256AddEvalTwoOutputs() (gas: 41454) -LibOpUint256AddTest:testOpUint256AddEvalZeroInputs() (gas: 30871) -LibOpUint256AddTest:testOpUint256AddEvalZeroOutputs() (gas: 40385) -LibOpUint256AddTest:testOpUint256AddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18255, ~: 18471) +LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2052, μ: 55776, ~: 54793) +LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 65891) +LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 58810) +LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 56685) +LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2060, μ: 85083, ~: 84759) +LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19671, ~: 19901) +LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2060, μ: 20590, ~: 20364) +LibOpUint256AddTest:testOpUint256AddEvalOneInput() (gas: 128423) +LibOpUint256AddTest:testOpUint256AddEvalOperandsDisallowed() (gas: 95579) +LibOpUint256AddTest:testOpUint256AddEvalThreeInputsHappy() (gas: 209878) +LibOpUint256AddTest:testOpUint256AddEvalThreeInputsUnhappy() (gas: 114879) +LibOpUint256AddTest:testOpUint256AddEvalTwoInputsHappy() (gas: 280377) +LibOpUint256AddTest:testOpUint256AddEvalTwoOutputs() (gas: 41460) +LibOpUint256AddTest:testOpUint256AddEvalZeroInputs() (gas: 30878) +LibOpUint256AddTest:testOpUint256AddEvalZeroOutputs() (gas: 40391) +LibOpUint256AddTest:testOpUint256AddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18249, ~: 18445) LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13833, ~: 13721) LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13831, ~: 13719) -LibOpUint256AddTest:testOpUint256AddRun(bytes32[]) (runs: 2052, μ: 19970, ~: 19486) -LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 771428) -LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 143659) -LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1407835) -LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 479833) -LibOpUint256DivTest:testOpUint256DivEvalOneInput() (gas: 133095) -LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 61556) -LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 41455) -LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 30872) -LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 40363) -LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18273, ~: 18470) +LibOpUint256AddTest:testOpUint256AddRun(bytes32[]) (runs: 2052, μ: 19965, ~: 19486) +LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 771530) +LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 143677) +LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1408015) +LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 482943) +LibOpUint256DivTest:testOpUint256DivEvalOneInput() (gas: 133999) +LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 61584) +LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 41461) +LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 30879) +LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 40369) +LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18272, ~: 18467) LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13853, ~: 13741) LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13833, ~: 13721) LibOpUint256DivTest:testOpUint256DivRun(bytes32[]) (runs: 2052, μ: 24849, ~: 25168) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56680) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2060, μ: 70319, ~: 70319) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37973) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19279) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 44312) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51345) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31766) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50321) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56687) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2060, μ: 70325, ~: 70325) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37979) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19285) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 44319) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51351) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31773) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50327) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13779, ~: 13686) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2059, μ: 24718, ~: 24718) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2060, μ: 63378, ~: 63378) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 38012) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19337) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50213) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 45082) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31869) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 44037) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2060, μ: 63385, ~: 63385) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 38018) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19343) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50220) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 45089) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31876) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 44044) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13802, ~: 13709) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2059, μ: 24168, ~: 24168) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2060, μ: 56480, ~: 56480) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19500) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 44534) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38908) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 32052) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37835) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2060, μ: 56486, ~: 56486) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19506) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 44541) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38914) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 32059) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37841) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2060, μ: 13802, ~: 13709) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2059, μ: 23332, ~: 23332) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2059, μ: 104723, ~: 104895) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19690, ~: 19905) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 31491) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35875) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 45215) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 22211) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 36405) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2059, μ: 24211, ~: 24211) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45735) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41731) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31925) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 40706) -LibOpUint256MulTest:testOpUint256MulEvalOneInput() (gas: 128487) -LibOpUint256MulTest:testOpUint256MulEvalOperandsDisallowed() (gas: 95517) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsHappy() (gas: 1015153) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsUnhappy() (gas: 640867) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsHappy() (gas: 417124) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 143792) -LibOpUint256MulTest:testOpUint256MulEvalTwoOutputs() (gas: 41399) -LibOpUint256MulTest:testOpUint256MulEvalZeroInputs() (gas: 30925) -LibOpUint256MulTest:testOpUint256MulEvalZeroOutputs() (gas: 40398) -LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18207, ~: 18402) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2058, μ: 104732, ~: 104901) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2060, μ: 19686, ~: 19905) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 31498) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35881) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 45221) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 22217) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 36411) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2058, μ: 24211, ~: 24211) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45741) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41738) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31932) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 40713) +LibOpUint256MulTest:testOpUint256MulEvalOneInput() (gas: 128511) +LibOpUint256MulTest:testOpUint256MulEvalOperandsDisallowed() (gas: 95559) +LibOpUint256MulTest:testOpUint256MulEvalThreeInputsHappy() (gas: 1015276) +LibOpUint256MulTest:testOpUint256MulEvalThreeInputsUnhappy() (gas: 642388) +LibOpUint256MulTest:testOpUint256MulEvalTwoInputsHappy() (gas: 417178) +LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 143810) +LibOpUint256MulTest:testOpUint256MulEvalTwoOutputs() (gas: 41405) +LibOpUint256MulTest:testOpUint256MulEvalZeroInputs() (gas: 30932) +LibOpUint256MulTest:testOpUint256MulEvalZeroOutputs() (gas: 40404) +LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18211, ~: 18429) LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13875, ~: 13763) LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13832, ~: 13720) -LibOpUint256MulTest:testOpUint256MulRun(bytes32[]) (runs: 2052, μ: 18854, ~: 18918) -LibOpUint256PowTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18225, ~: 18456) -LibOpUint256PowTest:testOpUint256PowEval2InputsHappy() (gas: 872348) -LibOpUint256PowTest:testOpUint256PowEval2InputsUnhappy() (gas: 145772) -LibOpUint256PowTest:testOpUint256PowEval3InputsHappy() (gas: 1980325) -LibOpUint256PowTest:testOpUint256PowEval3InputsUnhappy() (gas: 633721) -LibOpUint256PowTest:testOpUint256PowEvalOneInput() (gas: 132408) -LibOpUint256PowTest:testOpUint256PowEvalOperandDisallowed() (gas: 62248) -LibOpUint256PowTest:testOpUint256PowEvalTwoOutputs() (gas: 41584) -LibOpUint256PowTest:testOpUint256PowEvalZeroInputs() (gas: 31064) -LibOpUint256PowTest:testOpUint256PowEvalZeroOutputs() (gas: 40516) +LibOpUint256MulTest:testOpUint256MulRun(bytes32[]) (runs: 2052, μ: 18820, ~: 19078) +LibOpUint256PowTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18227, ~: 18417) +LibOpUint256PowTest:testOpUint256PowEval2InputsHappy() (gas: 872462) +LibOpUint256PowTest:testOpUint256PowEval2InputsUnhappy() (gas: 145790) +LibOpUint256PowTest:testOpUint256PowEval3InputsHappy() (gas: 1980577) +LibOpUint256PowTest:testOpUint256PowEval3InputsUnhappy() (gas: 633799) +LibOpUint256PowTest:testOpUint256PowEvalOneInput() (gas: 133312) +LibOpUint256PowTest:testOpUint256PowEvalOperandDisallowed() (gas: 62276) +LibOpUint256PowTest:testOpUint256PowEvalTwoOutputs() (gas: 41590) +LibOpUint256PowTest:testOpUint256PowEvalZeroInputs() (gas: 31071) +LibOpUint256PowTest:testOpUint256PowEvalZeroOutputs() (gas: 40522) LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13855, ~: 13743) LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13832, ~: 13720) -LibOpUint256PowTest:testOpUint256PowRun(bytes32[]) (runs: 2052, μ: 19362, ~: 19304) -LibOpUint256SubTest:testOpUint256SubEvalOneInput() (gas: 128486) -LibOpUint256SubTest:testOpUint256SubEvalOperandsDisallowed() (gas: 95539) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsHappy() (gas: 209728) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsUnhappy() (gas: 115039) -LibOpUint256SubTest:testOpUint256SubEvalTwoInputsHappy() (gas: 280339) -LibOpUint256SubTest:testOpUint256SubEvalTwoOutputs() (gas: 41443) -LibOpUint256SubTest:testOpUint256SubEvalZeroInputs() (gas: 30882) -LibOpUint256SubTest:testOpUint256SubEvalZeroOutputs() (gas: 40375) -LibOpUint256SubTest:testOpUint256SubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18251, ~: 18476) +LibOpUint256PowTest:testOpUint256PowRun(bytes32[]) (runs: 2052, μ: 19372, ~: 19304) +LibOpUint256SubTest:testOpUint256SubEvalOneInput() (gas: 131206) +LibOpUint256SubTest:testOpUint256SubEvalOperandsDisallowed() (gas: 99625) +LibOpUint256SubTest:testOpUint256SubEvalThreeInputsHappy() (gas: 212449) +LibOpUint256SubTest:testOpUint256SubEvalThreeInputsUnhappy() (gas: 116400) +LibOpUint256SubTest:testOpUint256SubEvalTwoInputsHappy() (gas: 284419) +LibOpUint256SubTest:testOpUint256SubEvalTwoOutputs() (gas: 42123) +LibOpUint256SubTest:testOpUint256SubEvalZeroInputs() (gas: 31563) +LibOpUint256SubTest:testOpUint256SubEvalZeroOutputs() (gas: 41055) +LibOpUint256SubTest:testOpUint256SubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2060, μ: 18248, ~: 18443) LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13876, ~: 13764) LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2060, μ: 13832, ~: 13720) -LibOpUint256SubTest:testOpUint256SubRun(bytes32[]) (runs: 2052, μ: 17634, ~: 17687) +LibOpUint256SubTest:testOpUint256SubRun(bytes32[]) (runs: 2052, μ: 17633, ~: 17687) LibParseCommentsTest:testParseCommentAfterSources() (gas: 69689) LibParseCommentsTest:testParseCommentBetweenSources() (gas: 69745) LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 46231) @@ -995,29 +1007,29 @@ LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 50722) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 56990) LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2060, μ: 13232, ~: 13163) LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2060, μ: 11434, ~: 11167) -RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 8562701) -RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 8574949) -RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2060, μ: 8570142, ~: 8570142) +RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 8595346) +RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 8607770) +RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2060, μ: 8602787, ~: 8602787) RainterpreterExpressionDeployerMetaTest:testRainterpreterExpressionDeployerExpectedConstructionMetaHash() (gas: 6221) -RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2060, μ: 3368466, ~: 3368466) -RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2060, μ: 3522138, ~: 3522138) -RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17593065) -RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10607571) -RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10610863) -RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3521144) -RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3528598) -RainterpreterParserPointersTest:testParserParseMeta() (gas: 4545860) -RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 3374909) -RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 2160763) -RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 2160349) -RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 2159046) +RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2060, μ: 3391514, ~: 3391514) +RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2060, μ: 3527746, ~: 3527746) +RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17621116) +RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10624405) +RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10627697) +RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3526752) +RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3534430) +RainterpreterParserPointersTest:testParserParseMeta() (gas: 4690394) +RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 3398169) +RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 2160770) +RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 2160356) +RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 2159052) RainterpreterReferenceExternDescribedByMetaV1:testRainterpreterReferenceExternDescribedByMetaV1Happy() (gas: 2081641) RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2060, μ: 2093899, ~: 2093899) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2184505) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2178069) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2184511) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2178076) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 112, μ: 3597, ~: 3597) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 112, μ: 768111, ~: 770064) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 112, μ: 2095525, ~: 2095759) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 112, μ: 768290, ~: 770064) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 112, μ: 2095517, ~: 2095759) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 101, μ: 2091861, ~: 2091662) RainterpreterReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 2081736) RainterpreterReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 2081779) @@ -1025,11 +1037,11 @@ RainterpreterReferenceExternPointersTest:testSubParserFunctionPointers() (gas: 2 RainterpreterReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 2081756) RainterpreterReferenceExternPointersTest:testSubParserOperandParsers() (gas: 2082229) RainterpreterReferenceExternPointersTest:testSubParserParseMeta() (gas: 22017) -RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2213032) -RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2060, μ: 2168207, ~: 2168296) -RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 2129384) -RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 52392) -RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 83131) +RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2213046) +RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2060, μ: 2168226, ~: 2168303) +RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 2129390) +RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 52398) +RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 83137) RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2060, μ: 229923, ~: 229923) RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 105, μ: 1602851, ~: 1605247) RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 112, μ: 3403233, ~: 3312550) diff --git a/lib/rain.interpreter.interface b/lib/rain.interpreter.interface index 16288d1b0..335d5165a 160000 --- a/lib/rain.interpreter.interface +++ b/lib/rain.interpreter.interface @@ -1 +1 @@ -Subproject commit 16288d1b0e98c9e088963dbcb0b6b89e2e06fbfa +Subproject commit 335d5165a20f62158c210bfca5e08335a6b6c22a diff --git a/src/generated/Rainterpreter.pointers.sol b/src/generated/Rainterpreter.pointers.sol index dc649db8e..66e4ebf17 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(0xdd238e0260bb1f2da6c93cc8c68e5f35a2ac83feac46242e5310ae80bf9f37e2); +bytes32 constant BYTECODE_HASH = bytes32(0x3067cd3ea6ed3bd416a94f05994e24197fbea237f58ebb54c31c455c02c9c578); /// @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"08240856087a0a060acf0ae10af30b0c0b300b640b750b860c280c470d050db50e390f7b10ae0d0511a7125912fb137313841395139513a61411151c159b15b415c8162716401659169216bd16d616ef17161729178b17d91827187518c318d1191f196d199e19ac19ba19c81a161a471a951ac61b141b411b8f1c85"; + hex"0831086308870a130adc0aee0b000b190b3d0b710b820b930c350c540d120dc20e460f8810bb0d1211b4126613081380139113a213a213b3141e152915a815c115d51634164d1666169f16ca16e316fc17231736179817e61834188218d018de192c197a19ab19b919c719d51a231a541a851ad31b041b351b831bb01bfe1cf4"; diff --git a/src/generated/RainterpreterExpressionDeployer.pointers.sol b/src/generated/RainterpreterExpressionDeployer.pointers.sol index 4b59d5e69..2de4954e0 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(0xedc85dfac63f4681b2d5ffb348c7796f7a3fdbe6de22aab8244b0bade2783426); +bytes32 constant BYTECODE_HASH = bytes32(0xe31030f8cd9295c31787bc462f4a710eb6ffd3b3acc358eb126ef96540cd56b4); /// @dev The hash of the meta that describes the contract. -bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x71a0d06f6c91b15436b0558882e812cfeabb78c20dc1490287a2a0d59541ef4b); +bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xd80b1ab409ece8a0cc8b7cf98b80d67805b2cfdafeeee1797fdb999edd8ba1dd); /// @dev The function pointers for the integrity check fns. bytes constant INTEGRITY_FUNCTION_POINTERS = - hex"0ea80f260f8a1104110e110e11181121113c11e211e2123e12b612c3110e111812c3110e1118110e110e110e1118110411041104110412cd12f2130c110e110e12cd110e110e12c31118110e110e12c3110413161316131613161316111813161330110411181118111813161104131611041330110e13301118130c"; + hex"0eb80f360f9a1114111e111e11281131114c11f211f2124e12c612d3111e112812d3111e1128111e111e111e1128111411141114111412dd1302131c111e111e12dd111e111e12d31128111e111e12d311141326132613261326132611281326134011141128112811281326111411141326111411141340111e13401128131c"; diff --git a/src/generated/RainterpreterParser.pointers.sol b/src/generated/RainterpreterParser.pointers.sol index 9b07377c7..ba3bab281 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(0xf5b705e7eaebf246c1a369b2dfc297bd3023ddedb809a4733e0966f3398e4332); +bytes32 constant BYTECODE_HASH = bytes32(0x81b9d86cfe33dbfd1bfc4f9fcbe240b785ffac59ee86533e175590c227f8538d); /// @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(0xf5b705e7eaebf246c1a369b2dfc297bd3023d /// 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"027d32482901a416101c2a01b8024080020111206043108201222060060071004a8800000000000000000800200000000000000000000000000000000000000000000034ee31ff1e4c42622cd999cd146aa9391a378a701bca041513bfc04d2dd959ad31ac0034053824512b8fb9fe39530a92378e9cbd1096c4d004ea67600a2aa235194d56371c05a7650cd5a68e233f227012f1ac932480073416d4a5b3159bd3ec068483ae35f6dc5d27f0c0a632a6feff219677b933db58d401d4fa88030cae020885d59f368413023067b4531d4070aa1fc9b66f2540ab0f2a5a53d8115fb3680ff7e328293977d317686f5c3abd3f5f024641b928630c0709f14a300b1ec71b2fa3832322792a603b5d96b73d7b8cf22653f8d13c33bccc0d403ded0791b7eb002ddffc0e1abd702ece1fe238f61a8018beccb0204507bb"; + hex"02192ac782060c081806c6c1900010012220200283045069400114680901208401260000000000000000000000000000000000000000001000000000000000000000202c49b09d200441910d1e98a7329c08461fd6ea18118eba9713065d3029ab10ec04ac72c00e7ff5a23fae0c8706fb9c253ec7bc2333acb2941b0b5fc712fec72836e7c86c18d295ed35d9a6c50063d58d34dd44c9261df07b3acb6609012ba09831d9776c0c6cbb422f6d6b2403ae6396082c4e962787daec2841d78a16172ab51a5b8f1d1c2d57c43cca85c615f871180f48502f25b9d38d0be7f2e71ef1ff4d19d140c23d1a1e3510abcc6405b702d7020f038b2a93067d220df2ef07ee624a214143471482e75b1d60aa350a3d21ff174c80cb30cc4a6a3b023c042ba9578e370cdb6909a046dc39d89c342ed4e3cf233bc325389b388724b25e682d7b09ff"; /// @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"1a8d1a8d1a8d1b621c791c791c791b621b621a8d1a8d1a8d1c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791c791a8d1c791c79"; + hex"1a9d1a9d1a9d1b721c891c891c891b721b721a9d1a9d1a9d1c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891c891a9d1c891c89"; /// @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"15d51807184a18e8"; +bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"15e51817185a18f8"; diff --git a/src/lib/op/LibAllStandardOps.sol b/src/lib/op/LibAllStandardOps.sol index cc92051fd..4e1f7d236 100644 --- a/src/lib/op/LibAllStandardOps.sol +++ b/src/lib/op/LibAllStandardOps.sol @@ -86,9 +86,11 @@ import {LibOpInv} from "./math/LibOpInv.sol"; // import {LibOpLn} from "./math/LibOpLn.sol"; // import {LibOpLog10} from "./math/LibOpLog10.sol"; import {LibOpMax} from "./math/LibOpMax.sol"; -import {LibOpMaxValue} from "./math/LibOpMaxValue.sol"; +import {LibOpMaxNegativeValue} from "./math/LibOpMaxNegativeValue.sol"; +import {LibOpMaxPositiveValue} from "./math/LibOpMaxPositiveValue.sol"; import {LibOpMin} from "./math/LibOpMin.sol"; -import {LibOpMinValue} from "./math/LibOpMinValue.sol"; +import {LibOpMinNegativeValue} from "./math/LibOpMinNegativeValue.sol"; +import {LibOpMinPositiveValue} from "./math/LibOpMinPositiveValue.sol"; import {LibOpMod} from "./math/LibOpMod.sol"; // import {LibOpLog2} from "./math/LibOpLog2.sol"; import {LibOpPow} from "./math/LibOpPow.sol"; @@ -110,7 +112,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 = 62; +uint256 constant ALL_STANDARD_OPS_LENGTH = 64; /// @title LibAllStandardOps /// @notice Every opcode available from the core repository laid out as a single @@ -286,14 +288,22 @@ library LibAllStandardOps { // AuthoringMetaV2("log10", "Base 10 logarithm log10(x). Errors if the number is zero."), AuthoringMetaV2("max", "Finds the maximum number from all inputs."), AuthoringMetaV2( - "max-value", + "max-negative-value", + "The maximum representable float value that is negative. This is the largest number that can be represented that is still less than zero." + ), + AuthoringMetaV2( + "max-positive-value", "The maximum representable float value. This is so large that it is effectively infinity. Almost all numbers that you could possibly subtract from it will be ignored as a rounding error." ), AuthoringMetaV2("min", "Finds the minimum number from all inputs."), AuthoringMetaV2( - "min-value", + "min-negative-value", "The minimum representable float value. This is so small that it is effectively negative infinity. Almost all numbers that you could possibly add to it will be ignored as a rounding error." ), + AuthoringMetaV2( + "min-positive-value", + "The minimum positive representable float value. This is the smallest number that can be represented that is still greater than zero." + ), // AuthoringMetaV2("mod", "Modulos the first number by all other numbers. Errors if any divisor is zero."), AuthoringMetaV2("mul", "Multiplies all numbers together."), AuthoringMetaV2("power", "Raises the first number to the power of the second number."), @@ -484,11 +494,15 @@ library LibAllStandardOps { // LibParseOperand.handleOperandDisallowed, // max LibParseOperand.handleOperandDisallowed, - // max-value + // max-negative-value + LibParseOperand.handleOperandDisallowed, + // max-positive-value LibParseOperand.handleOperandDisallowed, // min LibParseOperand.handleOperandDisallowed, - // min-value + // min-negative-value + LibParseOperand.handleOperandDisallowed, + // min-positive-value LibParseOperand.handleOperandDisallowed, // // mod // LibParseOperand.handleOperandDisallowed, @@ -601,9 +615,11 @@ library LibAllStandardOps { // LibOpLog2.integrity, // LibOpLog10.integrity, LibOpMax.integrity, - LibOpMaxValue.integrity, + LibOpMaxNegativeValue.integrity, + LibOpMaxPositiveValue.integrity, LibOpMin.integrity, - LibOpMinValue.integrity, + LibOpMinNegativeValue.integrity, + LibOpMinPositiveValue.integrity, // LibOpMod.integrity, LibOpMul.integrity, LibOpPow.integrity, @@ -710,9 +726,11 @@ library LibAllStandardOps { // LibOpLog2.run, // LibOpLog10.run, LibOpMax.run, - LibOpMaxValue.run, + LibOpMaxNegativeValue.run, + LibOpMaxPositiveValue.run, LibOpMin.run, - LibOpMinValue.run, + LibOpMinNegativeValue.run, + LibOpMinPositiveValue.run, // LibOpMod.run, LibOpMul.run, LibOpPow.run, diff --git a/src/lib/op/math/LibOpMaxNegativeValue.sol b/src/lib/op/math/LibOpMaxNegativeValue.sol new file mode 100644 index 000000000..59b88ad82 --- /dev/null +++ b/src/lib/op/math/LibOpMaxNegativeValue.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: CAL +pragma solidity ^0.8.18; + +import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; +import {OperandV2, StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {InterpreterState} from "../../state/LibInterpreterState.sol"; +import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; + +/// @title LibOpMaxNegativeValue +/// Exposes the maximum negative representable float value as a Rainlang opcode. +library LibOpMaxNegativeValue { + using LibDecimalFloat for Float; + + function integrity(IntegrityCheckState memory, OperandV2) internal pure returns (uint256, uint256) { + return (0, 1); + } + + function run(InterpreterState memory, OperandV2, Pointer stackTop) internal pure returns (Pointer) { + Float value = LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE; + assembly ("memory-safe") { + stackTop := sub(stackTop, 0x20) + mstore(stackTop, value) + } + return stackTop; + } + + function referenceFn(InterpreterState memory, OperandV2, StackItem[] memory) + internal + pure + returns (StackItem[] memory) + { + StackItem[] memory outputs = new StackItem[](1); + outputs[0] = StackItem.wrap(Float.unwrap(LibDecimalFloat.packLossless(-1, type(int32).min))); + return outputs; + } +} diff --git a/src/lib/op/math/LibOpMaxValue.sol b/src/lib/op/math/LibOpMaxPositiveValue.sol similarity index 91% rename from src/lib/op/math/LibOpMaxValue.sol rename to src/lib/op/math/LibOpMaxPositiveValue.sol index 8b23c9f31..a3ac91e8b 100644 --- a/src/lib/op/math/LibOpMaxValue.sol +++ b/src/lib/op/math/LibOpMaxPositiveValue.sol @@ -7,9 +7,9 @@ import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {Pointer} from "rain.solmem/lib/LibPointer.sol"; import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -/// @title LibOpMaxValue +/// @title LibOpMaxPositiveValue /// Exposes the maximum representable float value as a Rainlang opcode. -library LibOpMaxValue { +library LibOpMaxPositiveValue { using LibDecimalFloat for Float; function integrity(IntegrityCheckState memory, OperandV2) internal pure returns (uint256, uint256) { @@ -17,7 +17,7 @@ library LibOpMaxValue { } function run(InterpreterState memory, OperandV2, Pointer stackTop) internal pure returns (Pointer) { - Float value = LibDecimalFloat.FLOAT_MAX_VALUE; + Float value = LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE; assembly ("memory-safe") { stackTop := sub(stackTop, 0x20) mstore(stackTop, value) diff --git a/src/lib/op/math/LibOpMinValue.sol b/src/lib/op/math/LibOpMinNegativeValue.sol similarity index 95% rename from src/lib/op/math/LibOpMinValue.sol rename to src/lib/op/math/LibOpMinNegativeValue.sol index 383053b02..9a7bf144c 100644 --- a/src/lib/op/math/LibOpMinValue.sol +++ b/src/lib/op/math/LibOpMinNegativeValue.sol @@ -7,9 +7,9 @@ import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {Pointer} from "rain.solmem/lib/LibPointer.sol"; import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -/// @title LibOpMinValue +/// @title LibOpMinNegativeValue /// Exposes the minimum representable float value as a Rainlang opcode. -library LibOpMinValue { +library LibOpMinNegativeValue { using LibDecimalFloat for Float; function integrity(IntegrityCheckState memory, OperandV2) internal pure returns (uint256, uint256) { diff --git a/src/lib/op/math/LibOpMinPositiveValue.sol b/src/lib/op/math/LibOpMinPositiveValue.sol new file mode 100644 index 000000000..6353b0b37 --- /dev/null +++ b/src/lib/op/math/LibOpMinPositiveValue.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: CAL +pragma solidity ^0.8.18; + +import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; +import {OperandV2, StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {InterpreterState} from "../../state/LibInterpreterState.sol"; +import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; + +/// @title LibOpMinPositiveValue +/// Exposes the minimum positive representable float value as a Rainlang opcode. +library LibOpMinPositiveValue { + using LibDecimalFloat for Float; + + function integrity(IntegrityCheckState memory, OperandV2) internal pure returns (uint256, uint256) { + return (0, 1); + } + + function run(InterpreterState memory, OperandV2, Pointer stackTop) internal pure returns (Pointer) { + Float value = LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE; + assembly ("memory-safe") { + stackTop := sub(stackTop, 0x20) + mstore(stackTop, value) + } + return stackTop; + } + + function referenceFn(InterpreterState memory, OperandV2, StackItem[] memory) + internal + pure + returns (StackItem[] memory) + { + StackItem[] memory outputs = new StackItem[](1); + outputs[0] = StackItem.wrap(Float.unwrap(LibDecimalFloat.packLossless(1, type(int32).min))); + return outputs; + } +} diff --git a/test/src/lib/op/math/LibOpAdd.t.sol b/test/src/lib/op/math/LibOpAdd.t.sol index b4543500d..359fed394 100644 --- a/test/src/lib/op/math/LibOpAdd.t.sol +++ b/test/src/lib/op/math/LibOpAdd.t.sol @@ -122,25 +122,25 @@ contract LibOpAddTest is OpTest { } /// Test the eval of `add` opcode parsed from a string. Tests two inputs. - /// Tests that adding 0 to max-value() is max-value(). + /// Tests that adding 0 to max-positive-value() is max-positive-value(). function testOpAddEval2InputsHappyZeroMax() external view { checkHappy( - "_: add(0 max-value());", + "_: add(0 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "0 + max-value()" + "0 + max-positive-value()" ); checkHappy( - "_: add(max-value() 0);", + "_: add(max-positive-value() 0);", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "max-value() + 0" + "max-positive-value() + 0" ); } /// Test the eval of `add` opcode parsed from a string. Tests two inputs. /// Tests the unhappy path where the addition does overflow. function testOpAddEval2InputsUnhappy() external { - checkUnhappyOverflow("_: add(max-value() 1e-18);", 13479973333575319897333507543509815336, 2147483677); - checkUnhappyOverflow("_: add(1e-18 max-value());", 13479973333575319897333507543509815336, 2147483677); + checkUnhappyOverflow("_: add(max-positive-value() 1e-18);", 13479973333575319897333507543509815336, 2147483677); + checkUnhappyOverflow("_: add(1e-18 max-positive-value());", 13479973333575319897333507543509815336, 2147483677); } /// Test the eval of `add` opcode parsed from a string. Tests three inputs. @@ -156,27 +156,53 @@ contract LibOpAddTest is OpTest { /// Test the eval of `add` opcode parsed from a string. Tests three inputs. /// Tests the unhappy path where the addition does overflow. function testOpAddEval3InputsUnhappy() external { - checkUnhappyOverflow("_: add(max-value() 1e-18 1e-18);", 13479973333575319897333507543509815336, 2147483677); - checkUnhappyOverflow("_: add(1e-18 max-value() 1e-18);", 13479973333575319897333507543509815336, 2147483677); - checkUnhappyOverflow("_: add(1e-18 1e-18 max-value());", 13479973333575319897333507543509815336, 2147483677); checkUnhappyOverflow( - "_: add(max-value() max-value() 1e-18);", 26959946667150639794667015087019630672, 2147483677 + "_: add(max-positive-value() 1e-18 1e-18);", 13479973333575319897333507543509815336, 2147483677 ); checkUnhappyOverflow( - "_: add(max-value() 1e-18 max-value());", 13479973333575319897333507543509815336, 2147483677 + "_: add(1e-18 max-positive-value() 1e-18);", 13479973333575319897333507543509815336, 2147483677 ); checkUnhappyOverflow( - "_: add(1e-18 max-value() max-value());", 13479973333575319897333507543509815336, 2147483677 + "_: add(1e-18 1e-18 max-positive-value());", 13479973333575319897333507543509815336, 2147483677 ); checkUnhappyOverflow( - "_: add(max-value() max-value() max-value());", 26959946667150639794667015087019630672, 2147483677 + "_: add(max-positive-value() max-positive-value() 1e-18);", + 26959946667150639794667015087019630672, + 2147483677 + ); + checkUnhappyOverflow( + "_: add(max-positive-value() 1e-18 max-positive-value());", + 13479973333575319897333507543509815336, + 2147483677 + ); + checkUnhappyOverflow( + "_: add(1e-18 max-positive-value() max-positive-value());", + 13479973333575319897333507543509815336, + 2147483677 + ); + checkUnhappyOverflow( + "_: add(max-positive-value() max-positive-value() max-positive-value());", + 26959946667150639794667015087019630672, + 2147483677 + ); + checkUnhappyOverflow( + "_: add(max-positive-value() 1e-18 0);", 13479973333575319897333507543509815336, 2147483677 + ); + checkUnhappyOverflow( + "_: add(1e-18 max-positive-value() 0);", 13479973333575319897333507543509815336, 2147483677 + ); + checkUnhappyOverflow( + "_: add(1e-18 0 max-positive-value());", 13479973333575319897333507543509815336, 2147483677 + ); + checkUnhappyOverflow( + "_: add(max-positive-value() max-positive-value() 0);", 26959946667150639794667015087019630672, 2147483677 + ); + checkUnhappyOverflow( + "_: add(max-positive-value() 0 max-positive-value());", 26959946667150639794667015087019630672, 2147483677 + ); + checkUnhappyOverflow( + "_: add(0 max-positive-value() max-positive-value());", 26959946667150639794667015087019630672, 2147483677 ); - checkUnhappyOverflow("_: add(max-value() 1e-18 0);", 13479973333575319897333507543509815336, 2147483677); - checkUnhappyOverflow("_: add(1e-18 max-value() 0);", 13479973333575319897333507543509815336, 2147483677); - checkUnhappyOverflow("_: add(1e-18 0 max-value());", 13479973333575319897333507543509815336, 2147483677); - checkUnhappyOverflow("_: add(max-value() max-value() 0);", 26959946667150639794667015087019630672, 2147483677); - checkUnhappyOverflow("_: add(max-value() 0 max-value());", 26959946667150639794667015087019630672, 2147483677); - checkUnhappyOverflow("_: add(0 max-value() max-value());", 26959946667150639794667015087019630672, 2147483677); } /// Test the eval of `add` opcode parsed from a string. diff --git a/test/src/lib/op/math/LibOpDiv.t.sol b/test/src/lib/op/math/LibOpDiv.t.sol index 620e3af9f..3914a8d55 100644 --- a/test/src/lib/op/math/LibOpDiv.t.sol +++ b/test/src/lib/op/math/LibOpDiv.t.sol @@ -105,7 +105,7 @@ contract LibOpDivTest is OpTest { checkBadInputs("_: div(5);", 1, 2, 1); checkBadInputs("_: div(0);", 1, 2, 1); checkBadInputs("_: div(1);", 1, 2, 1); - checkBadInputs("_: div(max-value());", 1, 2, 1); + checkBadInputs("_: div(max-positive-value());", 1, 2, 1); } /// Test the eval of `div` opcode parsed from a string. @@ -119,7 +119,7 @@ contract LibOpDivTest is OpTest { checkHappy("_: div(2 2);", Float.unwrap(LibDecimalFloat.packLossless(1e38, -38)), "2 2"); checkHappy("_: div(2 0.1);", Float.unwrap(LibDecimalFloat.packLossless(2e38, -37)), "2 0.1"); // https://github.com/rainlanguage/rain.math.float/issues/71 - // checkHappy("_: div(max-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 1)), "max-value() 1"); + // checkHappy("_: div(max-positive-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 1)), "max-positive-value() 1"); } /// Test the eval of `div` opcode parsed from a string. @@ -128,14 +128,14 @@ contract LibOpDivTest is OpTest { function testOpDivEvalTwoInputsUnhappy() external { checkUnhappy("_: div(0 0);", stdError.divisionError); checkUnhappy("_: div(1 0);", stdError.divisionError); - checkUnhappy("_: div(max-value() 0);", stdError.divisionError); + checkUnhappy("_: div(max-positive-value() 0);", stdError.divisionError); } /// Test the eval of `div` opcode parsed from a string. /// Tests two inputs. /// Tests the unhappy path where the final result overflows. function testOpDivEvalTwoInputsUnhappyOverflow() external { - checkUnhappyOverflow("_: div(max-value() 1e-18);", 134799733335753198973335075435098153360, 2147483694); + checkUnhappyOverflow("_: div(max-positive-value() 1e-18);", 134799733335753198973335075435098153360, 2147483694); // checkUnhappy("_: div(1e52 1e-8);", abi.encodeWithSelector(PRBMath_MulDiv_Overflow.selector, 1e70, 1e18, 1e10)); } @@ -150,7 +150,7 @@ contract LibOpDivTest is OpTest { checkHappy("_: div(1 2 2);", Float.unwrap(LibDecimalFloat.packLossless(25e37, -39)), "1 2 2"); checkHappy("_: div(1 2 0.1);", Float.unwrap(LibDecimalFloat.packLossless(5e38, -38)), "1 2 0.1"); // https://github.com/rainlanguage/rain.math.float/issues/71 - // checkHappy("_: div(max-value() 1 1);", type(uint256).max, "max-value() 1 1"); + // checkHappy("_: div(max-positive-value() 1 1);", type(uint256).max, "max-positive-value() 1 1"); } /// Test the eval of `div` opcode parsed from a string. @@ -160,14 +160,16 @@ contract LibOpDivTest is OpTest { checkUnhappy("_: div(0 0 0);", stdError.divisionError); checkUnhappy("_: div(1 0 0);", stdError.divisionError); checkUnhappy("_: div(1 1 0);", stdError.divisionError); - checkUnhappy("_: div(max-value() 0 0);", stdError.divisionError); + checkUnhappy("_: div(max-positive-value() 0 0);", stdError.divisionError); } /// Test the eval of `div` opcode parsed from a string. /// Tests three inputs. /// Tests the unhappy path where the final result overflows. function testOpDivEvalThreeInputsUnhappyOverflow() external { - checkUnhappyOverflow("_: div(max-value() 1e-18 1e-18);", 134799733335753198973335075435098153360, 2147483694); + checkUnhappyOverflow( + "_: div(max-positive-value() 1e-18 1e-18);", 134799733335753198973335075435098153360, 2147483694 + ); // checkUnhappyOverflow("_: div(1e900000000 1 1e-900000000);", 1, -8000000000000000000000000000); // checkUnhappy("_: div(1e52 1e-8 1);", abi.encodeWithSelector(PRBMath_MulDiv_Overflow.selector, 1e70, 1e18, 1e10)); } diff --git a/test/src/lib/op/math/LibOpMax.t.sol b/test/src/lib/op/math/LibOpMax.t.sol index af9882a76..486415856 100644 --- a/test/src/lib/op/math/LibOpMax.t.sol +++ b/test/src/lib/op/math/LibOpMax.t.sol @@ -62,7 +62,7 @@ contract LibOpMaxTest is OpTest { checkBadInputs("_: max(5e-18);", 1, 2, 1); checkBadInputs("_: max(0);", 1, 2, 1); checkBadInputs("_: max(1e-18);", 1, 2, 1); - checkBadInputs("_: max(max-value());", 1, 2, 1); + checkBadInputs("_: max(max-positive-value());", 1, 2, 1); } function testOpMaxEvalTwoOutputs() external { @@ -74,31 +74,31 @@ contract LibOpMaxTest is OpTest { checkHappy("_: max(0 0);", 0, "0 > 0 ? 0 : 1"); checkHappy("_: max(1 0);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 > 0 ? 1 : 0"); checkHappy( - "_: max(max-value() 0);", + "_: max(max-positive-value() 0);", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "max-value() > 0 ? max-value() : 0" + "max-positive-value() > 0 ? max-positive-value() : 0" ); checkHappy("_: max(0 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "0 > 1 ? 0 : 1"); checkHappy("_: max(1 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 > 1 ? 1 : 1"); checkHappy( - "_: max(0 max-value());", + "_: max(0 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "0 > max-value() ? 0 : max-value()" + "0 > max-positive-value() ? 0 : max-positive-value()" ); checkHappy( - "_: max(1 max-value());", + "_: max(1 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "1 > max-value() ? 1 : max-value()" + "1 > max-positive-value() ? 1 : max-positive-value()" ); checkHappy( - "_: max(max-value() 1);", + "_: max(max-positive-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "1 > max-value() ? 1 : max-value()" + "1 > max-positive-value() ? 1 : max-positive-value()" ); checkHappy( - "_: max(max-value() max-value());", + "_: max(max-positive-value() max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "max-value() > max-value() ? max-value() : max-value()" + "max-positive-value() > max-positive-value() ? max-positive-value() : max-positive-value()" ); checkHappy("_: max(0 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "0 > 2 ? 0 : 2"); checkHappy("_: max(1 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "1 > 2 ? 1 : 2"); @@ -142,49 +142,49 @@ contract LibOpMaxTest is OpTest { checkHappy("_: max(1 2 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "1 2 2"); checkHappy("_: max(2 2 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "2 2 2"); checkHappy( - "_: max(0 0 max-value());", + "_: max(0 0 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "0 0 max-value()" + "0 0 max-positive-value()" ); checkHappy( - "_: max(1 0 max-value());", + "_: max(1 0 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "1 0 max-value()" + "1 0 max-positive-value()" ); checkHappy( - "_: max(2 0 max-value());", + "_: max(2 0 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "2 0 max-value()" + "2 0 max-positive-value()" ); checkHappy( - "_: max(0 1 max-value());", + "_: max(0 1 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "0 1 max-value()" + "0 1 max-positive-value()" ); checkHappy( - "_: max(1 1 max-value());", + "_: max(1 1 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "1 1 max-value()" + "1 1 max-positive-value()" ); checkHappy( - "_: max(2 1 max-value());", + "_: max(2 1 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "2 1 max-value()" + "2 1 max-positive-value()" ); checkHappy( - "_: max(0 2 max-value());", + "_: max(0 2 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "0 2 max-value()" + "0 2 max-positive-value()" ); checkHappy( - "_: max(1 2 max-value());", + "_: max(1 2 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "1 2 max-value()" + "1 2 max-positive-value()" ); checkHappy( - "_: max(2 2 max-value());", + "_: max(2 2 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "2 2 max-value()" + "2 2 max-positive-value()" ); checkHappy("_: max(-1.1 -1.0 0);", Float.unwrap(LibDecimalFloat.packLossless(0, 0)), "-1.1 -1.0 0"); checkHappy("_: max(-1.0 -1 0);", Float.unwrap(LibDecimalFloat.packLossless(0, 0)), "-1.0 -1 0"); diff --git a/test/src/lib/op/math/LibOpMaxValue.t.sol b/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol similarity index 54% rename from test/src/lib/op/math/LibOpMaxValue.t.sol rename to test/src/lib/op/math/LibOpMaxNegativeValue.t.sol index ff4bf80d1..c5d9327f3 100644 --- a/test/src/lib/op/math/LibOpMaxValue.t.sol +++ b/test/src/lib/op/math/LibOpMaxNegativeValue.t.sol @@ -2,7 +2,7 @@ pragma solidity =0.8.25; import {OpTest} from "test/abstract/OpTest.sol"; -import {LibOpMaxValue} from "src/lib/op/math/LibOpMaxValue.sol"; +import {LibOpMaxNegativeValue} from "src/lib/op/math/LibOpMaxNegativeValue.sol"; import {IntegrityCheckState, BadOpInputsLength} from "src/lib/integrity/LibIntegrityCheck.sol"; import { IInterpreterV4, @@ -18,13 +18,13 @@ import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreter import {LibOperand} from "test/lib/operand/LibOperand.sol"; import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -/// @title LibOpMaxValueTest -/// @notice Test the runtime and integrity time logic of LibOpMaxValue. -contract LibOpMaxValueTest is OpTest { +/// @title LibOpMaxNegativeValueTest +/// @notice Test the runtime and integrity time logic of LibOpMaxNegativeValue. +contract LibOpMaxNegativeValueTest is OpTest { using LibInterpreterState for InterpreterState; using LibDecimalFloat for Float; - /// Directly test the integrity logic of LibOpMaxValue. + /// Directly test the integrity logic of LibOpMaxNegativeValue. function testOpMaxValueIntegrity(IntegrityCheckState memory state, uint8 inputs, uint8 outputs, uint16 operandData) external pure @@ -32,38 +32,45 @@ contract LibOpMaxValueTest is OpTest { inputs = uint8(bound(inputs, 0, 0x0F)); outputs = uint8(bound(outputs, 0, 0x0F)); (uint256 calcInputs, uint256 calcOutputs) = - LibOpMaxValue.integrity(state, LibOperand.build(inputs, outputs, operandData)); + LibOpMaxNegativeValue.integrity(state, LibOperand.build(inputs, outputs, operandData)); assertEq(calcInputs, 0); assertEq(calcOutputs, 1); } - /// Directly test the runtime logic of LibOpMaxValue. This tests that the - /// opcode correctly pushes the max value onto the stack. - function testOpMaxValueRun() external view { + /// Directly test the runtime logic of LibOpMaxNegativeValue. This tests that + /// the opcode correctly pushes the max value onto the stack. + function testOpMaxNegativeValueRun() external view { InterpreterState memory state = opTestDefaultInterpreterState(); StackItem[] memory inputs = new StackItem[](0); OperandV2 operand = LibOperand.build(0, 1, 0); - opReferenceCheck(state, operand, LibOpMaxValue.referenceFn, LibOpMaxValue.integrity, LibOpMaxValue.run, inputs); + opReferenceCheck( + state, + operand, + LibOpMaxNegativeValue.referenceFn, + LibOpMaxNegativeValue.integrity, + LibOpMaxNegativeValue.run, + inputs + ); } - /// Test the eval of LibOpMaxValue parsed from a string. - function testOpMaxValueEval() external view { - checkHappy("_: max-value();", Float.unwrap(LibDecimalFloat.FLOAT_MAX_VALUE), ""); + /// Test the eval of LibOpMaxNegativeValue parsed from a string. + function testOpMaxNegativeValueEval() external view { + checkHappy("_: max-negative-value();", Float.unwrap(LibDecimalFloat.FLOAT_MAX_NEGATIVE_VALUE), ""); } - /// Test that a max-value with inputs fails integrity check. - function testOpMaxValueEvalFail() public { + /// Test that a max-negative-value with inputs fails integrity check. + function testOpMaxNegativeValueEvalFail() public { vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 1, 0, 1)); - bytes memory bytecode = iDeployer.parse2("_: max-value(0x00);"); + bytes memory bytecode = iDeployer.parse2("_: max-negative-value(0x00);"); (bytecode); } - function testOpMaxValueZeroOutputs() external { - checkBadOutputs(": max-value();", 0, 1, 0); + function testOpMaxNegativeValueZeroOutputs() external { + checkBadOutputs(": max-negative-value();", 0, 1, 0); } - function testOpMaxValueTwoOutputs() external { - checkBadOutputs("_ _: max-value();", 0, 1, 2); + function testOpMaxNegativeValueTwoOutputs() external { + checkBadOutputs("_ _: max-negative-value();", 0, 1, 2); } } diff --git a/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol b/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol new file mode 100644 index 000000000..a1d4f9969 --- /dev/null +++ b/test/src/lib/op/math/LibOpMaxPositiveValue.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: CAL +pragma solidity =0.8.25; + +import {OpTest} from "test/abstract/OpTest.sol"; +import {LibOpMaxPositiveValue} from "src/lib/op/math/LibOpMaxPositiveValue.sol"; +import {IntegrityCheckState, BadOpInputsLength} from "src/lib/integrity/LibIntegrityCheck.sol"; +import { + IInterpreterV4, + OperandV2, + SourceIndexV2, + FullyQualifiedNamespace, + StackItem +} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {InterpreterState, LibInterpreterState} from "src/lib/state/LibInterpreterState.sol"; +import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {IInterpreterStoreV2} from "rain.interpreter.interface/interface/IInterpreterStoreV2.sol"; +import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV3.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; + +/// @title LibOpMaxPositiveValueTest +/// @notice Test the runtime and integrity time logic of LibOpMaxPositiveValue. +contract LibOpMaxPositiveValueTest is OpTest { + using LibInterpreterState for InterpreterState; + using LibDecimalFloat for Float; + + /// Directly test the integrity logic of LibOpMaxPositiveValue. + function testOpMaxPositiveValueIntegrity( + IntegrityCheckState memory state, + uint8 inputs, + uint8 outputs, + uint16 operandData + ) external pure { + inputs = uint8(bound(inputs, 0, 0x0F)); + outputs = uint8(bound(outputs, 0, 0x0F)); + (uint256 calcInputs, uint256 calcOutputs) = + LibOpMaxPositiveValue.integrity(state, LibOperand.build(inputs, outputs, operandData)); + + assertEq(calcInputs, 0); + assertEq(calcOutputs, 1); + } + + /// Directly test the runtime logic of LibOpMaxPositiveValue. This tests that + /// the opcode correctly pushes the max value onto the stack. + function testOpMaxPositiveValueRun() external view { + InterpreterState memory state = opTestDefaultInterpreterState(); + StackItem[] memory inputs = new StackItem[](0); + OperandV2 operand = LibOperand.build(0, 1, 0); + opReferenceCheck( + state, + operand, + LibOpMaxPositiveValue.referenceFn, + LibOpMaxPositiveValue.integrity, + LibOpMaxPositiveValue.run, + inputs + ); + } + + /// Test the eval of LibOpMaxPositiveValue parsed from a string. + function testOpMaxPositiveValueEval() external view { + checkHappy("_: max-positive-value();", Float.unwrap(LibDecimalFloat.FLOAT_MAX_POSITIVE_VALUE), ""); + } + + /// Test that a max-positive-value with inputs fails integrity check. + function testOpMaxPositiveValueEvalFail() public { + vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 1, 0, 1)); + bytes memory bytecode = iDeployer.parse2("_: max-positive-value(0x00);"); + (bytecode); + } + + function testOpMaxPositiveValueZeroOutputs() external { + checkBadOutputs(": max-positive-value();", 0, 1, 0); + } + + function testOpMaxPositiveValueTwoOutputs() external { + checkBadOutputs("_ _: max-positive-value();", 0, 1, 2); + } +} diff --git a/test/src/lib/op/math/LibOpMin.t.sol b/test/src/lib/op/math/LibOpMin.t.sol index 2cb468b5a..4ea0b3768 100644 --- a/test/src/lib/op/math/LibOpMin.t.sol +++ b/test/src/lib/op/math/LibOpMin.t.sol @@ -59,31 +59,31 @@ contract LibOpMinTest is OpTest { checkBadInputs("_: min(5);", 1, 2, 1); checkBadInputs("_: min(0);", 1, 2, 1); checkBadInputs("_: min(1);", 1, 2, 1); - checkBadInputs("_: min(max-value());", 1, 2, 1); + checkBadInputs("_: min(max-positive-value());", 1, 2, 1); } /// Test the eval of `min` opcode parsed from a string. Tests two inputs. function testOpMinEval2InputsHappy() external view { checkHappy("_: min(0 0);", 0, "0 > 0 ? 0 : 1"); checkHappy("_: min(1 0);", 0, "1 > 0 ? 1 : 0"); - checkHappy("_: min(max-value() 0);", 0, "max-value() > 0 ? max-value() : 0"); + checkHappy("_: min(max-positive-value() 0);", 0, "max-positive-value() > 0 ? max-positive-value() : 0"); checkHappy("_: min(0 1);", 0, "0 > 1 ? 0 : 1"); checkHappy("_: min(1 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 > 1 ? 1 : 1"); - checkHappy("_: min(0 max-value());", 0, "0 > max-value() ? 0 : max-value()"); + checkHappy("_: min(0 max-positive-value());", 0, "0 > max-positive-value() ? 0 : max-positive-value()"); checkHappy( - "_: min(1 max-value());", + "_: min(1 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), - "1 > max-value() ? 1 : max-value()" + "1 > max-positive-value() ? 1 : max-positive-value()" ); checkHappy( - "_: min(max-value() 1);", + "_: min(max-positive-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), - "1 > max-value() ? 1 : max-value()" + "1 > max-positive-value() ? 1 : max-positive-value()" ); checkHappy( - "_: min(max-value() max-value());", + "_: min(max-positive-value() max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "max-value() > max-value() ? max-value() : max-value()" + "max-positive-value() > max-positive-value() ? max-positive-value() : max-positive-value()" ); checkHappy("_: min(0 2);", 0, "0 > 2 ? 0 : 2"); checkHappy("_: min(1 2);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 > 2 ? 1 : 2"); @@ -130,70 +130,124 @@ contract LibOpMinTest is OpTest { checkHappy("_: min(0 2 2);", 0, "0 2 2"); checkHappy("_: min(1 2 2);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 2 2"); checkHappy("_: min(2 2 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "2 2 2"); - checkHappy("_: min(0 0 max-value());", 0, "0 0 max-value()"); - checkHappy("_: min(1 0 max-value());", 0, "1 0 max-value()"); - checkHappy("_: min(2 0 max-value());", 0, "2 0 max-value()"); - checkHappy("_: min(0 1 max-value());", 0, "0 1 max-value()"); - checkHappy("_: min(1 1 max-value());", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 1 max-value()"); - checkHappy("_: min(2 1 max-value());", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "2 1 max-value()"); - checkHappy("_: min(0 2 max-value());", 0, "0 2 max-value()"); - checkHappy("_: min(1 2 max-value());", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 2 max-value()"); - checkHappy("_: min(2 2 max-value());", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "2 2 max-value()"); - checkHappy("_: min(0 max-value() 0);", 0, "0 max-value() 0"); - checkHappy("_: min(1 max-value() 0);", 0, "1 max-value() 0"); - checkHappy("_: min(2 max-value() 0);", 0, "2 max-value() 0"); - checkHappy("_: min(0 max-value() 1);", 0, "0 max-value() 1"); - checkHappy("_: min(1 max-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 max-value() 1"); - checkHappy("_: min(2 max-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "2 max-value() 1"); - checkHappy("_: min(0 max-value() 2);", 0, "0 max-value() 2"); - checkHappy("_: min(1 max-value() 2);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "1 max-value() 2"); - checkHappy("_: min(2 max-value() 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "2 max-value() 2"); - checkHappy("_: min(0 max-value() max-value());", 0, "0 max-value() max-value()"); - checkHappy( - "_: min(1 max-value() max-value());", + checkHappy("_: min(0 0 max-positive-value());", 0, "0 0 max-positive-value()"); + checkHappy("_: min(1 0 max-positive-value());", 0, "1 0 max-positive-value()"); + checkHappy("_: min(2 0 max-positive-value());", 0, "2 0 max-positive-value()"); + checkHappy("_: min(0 1 max-positive-value());", 0, "0 1 max-positive-value()"); + checkHappy( + "_: min(1 1 max-positive-value());", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "1 1 max-positive-value()" + ); + checkHappy( + "_: min(2 1 max-positive-value());", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "2 1 max-positive-value()" + ); + checkHappy("_: min(0 2 max-positive-value());", 0, "0 2 max-positive-value()"); + checkHappy( + "_: min(1 2 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), - "1 max-value() max-value()" + "1 2 max-positive-value()" ); checkHappy( - "_: min(2 max-value() max-value());", + "_: min(2 2 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), - "2 max-value() max-value()" - ); - checkHappy("_: min(max-value() 0 0);", 0, "max-value() 0 0"); - checkHappy("_: min(max-value() 1 0);", 0, "max-value() 1 0"); - checkHappy("_: min(max-value() 2 0);", 0, "max-value() 2 0"); - checkHappy("_: min(max-value() 0 1);", 0, "max-value() 0 1"); - checkHappy("_: min(max-value() 1 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "max-value() 1 1"); - checkHappy("_: min(max-value() 2 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "max-value() 2 1"); - checkHappy("_: min(max-value() 0 2);", 0, "max-value() 0 2"); - checkHappy("_: min(max-value() 1 2);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "max-value() 1 2"); - checkHappy("_: min(max-value() 2 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), "max-value() 2 2"); - checkHappy("_: min(max-value() 0 max-value());", 0, "max-value() 0 max-value()"); - checkHappy( - "_: min(max-value() 1 max-value());", + "2 2 max-positive-value()" + ); + checkHappy("_: min(0 max-positive-value() 0);", 0, "0 max-positive-value() 0"); + checkHappy("_: min(1 max-positive-value() 0);", 0, "1 max-positive-value() 0"); + checkHappy("_: min(2 max-positive-value() 0);", 0, "2 max-positive-value() 0"); + checkHappy("_: min(0 max-positive-value() 1);", 0, "0 max-positive-value() 1"); + checkHappy( + "_: min(1 max-positive-value() 1);", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "1 max-positive-value() 1" + ); + checkHappy( + "_: min(2 max-positive-value() 1);", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "2 max-positive-value() 1" + ); + checkHappy("_: min(0 max-positive-value() 2);", 0, "0 max-positive-value() 2"); + checkHappy( + "_: min(1 max-positive-value() 2);", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "1 max-positive-value() 2" + ); + checkHappy( + "_: min(2 max-positive-value() 2);", + Float.unwrap(LibDecimalFloat.packLossless(2, 0)), + "2 max-positive-value() 2" + ); + checkHappy( + "_: min(0 max-positive-value() max-positive-value());", 0, "0 max-positive-value() max-positive-value()" + ); + checkHappy( + "_: min(1 max-positive-value() max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), - "max-value() 1 max-value()" + "1 max-positive-value() max-positive-value()" ); checkHappy( - "_: min(max-value() 2 max-value());", + "_: min(2 max-positive-value() max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), - "max-value() 2 max-value()" + "2 max-positive-value() max-positive-value()" + ); + checkHappy("_: min(max-positive-value() 0 0);", 0, "max-positive-value() 0 0"); + checkHappy("_: min(max-positive-value() 1 0);", 0, "max-positive-value() 1 0"); + checkHappy("_: min(max-positive-value() 2 0);", 0, "max-positive-value() 2 0"); + checkHappy("_: min(max-positive-value() 0 1);", 0, "max-positive-value() 0 1"); + checkHappy( + "_: min(max-positive-value() 1 1);", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "max-positive-value() 1 1" + ); + checkHappy( + "_: min(max-positive-value() 2 1);", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "max-positive-value() 2 1" + ); + checkHappy("_: min(max-positive-value() 0 2);", 0, "max-positive-value() 0 2"); + checkHappy( + "_: min(max-positive-value() 1 2);", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "max-positive-value() 1 2" + ); + checkHappy( + "_: min(max-positive-value() 2 2);", + Float.unwrap(LibDecimalFloat.packLossless(2, 0)), + "max-positive-value() 2 2" + ); + checkHappy( + "_: min(max-positive-value() 0 max-positive-value());", 0, "max-positive-value() 0 max-positive-value()" + ); + checkHappy( + "_: min(max-positive-value() 1 max-positive-value());", + Float.unwrap(LibDecimalFloat.packLossless(1, 0)), + "max-positive-value() 1 max-positive-value()" + ); + checkHappy( + "_: min(max-positive-value() 2 max-positive-value());", + Float.unwrap(LibDecimalFloat.packLossless(2, 0)), + "max-positive-value() 2 max-positive-value()" + ); + checkHappy( + "_: min(max-positive-value() max-positive-value() 0);", 0, "max-positive-value() max-positive-value() 0" ); - checkHappy("_: min(max-value() max-value() 0);", 0, "max-value() max-value() 0"); checkHappy( - "_: min(max-value() max-value() 1);", + "_: min(max-positive-value() max-positive-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), - "max-value() max-value() 1" + "max-positive-value() max-positive-value() 1" ); checkHappy( - "_: min(max-value() max-value() 2);", + "_: min(max-positive-value() max-positive-value() 2);", Float.unwrap(LibDecimalFloat.packLossless(2, 0)), - "max-value() max-value() 2" + "max-positive-value() max-positive-value() 2" ); checkHappy( - "_: min(max-value() max-value() max-value());", + "_: min(max-positive-value() max-positive-value() max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "max-value() max-value() max-value()" + "max-positive-value() max-positive-value() max-positive-value()" ); checkHappy("_: min(0 0 -2);", Float.unwrap(LibDecimalFloat.packLossless(-2, 0)), "0 0 -2"); checkHappy("_: min(1 0 -2);", Float.unwrap(LibDecimalFloat.packLossless(-2, 0)), "1 0 -2"); diff --git a/test/src/lib/op/math/LibOpMinNegativeValue.t.sol b/test/src/lib/op/math/LibOpMinNegativeValue.t.sol new file mode 100644 index 000000000..6c2066909 --- /dev/null +++ b/test/src/lib/op/math/LibOpMinNegativeValue.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: CAL +pragma solidity =0.8.25; + +import {OpTest} from "test/abstract/OpTest.sol"; +import {LibOpMinNegativeValue} from "src/lib/op/math/LibOpMinNegativeValue.sol"; +import {IntegrityCheckState, BadOpInputsLength} from "src/lib/integrity/LibIntegrityCheck.sol"; +import { + IInterpreterV4, + OperandV2, + SourceIndexV2, + FullyQualifiedNamespace, + StackItem +} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {InterpreterState, LibInterpreterState} from "src/lib/state/LibInterpreterState.sol"; +import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {IInterpreterStoreV2} from "rain.interpreter.interface/interface/IInterpreterStoreV2.sol"; +import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV3.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; + +/// @title LibOpMinNegativeValueTest +/// @notice Test the runtime and integrity time logic of LibOpMinNegativeValue. +contract LibOpMinNegativeValueTest is OpTest { + using LibInterpreterState for InterpreterState; + using LibDecimalFloat for Float; + + /// Directly test the integrity logic of LibOpMinNegativeValue. + function testOpMinNegativeValueIntegrity( + IntegrityCheckState memory state, + uint8 inputs, + uint8 outputs, + uint16 operandData + ) external pure { + inputs = uint8(bound(inputs, 0, 0x0F)); + outputs = uint8(bound(outputs, 0, 0x0F)); + (uint256 calcInputs, uint256 calcOutputs) = + LibOpMinNegativeValue.integrity(state, LibOperand.build(inputs, outputs, operandData)); + + assertEq(calcInputs, 0); + assertEq(calcOutputs, 1); + } + + /// Directly test the runtime logic of LibOpMinNegativeValue. This tests that + /// the opcode correctly pushes the min value onto the stack. + function testOpMinNegativeValueRun() external view { + InterpreterState memory state = opTestDefaultInterpreterState(); + StackItem[] memory inputs = new StackItem[](0); + OperandV2 operand = LibOperand.build(0, 1, 0); + opReferenceCheck( + state, + operand, + LibOpMinNegativeValue.referenceFn, + LibOpMinNegativeValue.integrity, + LibOpMinNegativeValue.run, + inputs + ); + } + + /// Test the eval of LibOpMinNegativeValue parsed from a string. + function testOpMinNegativeValueEval() external view { + checkHappy("_: min-negative-value();", Float.unwrap(LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE), ""); + } + + /// Test that a min-negative-value with inputs fails integrity check. + function testOpMinNegativeValueEvalFail() public { + vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 1, 0, 1)); + bytes memory bytecode = iDeployer.parse2("_: min-negative-value(0x00);"); + (bytecode); + } + + function testOpMinNegativeValueZeroOutputs() external { + checkBadOutputs(": min-negative-value();", 0, 1, 0); + } + + function testOpMinNegativeValueTwoOutputs() external { + checkBadOutputs("_ _: min-negative-value();", 0, 1, 2); + } +} diff --git a/test/src/lib/op/math/LibOpMinPositiveValue.t.sol b/test/src/lib/op/math/LibOpMinPositiveValue.t.sol new file mode 100644 index 000000000..95bbb4b4a --- /dev/null +++ b/test/src/lib/op/math/LibOpMinPositiveValue.t.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: CAL +pragma solidity =0.8.25; + +import {OpTest} from "test/abstract/OpTest.sol"; +import {LibOpMinPositiveValue} from "src/lib/op/math/LibOpMinPositiveValue.sol"; +import {IntegrityCheckState, BadOpInputsLength} from "src/lib/integrity/LibIntegrityCheck.sol"; +import { + IInterpreterV4, + OperandV2, + SourceIndexV2, + FullyQualifiedNamespace, + StackItem +} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {InterpreterState, LibInterpreterState} from "src/lib/state/LibInterpreterState.sol"; +import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; +import {IInterpreterStoreV2} from "rain.interpreter.interface/interface/IInterpreterStoreV2.sol"; +import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV3.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; + +/// @title LibOpMinPositiveValueTest +/// @notice Test the runtime and integrity time logic of LibOpMinPositiveValue. +contract LibOpMinPositiveValueTest is OpTest { + using LibInterpreterState for InterpreterState; + using LibDecimalFloat for Float; + + /// Directly test the integrity logic of LibOpMinPositiveValue. + function testOpMinPositiveValueIntegrity( + IntegrityCheckState memory state, + uint8 inputs, + uint8 outputs, + uint16 operandData + ) external pure { + inputs = uint8(bound(inputs, 0, 0x0F)); + outputs = uint8(bound(outputs, 0, 0x0F)); + (uint256 calcInputs, uint256 calcOutputs) = + LibOpMinPositiveValue.integrity(state, LibOperand.build(inputs, outputs, operandData)); + + assertEq(calcInputs, 0); + assertEq(calcOutputs, 1); + } + + /// Directly test the runtime logic of LibOpMinPositiveValue. This tests that + /// the opcode correctly pushes the min positive value onto the stack. + function testOpMinPositiveValueRun() external view { + InterpreterState memory state = opTestDefaultInterpreterState(); + StackItem[] memory inputs = new StackItem[](0); + OperandV2 operand = LibOperand.build(0, 1, 0); + opReferenceCheck( + state, + operand, + LibOpMinPositiveValue.referenceFn, + LibOpMinPositiveValue.integrity, + LibOpMinPositiveValue.run, + inputs + ); + } + + /// Test the eval of LibOpMinPositiveValue parsed from a string. + function testOpMinPositiveValueEval() external view { + checkHappy("_: min-positive-value();", Float.unwrap(LibDecimalFloat.FLOAT_MIN_POSITIVE_VALUE), ""); + } + + /// Test that a min-positive-value with inputs fails integrity check. + function testOpMinPositiveValueEvalFail() public { + vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 1, 0, 1)); + bytes memory bytecode = iDeployer.parse2("_: min-positive-value(0x00);"); + (bytecode); + } + + function testOpMinPositiveValueZeroOutputs() external { + checkBadOutputs(": min-positive-value();", 0, 1, 0); + } + + function testOpMinPositiveValueTwoOutputs() external { + checkBadOutputs("_ _: min-positive-value();", 0, 1, 2); + } +} diff --git a/test/src/lib/op/math/LibOpMinValue.t.sol b/test/src/lib/op/math/LibOpMinValue.t.sol deleted file mode 100644 index d92502ae5..000000000 --- a/test/src/lib/op/math/LibOpMinValue.t.sol +++ /dev/null @@ -1,69 +0,0 @@ -// SPDX-License-Identifier: CAL -pragma solidity =0.8.25; - -import {OpTest} from "test/abstract/OpTest.sol"; -import {LibOpMinValue} from "src/lib/op/math/LibOpMinValue.sol"; -import {IntegrityCheckState, BadOpInputsLength} from "src/lib/integrity/LibIntegrityCheck.sol"; -import { - IInterpreterV4, - OperandV2, - SourceIndexV2, - FullyQualifiedNamespace, - StackItem -} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -import {InterpreterState, LibInterpreterState} from "src/lib/state/LibInterpreterState.sol"; -import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; -import {IInterpreterStoreV2} from "rain.interpreter.interface/interface/IInterpreterStoreV2.sol"; -import {SignedContextV1} from "rain.interpreter.interface/interface/IInterpreterCallerV3.sol"; -import {LibOperand} from "test/lib/operand/LibOperand.sol"; -import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; - -/// @title LibOpMinValueTest -/// @notice Test the runtime and integrity time logic of LibOpMinValue. -contract LibOpMinValueTest is OpTest { - using LibInterpreterState for InterpreterState; - using LibDecimalFloat for Float; - - /// Directly test the integrity logic of LibOpMinValue. - function testOpMinValueIntegrity(IntegrityCheckState memory state, uint8 inputs, uint8 outputs, uint16 operandData) - external - pure - { - inputs = uint8(bound(inputs, 0, 0x0F)); - outputs = uint8(bound(outputs, 0, 0x0F)); - (uint256 calcInputs, uint256 calcOutputs) = - LibOpMinValue.integrity(state, LibOperand.build(inputs, outputs, operandData)); - - assertEq(calcInputs, 0); - assertEq(calcOutputs, 1); - } - - /// Directly test the runtime logic of LibOpMinValue. This tests that the - /// opcode correctly pushes the max value onto the stack. - function testOpMinValueRun() external view { - InterpreterState memory state = opTestDefaultInterpreterState(); - StackItem[] memory inputs = new StackItem[](0); - OperandV2 operand = LibOperand.build(0, 1, 0); - opReferenceCheck(state, operand, LibOpMinValue.referenceFn, LibOpMinValue.integrity, LibOpMinValue.run, inputs); - } - - /// Test the eval of LibOpMinValue parsed from a string. - function testOpMinValueEval() external view { - checkHappy("_: min-value();", Float.unwrap(LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE), ""); - } - - /// Test that a min-value with inputs fails integrity check. - function testOpMinValueEvalFail() public { - vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 1, 0, 1)); - bytes memory bytecode = iDeployer.parse2("_: min-value(0x00);"); - (bytecode); - } - - function testOpMinValueZeroOutputs() external { - checkBadOutputs(": min-value();", 0, 1, 0); - } - - function testOpMinValueTwoOutputs() external { - checkBadOutputs("_ _: min-value();", 0, 1, 2); - } -} diff --git a/test/src/lib/op/math/LibOpMul.t.sol b/test/src/lib/op/math/LibOpMul.t.sol index 3bb22fbe4..3224706c1 100644 --- a/test/src/lib/op/math/LibOpMul.t.sol +++ b/test/src/lib/op/math/LibOpMul.t.sol @@ -74,7 +74,7 @@ contract LibOpMulTest is OpTest { checkBadInputs("_: mul(5);", 1, 2, 1); checkBadInputs("_: mul(0);", 1, 2, 1); checkBadInputs("_: mul(1);", 1, 2, 1); - checkBadInputs("_: mul(max-value());", 1, 2, 1); + checkBadInputs("_: mul(max-positive-value());", 1, 2, 1); } function testOpMulZeroOutputs() external { @@ -101,9 +101,9 @@ contract LibOpMulTest is OpTest { checkHappy("_: mul(10 10);", Float.unwrap(LibDecimalFloat.packLossless(100, 0)), "10 10"); // Test an intermediate overflow. checkHappy( - "_: mul(1 max-value());", + "_: mul(1 max-positive-value());", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "1 max-value()" + "1 max-positive-value()" ); } @@ -112,7 +112,9 @@ contract LibOpMulTest is OpTest { /// Tests the unhappy path where the final result overflows. function testOpMulEvalTwoInputsUnhappyOverflow() external { checkUnhappyOverflow( - "_: mul(max-value() 10);", 13479973333575319897333507543509815336818572211270286240551805124607, 2147483648 + "_: mul(max-positive-value() 10);", + 13479973333575319897333507543509815336818572211270286240551805124607, + 2147483648 ); } @@ -135,9 +137,9 @@ contract LibOpMulTest is OpTest { checkHappy("_: mul(10 10 10);", Float.unwrap(LibDecimalFloat.packLossless(1000, 0)), "10 10 10"); // Test an intermediate overflow. checkHappy( - "_: mul(1 max-value() 1);", + "_: mul(1 max-positive-value() 1);", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "1 max-value() 1" + "1 max-positive-value() 1" ); } @@ -146,7 +148,7 @@ contract LibOpMulTest is OpTest { /// Tests the unhappy path where the final result overflows. function testOpMulEvalThreeInputsUnhappyOverflow() external { checkUnhappyOverflow( - "_: mul(max-value() 1 10);", + "_: mul(max-positive-value() 1 10);", 13479973333575319897333507543509815336818572211270286240551805124607, 2147483648 ); diff --git a/test/src/lib/op/math/LibOpSub.t.sol b/test/src/lib/op/math/LibOpSub.t.sol index 8f905f600..dd3730a45 100644 --- a/test/src/lib/op/math/LibOpSub.t.sol +++ b/test/src/lib/op/math/LibOpSub.t.sol @@ -89,7 +89,7 @@ contract LibOpSubTest is OpTest { checkBadInputs("_: sub(5e-18);", 1, 2, 1); checkBadInputs("_: sub(0);", 1, 2, 1); checkBadInputs("_: sub(1e-18);", 1, 2, 1); - checkBadInputs("_: sub(max-value());", 1, 2, 1); + checkBadInputs("_: sub(max-positive-value());", 1, 2, 1); } /// Test the eval of `sub` opcode parsed from a string. Tests two inputs. @@ -99,9 +99,9 @@ contract LibOpSubTest is OpTest { checkHappy("_: sub(2 1);", Float.unwrap(LibDecimalFloat.packLossless(1e37, -37)), "2 1"); checkHappy("_: sub(2 2);", Float.unwrap(LibDecimalFloat.packLossless(0e37, -37)), "2 2"); checkHappy( - "_: sub(max-value() 0);", + "_: sub(max-positive-value() 0);", Float.unwrap(LibDecimalFloat.packLossless(type(int224).max, type(int32).max)), - "max-value() 0" + "max-positive-value() 0" ); checkHappy("_: sub(1 2);", Float.unwrap(LibDecimalFloat.packLossless(-1e37, -37)), "1 2"); checkHappy("_: sub(1 0.1);", Float.unwrap(LibDecimalFloat.packLossless(9e37, -38)), "1 0.1"); diff --git a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol index 3d7b8c03c..01d5cdf28 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Div.t.sol @@ -75,7 +75,7 @@ contract LibOpUint256DivTest is OpTest { 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); + checkBadInputs("_: uint256-div(max-positive-value());", 1, 2, 1); } function testOpUint256DivEvalZeroOutputs() external { @@ -179,13 +179,13 @@ contract LibOpUint256DivTest is OpTest { 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(max-positive-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(max-positive-value() max-positive-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); + checkUnhappy("_: uint256-div(max-positive-value() 0 1e-18);", stdError.divisionError); } /// Test the eval of `uint256-div` opcode parsed from a string. diff --git a/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol index 313bdf0e8..ae3a71508 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Mul.t.sol @@ -151,7 +151,7 @@ contract LibOpUint256MulTest is OpTest { checkUnhappy("_: uint256-mul(0x02 0x02 uint256-max-value());", stdError.arithmeticError); checkUnhappy("_: uint256-mul(uint256-max-value() uint256-max-value() 0x02);", stdError.arithmeticError); checkUnhappy("_: uint256-mul(uint256-max-value() 0x02 uint256-max-value());", stdError.arithmeticError); - checkUnhappy("_: uint256-mul(2e-18 max-value() max-value());", stdError.arithmeticError); + checkUnhappy("_: uint256-mul(2e-18 max-positive-value() max-positive-value());", stdError.arithmeticError); checkUnhappy( "_: uint256-mul(uint256-max-value() uint256-max-value() uint256-max-value());", stdError.arithmeticError ); diff --git a/test/src/lib/op/math/uint256/LibOpUint256Pow.t.sol b/test/src/lib/op/math/uint256/LibOpUint256Pow.t.sol index 211367782..c7fb8d27f 100644 --- a/test/src/lib/op/math/uint256/LibOpUint256Pow.t.sol +++ b/test/src/lib/op/math/uint256/LibOpUint256Pow.t.sol @@ -97,7 +97,7 @@ contract LibOpUint256PowTest is OpTest { checkBadInputs("_: uint256-power(5e-18);", 1, 2, 1); checkBadInputs("_: uint256-power(0);", 1, 2, 1); checkBadInputs("_: uint256-power(1e-18);", 1, 2, 1); - checkBadInputs("_: uint256-power(max-value());", 1, 2, 1); + checkBadInputs("_: uint256-power(max-positive-value());", 1, 2, 1); } function testOpUint256PowEvalZeroOutputs() external {