diff --git a/.gas-snapshot b/.gas-snapshot index 17647cf1d..dd8d71f30 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,28 +1,28 @@ -BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2058, μ: 320946, ~: 320946) -BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2058, μ: 678755, ~: 678755) -LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 35499) -LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 6801) -LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 6783) -LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2058, μ: 82651, ~: 82651) -LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2058, μ: 9768, ~: 10284) -LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2058, μ: 8885, ~: 9401) -LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2058, μ: 43101, ~: 42780) -LibOpAddTest:testOpAddEval2InputsHappy() (gas: 160684) +BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2070, μ: 320946, ~: 320946) +BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2070, μ: 678755, ~: 678755) +LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 38314) +LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 7138) +LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 7120) +LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2070, μ: 82988, ~: 82988) +LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2070, μ: 9763, ~: 10284) +LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2070, μ: 8880, ~: 9401) +LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2070, μ: 43137, ~: 42803) +LibOpAddTest:testOpAddEval2InputsHappy() (gas: 160645) LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57637) LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 102927) LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 198828) LibOpAddTest:testOpAddEval2InputsUnhappy() (gas: 103113) -LibOpAddTest:testOpAddEval3InputsHappy() (gas: 309654) -LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 708662) +LibOpAddTest:testOpAddEval3InputsHappy() (gas: 309524) +LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 708584) LibOpAddTest:testOpAddEvalOneInput() (gas: 36567) LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91393) LibOpAddTest:testOpAddEvalTwoOutput() (gas: 43951) LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30187) LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 42969) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2058, μ: 18205, ~: 18400) -LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2058, μ: 13875, ~: 13765) -LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2058, μ: 13872, ~: 13762) -LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2055, μ: 52008, ~: 52380) +LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2070, μ: 18197, ~: 18430) +LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13866, ~: 13733) +LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13863, ~: 13730) +LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2067, μ: 52253, ~: 52499) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 207624) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57790) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58520) @@ -31,13 +31,13 @@ LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57835) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30590) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34910) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43409) -LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19697, ~: 19928) -LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2058, μ: 16674, ~: 16674) +LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19690, ~: 19966) +LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2070, μ: 16674, ~: 16674) LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41568) LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40499) LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 719111) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2058, μ: 13754, ~: 13664) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2058, μ: 16671, ~: 16671) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2070, μ: 13746, ~: 13661) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2070, μ: 16671, ~: 16671) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18182) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35724) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45493) @@ -51,54 +51,54 @@ LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45391) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41215) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30643) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40212) -LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2058, μ: 13753, ~: 13663) -LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2058, μ: 16628, ~: 16628) -LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2058, μ: 50922, ~: 50694) +LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2070, μ: 13745, ~: 13660) +LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2070, μ: 16628, ~: 16628) +LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2070, μ: 50919, ~: 50694) LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 35137) LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 31438) LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 30429) -LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19647, ~: 19915) -LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2058, μ: 20845, ~: 21044) +LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19649, ~: 19896) +LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2070, μ: 20844, ~: 20508) LibOpCallTest:testCallTraceInnerOnly() (gas: 62948) LibOpCallTest:testCallTraceOuterOnly() (gas: 45518) -LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2055, μ: 39715, ~: 38477) -LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2058, μ: 59218, ~: 58871) -LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2054, μ: 59020, ~: 59580) +LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2067, μ: 39773, ~: 38488) +LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2070, μ: 59252, ~: 59121) +LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2066, μ: 58788, ~: 59232) LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 71868) LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 65483) LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 350171) -LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2058, μ: 46985, ~: 46985) -LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19675, ~: 19903) +LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2070, μ: 46985, ~: 46985) +LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19667, ~: 19903) LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34311) -LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2058, μ: 17123, ~: 17123) +LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2070, μ: 17123, ~: 17123) LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 31115) LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 30064) LibOpConstantTest:testOpConstantEvalNPE2E() (gas: 56034) LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41483) -LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2058, μ: 19202, ~: 19090) -LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2058, μ: 40175, ~: 39809) +LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2070, μ: 19191, ~: 19095) +LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2070, μ: 40149, ~: 39809) LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31623) LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41563) -LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2058, μ: 52410, ~: 51854) +LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2070, μ: 52247, ~: 51854) LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30239) LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40191) -LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 110, μ: 6342438, ~: 5266144) -LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 110, μ: 6368349, ~: 5266325) -LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 110, μ: 6342582, ~: 5266288) -LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 110, μ: 6329663, ~: 5151812) -LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 110, μ: 74371, ~: 72708) -LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2058, μ: 48179, ~: 48179) -LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2058, μ: 14505, ~: 14415) +LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 122, μ: 5755793, ~: 4747263) +LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 122, μ: 5779173, ~: 4747444) +LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 122, μ: 5755937, ~: 4747407) +LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 121, μ: 5788941, ~: 4694576) +LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 122, μ: 72044, ~: 67714) +LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2070, μ: 48179, ~: 48179) +LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2070, μ: 14497, ~: 14412) LibOpContextNPTest:testOpContextNPOneInput() (gas: 41562) -LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 110, μ: 9990612, ~: 7383211) -LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 110, μ: 10328859, ~: 7923969) -LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 110, μ: 10337736, ~: 7924884) +LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 122, μ: 9214095, ~: 5992536) +LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 122, μ: 9358625, ~: 6117035) +LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 122, μ: 9366722, ~: 6117950) LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46426) LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37230) LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36178) -LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2058, μ: 74377, ~: 85233) -LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2058, μ: 13752, ~: 13662) -LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2058, μ: 16698, ~: 16698) +LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2070, μ: 74112, ~: 85207) +LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2070, μ: 13744, ~: 13659) +LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2070, μ: 16698, ~: 16698) LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41109) LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 36981) LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31245) @@ -108,10 +108,10 @@ LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 46938) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42790) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37120) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41737) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2058, μ: 22140, ~: 22232) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2058, μ: 41511, ~: 41549) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2058, μ: 35707, ~: 35466) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2058, μ: 21011, ~: 20814) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2070, μ: 22129, ~: 22237) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2070, μ: 41483, ~: 41547) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2070, μ: 35681, ~: 35423) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2070, μ: 21009, ~: 20814) LibOpDivTest:testDebugOpDivRun() (gas: 13482) LibOpDivTest:testOpDivEvalOneInput() (gas: 126203) LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91369) @@ -124,29 +124,29 @@ LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 56389) LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41191) LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30143) LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40187) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2058, μ: 18255, ~: 18482) -LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2058, μ: 13828, ~: 13718) -LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2058, μ: 13851, ~: 13741) -LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2055, μ: 37558, ~: 33610) +LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2070, μ: 18248, ~: 18452) +LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13819, ~: 13686) +LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13842, ~: 13709) +LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2067, μ: 37797, ~: 33765) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalHappy() (gas: 55232) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalOperandDisallowed() (gas: 18348) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoInputs() (gas: 43404) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoOutputs() (gas: 37653) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalZeroInputs() (gas: 30899) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalZeroOutputs() (gas: 36599) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2058, μ: 13754, ~: 13664) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPRun(address,address,uint16) (runs: 2058, μ: 23614, ~: 23614) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2070, μ: 13746, ~: 13661) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPRun(address,address,uint16) (runs: 2069, μ: 23614, ~: 23614) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30669) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 34957) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44446) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18178) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2058, μ: 96702, ~: 93175) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2069, μ: 96884, ~: 93357) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35415) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44911) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31116) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39705) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2058, μ: 13769, ~: 13701) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2058, μ: 24201, ~: 24201) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2070, μ: 13761, ~: 13698) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2069, μ: 24201, ~: 24201) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40751) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 832020) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42013) @@ -154,10 +154,10 @@ LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 51760) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 47586) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37034) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 46582) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2058, μ: 18151, ~: 18137) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2058, μ: 41722, ~: 41757) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2058, μ: 35836, ~: 35595) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2058, μ: 21392, ~: 21212) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2070, μ: 18146, ~: 18144) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2070, μ: 41686, ~: 41753) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2070, μ: 35810, ~: 35552) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2070, μ: 21404, ~: 21212) LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34403) LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33928) LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 166098) @@ -166,10 +166,10 @@ LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45321) LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 111771) LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 17029) LibOpEnsureTest:testOpEnsureEvalZero() (gas: 29599) -LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19724, ~: 19951) -LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2058, μ: 13819, ~: 13709) +LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19713, ~: 19948) +LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13810, ~: 13677) LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39558) -LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2053, μ: 18144, ~: 18151) +LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2058, μ: 18144, ~: 18151) LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 338912) LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 57602) LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 58289) @@ -178,15 +178,15 @@ LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 57625) LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 30023) LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 34334) LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 42758) -LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19670, ~: 19944) -LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2058, μ: 17542, ~: 17466) +LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19671, ~: 19944) +LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2070, μ: 17542, ~: 17466) LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 41023) LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 39932) LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 99717) LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115288) -LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2057, μ: 34988, ~: 34884) -LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2057, μ: 53550, ~: 53633) -LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2057, μ: 117827, ~: 117525) +LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2067, μ: 34941, ~: 34868) +LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2067, μ: 53395, ~: 53408) +LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2069, μ: 117825, ~: 117621) LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 308436) LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57416) LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 522269) @@ -197,34 +197,62 @@ LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39717) LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 35309) LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29732) LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 34279) -LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 20566, ~: 20826) -LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2058, μ: 19633, ~: 19638) -LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2058, μ: 47586, ~: 47610) -LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2058, μ: 49830, ~: 49835) -LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2058, μ: 51422, ~: 51427) -LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2058, μ: 24664, ~: 24668) +LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 20556, ~: 20806) +LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2070, μ: 19634, ~: 19638) +LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2070, μ: 47586, ~: 47610) +LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2070, μ: 49831, ~: 49835) +LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2070, μ: 51423, ~: 51427) +LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2070, μ: 24664, ~: 24668) +LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58536) +LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 61138) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57851) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 58583) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 58602) +LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 57872) +LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 30391) +LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34712) +LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43053) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58635) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61339) +LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19684, ~: 19920) +LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2070, μ: 17418, ~: 17347) +LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41810) +LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40762) LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 46253) LibOpHashNPTest:testOpHashNPEval1Input() (gas: 54862) LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 63206) LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 63878) LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 78433) -LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19718, ~: 19965) -LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2055, μ: 19464, ~: 19563) +LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19715, ~: 19956) +LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2067, μ: 19468, ~: 19563) LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30800) LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29426) LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 47248) LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 35084) -LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19662, ~: 19908) +LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19651, ~: 19895) LibOpMaxUint256Test:testOpMaxUint256Run() (gas: 15997) LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 31867) LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 30772) LibOpMaxValueTest:testOpMaxValueEval() (gas: 46864) LibOpMaxValueTest:testOpMaxValueEvalFail() (gas: 34392) -LibOpMaxValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19655, ~: 19921) +LibOpMaxValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19646, ~: 19860) LibOpMaxValueTest:testOpMaxValueRun() (gas: 16217) LibOpMaxValueTest:testOpMaxValueTwoOutputs() (gas: 31241) LibOpMaxValueTest:testOpMaxValueZeroOutputs() (gas: 30146) -LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2058, μ: 17660, ~: 17665) +LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13821, ~: 13688) +LibOpMulTest:testOpMulEvalOneInput() (gas: 126138) +LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91391) +LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 743256) +LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 60772) +LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 522537) +LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 54322) +LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30188) +LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2070, μ: 18220, ~: 18389) +LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13864, ~: 13731) +LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2067, μ: 26335, ~: 23627) +LibOpMulTest:testOpMulTwoOutputs() (gas: 40727) +LibOpMulTest:testOpMulZeroOutputs() (gas: 39681) +LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2070, μ: 17660, ~: 17665) LibOpSetTest:testLibOpSetEvalOneInput() (gas: 34167) LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39804) LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 55931) @@ -233,42 +261,50 @@ LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44600) LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 258295) LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40426) LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 29347) -LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 20443, ~: 20640) +LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 20440, ~: 20670) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 878214) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128017) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44422) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40306) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34581) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39231) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2058, μ: 19763, ~: 19760) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2058, μ: 35802, ~: 35560) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2058, μ: 41997, ~: 42651) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2056, μ: 16833, ~: 16833) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2070, μ: 19772, ~: 19739) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2070, μ: 35776, ~: 35518) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2070, μ: 41966, ~: 42587) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2068, μ: 16833, ~: 16833) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1053002) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 128607) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 110, μ: 19857, ~: 19297) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 110, μ: 37037, ~: 37011) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 110, μ: 40851, ~: 40926) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2057, μ: 16836, ~: 16836) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 122, μ: 19630, ~: 19284) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 122, μ: 36482, ~: 36899) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 122, μ: 40260, ~: 40684) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2069, μ: 16836, ~: 16836) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44546) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40366) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34640) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39315) LibOpStackNPTest:testOpStackEval() (gas: 65282) LibOpStackNPTest:testOpStackEvalSeveral() (gas: 87120) -LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2058, μ: 18891, ~: 18659) -LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2058, μ: 41466, ~: 41568) +LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2070, μ: 18911, ~: 18763) +LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2070, μ: 41498, ~: 41595) LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 39311) LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 42971) -LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 110, μ: 2016669, ~: 1835418) +LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 122, μ: 1830875, ~: 1578881) LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 37856) LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41481) +LibOpSubTest:testOpSubEvalOneInput() (gas: 128761) +LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226103) +LibOpSubTest:testOpSubEvalTwoInputs() (gas: 342176) +LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30106) +LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2070, μ: 18238, ~: 18443) +LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13820, ~: 13687) +LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2070, μ: 13821, ~: 13688) +LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2067, μ: 55971, ~: 55444) LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 65765) LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 58682) LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 56557) -LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2058, μ: 84923, ~: 84599) -LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2058, μ: 19673, ~: 19898) -LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2058, μ: 20591, ~: 20364) +LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2070, μ: 84921, ~: 84599) +LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2070, μ: 19660, ~: 19868) +LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2070, μ: 20589, ~: 20364) LibParseCommentsTest:testParseCommentAfterSources() (gas: 69689) LibParseCommentsTest:testParseCommentBetweenSources() (gas: 69745) LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 46231) @@ -321,7 +357,7 @@ LibParseInputsOnlyGasTest:testParseGasInputsOnly09() (gas: 52192) LibParseInputsOnlyTest:testParseInputsOnlyMultiple() (gas: 52451) LibParseInputsOnlyTest:testParseInputsOnlySingle() (gas: 51541) LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexBounds() (gas: 18858) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2058, μ: 44936, ~: 43980) +LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2070, μ: 44743, ~: 43846) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE() (gas: 11195) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE0() (gas: 11173) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert() (gas: 11218) @@ -340,7 +376,7 @@ LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegative LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNonDecimal() (gas: 11150) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert0() (gas: 35135) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert1() (gas: 35045) -LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2058, μ: 27321, ~: 37882) +LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2070, μ: 27214, ~: 37882) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal00() (gas: 56730) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal01() (gas: 63896) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal02() (gas: 70152) @@ -359,23 +395,23 @@ LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex00() (gas: 55856) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex01() (gas: 61572) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex02() (gas: 66623) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHexUint256Max() (gas: 72869) -LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2057, μ: 16485, ~: 16416) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2058, μ: 30094, ~: 29976) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2057, μ: 19013, ~: 18917) +LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2069, μ: 16451, ~: 16389) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2067, μ: 30039, ~: 29941) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2069, μ: 18982, ~: 18894) LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2049, μ: 31899, ~: 31390) LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2049, μ: 13478, ~: 13384) LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2049, μ: 24339, ~: 24265) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 54552) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 5643) LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 101, μ: 68625, ~: 68286) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 110, μ: 65364, ~: 65101) +LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 119, μ: 64542, ~: 64255) LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 101, μ: 69361, ~: 69457) -LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 109, μ: 61508, ~: 61659) +LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 121, μ: 61000, ~: 60466) LibParseLiteralStringTest:testParseStringLiteralSimple() (gas: 54654) -LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 106, μ: 75046, ~: 75737) +LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 113, μ: 74867, ~: 74961) LibParseLiteralSubParseableTest:testParseLiteralSubParseableBody() (gas: 64571) LibParseLiteralSubParseableTest:testParseLiteralSubParseableEmptyBody() (gas: 19630) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2058, μ: 89519, ~: 87539) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2067, μ: 89480, ~: 87498) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchEmpty() (gas: 10659) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosed() (gas: 10619) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace0() (gas: 10679) @@ -440,36 +476,36 @@ LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecon LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultThird() (gas: 55536) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnclosed() (gas: 52609) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnopened() (gas: 47193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2058, μ: 12115, ~: 12193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2058, μ: 13578, ~: 13436) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2058, μ: 10368, ~: 10410) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2058, μ: 11731, ~: 11562) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2058, μ: 8644, ~: 8700) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2058, μ: 11709, ~: 11953) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2058, μ: 35338, ~: 35566) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2070, μ: 12115, ~: 12193) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2070, μ: 13577, ~: 13436) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2070, μ: 10368, ~: 10410) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2070, μ: 11730, ~: 11562) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2070, μ: 8644, ~: 8700) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2070, μ: 11706, ~: 11783) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2070, μ: 35178, ~: 35329) LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1NoValues() (gas: 4679) -LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2058, μ: 34722, ~: 34636) +LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2070, μ: 34565, ~: 34400) LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedNoValues() (gas: 3219) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2058, μ: 9918, ~: 10039) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2058, μ: 11257, ~: 11074) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2058, μ: 35142, ~: 35351) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2070, μ: 9918, ~: 10039) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2070, μ: 11257, ~: 11074) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2070, μ: 34983, ~: 34997) LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultNoValues() (gas: 4625) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2058, μ: 8807, ~: 9089) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2058, μ: 11280, ~: 11085) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2058, μ: 35036, ~: 35245) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2070, μ: 8805, ~: 9089) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2070, μ: 11279, ~: 11085) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2070, μ: 34877, ~: 34891) LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1NoValues() (gas: 3891) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2058, μ: 8180, ~: 8200) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2058, μ: 9321, ~: 9095) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2058, μ: 9878, ~: 9901) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2058, μ: 11184, ~: 11003) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2058, μ: 34958, ~: 35145) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2058, μ: 34978, ~: 35165) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2070, μ: 8180, ~: 8200) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2070, μ: 9319, ~: 9095) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2070, μ: 9878, ~: 9901) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2070, μ: 11183, ~: 11003) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2070, μ: 34799, ~: 34909) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2070, μ: 34819, ~: 34929) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultNoValues() (gas: 4599) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2058, μ: 7613, ~: 7893) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2070, μ: 7611, ~: 7893) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoValues() (gas: 3266) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2058, μ: 7652, ~: 7936) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2058, μ: 9290, ~: 9499) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2058, μ: 9331, ~: 9540) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2070, μ: 7650, ~: 7936) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2070, μ: 9292, ~: 9499) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2070, μ: 9332, ~: 9540) LibParseOperandM1M1Test:testOperandM1M1Both() (gas: 57649) LibParseOperandM1M1Test:testOperandM1M1BothZero() (gas: 55824) LibParseOperandM1M1Test:testOperandM1M1Elided() (gas: 51802) @@ -481,13 +517,13 @@ LibParseOperandM1M1Test:testOperandM1M1SecondOverflow() (gas: 53500) LibParseOperandM1M1Test:testOperandM1M1SecondZero() (gas: 57377) LibParseOperandM1M1Test:testOperandM1M1Unclosed() (gas: 251386) LibParseOperandM1M1Test:testOperandM1M1Unopened() (gas: 49346) -LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 106, μ: 42975, ~: 42972) -LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 108, μ: 354093, ~: 353517) -LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 110, μ: 42852, ~: 42849) -LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 110, μ: 157943, ~: 159350) -LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 109, μ: 273842, ~: 267641) +LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 109, μ: 42975, ~: 42972) +LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 120, μ: 355745, ~: 356850) +LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 119, μ: 42852, ~: 42849) +LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 122, μ: 158531, ~: 159787) +LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 121, μ: 272204, ~: 265937) LibParseOperandParseOperandTest:testParseOperandTooManyValues() (gas: 54582) -LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 109, μ: 215447, ~: 216210) +LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 121, μ: 214130, ~: 212665) LibParseOperandParseOperandTest:testParseOperandUnclosed() (gas: 54141) LibParseOperandParseOperandTest:testParseOperandUnexpectedChars() (gas: 51419) LibParseOperandSingleFullTest:testOperandSingleFullElided() (gas: 51178) @@ -506,16 +542,16 @@ LibParseOperandSingleFullTest:testOperandSingleFullUint16MaxOverflow() (gas: 514 LibParseOperandSingleFullTest:testOperandSingleFullUnclosed() (gas: 49874) LibParseOperandSingleFullTest:testOperandSingleFullUnopened() (gas: 48263) LibParseOperandSingleFullTest:testOperandSingleFullZero() (gas: 54245) -LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2058, μ: 9460, ~: 9402) +LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2070, μ: 9463, ~: 9483) LibParseParseWordTest:testLibParseParseWordExamples() (gas: 26983) LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2049, μ: 6477, ~: 6257) -LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2057, μ: 9726, ~: 9660) -LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 110, μ: 8976, ~: 8938) -LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 110, μ: 16182, ~: 15980) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 110, μ: 168257, ~: 156164) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 110, μ: 344302, ~: 359033) +LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2069, μ: 9726, ~: 9660) +LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 122, μ: 8974, ~: 8938) +LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 122, μ: 16389, ~: 16184) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 119, μ: 158815, ~: 148212) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 119, μ: 336362, ~: 331848) LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserSpecificStrings() (gas: 254483) -LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 110, μ: 20000, ~: 18184) +LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 122, μ: 20358, ~: 18184) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored00() (gas: 8389) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored01() (gas: 8451) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored02() (gas: 8537) @@ -591,65 +627,65 @@ LibParseSingleRHSNamedGasTest:testParseGasRHS30() (gas: 119933) LibParseSourceInputsTest:testParseSourceInputsEmptyLinePrefix() (gas: 49446) LibParseSourceInputsTest:testParseSourceInputsMultipleLines() (gas: 52189) LibParseSourceInputsTest:testParseSourceInputsSingle() (gas: 49423) -LibParseStackNameTest:testPushAndRetrieveStackNameDouble((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2058, μ: 20475, ~: 20346) -LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2058, μ: 17755, ~: 17677) -LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2058, μ: 313311, ~: 261007) -LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2058, μ: 17719, ~: 17641) -LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2058, μ: 3330, ~: 3330) +LibParseStackNameTest:testPushAndRetrieveStackNameDouble((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32,bytes32) (runs: 2070, μ: 20485, ~: 20361) +LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2070, μ: 17764, ~: 17686) +LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2070, μ: 313595, ~: 261748) +LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2070, μ: 17728, ~: 17650) +LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2070, μ: 3330, ~: 3330) LibParseStateConstantValueBloomTest:testConstantValueBloomAllBits() (gas: 45879) -LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2058, μ: 3447, ~: 3447) -LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2058, μ: 148190, ~: 144865) -LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2058, μ: 13351, ~: 13470) -LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2058, μ: 7158, ~: 7158) +LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2070, μ: 3447, ~: 3447) +LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2070, μ: 148142, ~: 144804) +LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2070, μ: 13351, ~: 13470) +LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2070, μ: 7158, ~: 7158) LibParseStateNewActiveSourcePointerTest:testPreUnalignedNewPointer() (gas: 9188) -LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2058, μ: 4802, ~: 4799) -LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2058, μ: 6477, ~: 6474) -LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2058, μ: 225183, ~: 224765) -LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2058, μ: 7030, ~: 7030) -LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2058, μ: 134786, ~: 131825) -LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2058, μ: 17008, ~: 16935) -LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2058, μ: 44737, ~: 45094) -LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2058, μ: 15489, ~: 15508) +LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2070, μ: 4802, ~: 4799) +LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2070, μ: 6476, ~: 6474) +LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2070, μ: 224016, ~: 223015) +LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2070, μ: 7030, ~: 7030) +LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2070, μ: 134742, ~: 131769) +LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2070, μ: 17017, ~: 16960) +LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2070, μ: 44762, ~: 45104) +LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2070, μ: 15498, ~: 15540) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParen() (gas: 48678) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested() (gas: 68700) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested2() (gas: 70248) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested3() (gas: 80148) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested4() (gas: 80013) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2057, μ: 46790, ~: 46791) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2058, μ: 52910, ~: 52956) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2068, μ: 46790, ~: 46791) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2070, μ: 52911, ~: 52956) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOF() (gas: 132631) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOL() (gas: 132654) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2057, μ: 46382, ~: 46382) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2068, μ: 46382, ~: 46382) LibParseUnexpectedLHSTest:testParseUnexpectedLHSUnderscoreTail() (gas: 134986) -LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2057, μ: 46615, ~: 46615) +LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2069, μ: 46615, ~: 46615) LibParseUnexpectedRHSTest:testParseUnexpectedRHSLeftParen() (gas: 46106) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 50722) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 56990) -LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2058, μ: 13230, ~: 13163) -LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2058, μ: 11434, ~: 11167) -RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 6888051) -RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 6896622) -RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2058, μ: 6895492, ~: 6895492) +LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2070, μ: 13232, ~: 13163) +LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2070, μ: 11436, ~: 11167) +RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 7054896) +RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 7063903) +RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2070, μ: 7062337, ~: 7062337) RainterpreterExpressionDeployerMetaTest:testRainterpreterExpressionDeployerExpectedConstructionMetaHash() (gas: 6221) -RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2058, μ: 1875330, ~: 1875330) -RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2058, μ: 3419478, ~: 3419478) -RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17079871) -RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10299620) -RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10302912) -RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3418484) -RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3421555) -RainterpreterParserPointersTest:testParserParseMeta() (gas: 163220) -RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 1877363) +RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2070, μ: 2027875, ~: 2027875) +RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2070, μ: 3427902, ~: 3427902) +RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17121952) +RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10324872) +RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10328164) +RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3426908) +RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3430315) +RainterpreterParserPointersTest:testParserParseMeta() (gas: 179028) +RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 2030244) RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 2160017) RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 2159602) RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 2158298) RainterpreterReferenceExternDescribedByMetaV1:testRainterpreterReferenceExternDescribedByMetaV1Happy() (gas: 2081641) -RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2058, μ: 2093899, ~: 2093899) +RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2070, μ: 2093899, ~: 2093899) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2183757) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2177996) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 110, μ: 3597, ~: 3597) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 110, μ: 742636, ~: 760561) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 110, μ: 2095539, ~: 2095759) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 122, μ: 3597, ~: 3597) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 122, μ: 736255, ~: 758294) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 122, μ: 2095543, ~: 2095759) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 101, μ: 2091869, ~: 2091662) RainterpreterReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 2081736) RainterpreterReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 2081779) @@ -658,13 +694,13 @@ RainterpreterReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 208 RainterpreterReferenceExternPointersTest:testSubParserOperandParsers() (gas: 2082229) RainterpreterReferenceExternPointersTest:testSubParserParseMeta() (gas: 22017) RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2212888) -RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2058, μ: 2167441, ~: 2167550) +RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2070, μ: 2167436, ~: 2167550) RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 2128665) RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 52305) RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 83034) -RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2058, μ: 229923, ~: 229923) -RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 107, μ: 1633818, ~: 1605371) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 110, μ: 3414950, ~: 3286339) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 110, μ: 1868842, ~: 1924733) -RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 105, μ: 249348, ~: 249891) +RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2070, μ: 229923, ~: 229923) +RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 119, μ: 1630716, ~: 1605371) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 122, μ: 3221086, ~: 3117561) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 122, μ: 1866731, ~: 1964480) +RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 108, μ: 249269, ~: 249274) RainterpreterTest:testRainterpreterOddFunctionPointersLength() (gas: 3660) \ No newline at end of file diff --git a/src/generated/Rainterpreter.pointers.sol b/src/generated/Rainterpreter.pointers.sol index 39f7d0570..0be596382 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(0x6ba365de507490ff7cb262df51a7bb9b131cf720d1268f29e533709a7cd70c61); +bytes32 constant BYTECODE_HASH = bytes32(0xddf6e7bcbe3d3394d100881801381404f5f91c19b9d21d348482ff09fbabd3f4); /// @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"07010733075708e309ac09be09d009e90a0d0a410a520a630b050b240bd30c570c680c790c790c8a0d170d300d440d570db90e070e380e860ed40fbb"; + hex"070a073c076008ec09b509c709d909f20a160a4a0a5b0a6c0b0e0b2d0bdc0c600c710c820c820c930d200d390d4d0d660d790ddb0e290e5a0ea80ef60fdd"; diff --git a/src/generated/RainterpreterExpressionDeployer.pointers.sol b/src/generated/RainterpreterExpressionDeployer.pointers.sol index 430c1f4e9..9558e046a 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(0x010a570b11206177d53f0f66cd89962bbfca589385bcb0ec0ab4bc6c1dd3b35c); +bytes32 constant BYTECODE_HASH = bytes32(0x92914df17907d045c2e205ffc7629e9362435836efff6ff7bf1d5cb6ead71c74); /// @dev The hash of the meta that describes the contract. -bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x55ffa49be99c9effc2f611777c0d7d88251c9d4ca0c66dbfb3f520cd675940bb); +bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xf2422b9957601bb0f760ed0062347ad9e9fda6fad2f4b119aa9ddb874618397a); /// @dev The function pointers for the integrity check fns. bytes constant INTEGRITY_FUNCTION_POINTERS = - hex"0da80e260e8a1004100e100e10181021103c10e210e2113e11b6100e1018100410041004100411c3100e100e100411cd11f5100411f511f5101811c3"; + hex"0db00e2e0e92100c1016101610201029104410ea10ea114611be10161020100c100c100c100c11cb101610161016100c11d511fd100c11fd11fd102011cb"; diff --git a/src/generated/RainterpreterParser.pointers.sol b/src/generated/RainterpreterParser.pointers.sol index 4923f6230..52ba08368 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(0xb416945b30bdad60766ef143f600b093a45edb74bf6b644c2d72a654960b6a85); +bytes32 constant BYTECODE_HASH = bytes32(0x58f6018d11af765b99cb6f438c3cfcbb09b18a8406b4fafa5cb1645b3ac674af); /// @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(0xb416945b30bdad60766ef143f600b093a45ed /// 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"01092404900810009008201088000400e0010080000800001028010100080800090002cd70471c14fbe600f861d118d0e20c0e8be82d1d7c7f8004e5ab37174d06d00d67df8415fedd510602c61f08bcae760bcd088610f1c17805ac4b9f0a09bc09160ce432091ef7b011dfb72601a91367121faf890c2b9f481ae804c119bd68ce14811fdb034a067c0fffb07907743c4a1b15024513edf10f"; + hex"01092404900810009008201088000400e0010080000800001028010100080900090002cd70471d14fbe61685cf8700f861d119d0e20c0e8be82d1e7c7f8004e5ab37184d06d00d67df8415fedd510602c61f08bcae760bcd088610f1c17805ac4b9f0a09bc09170ce432091ef7b011dfb72601a91367121faf890c2b9f481be804c11abd68ce14811fdb034a067c0fffb07907743c4a1c15024513edf10f"; /// @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"198a198a198a1a5f1b761b761b761a5f1a5f198a198a198a1b761b761b761b761b761b761b761b761b761b761b761b761b761b761b76198a1b761b76"; + hex"1992199219921a671b7e1b7e1b7e1a671a671992199219921b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e1b7e19921b7e1b7e"; /// @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"14d21704174717e5"; +bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"14da170c174f17ed"; diff --git a/src/lib/op/LibAllStandardOps.sol b/src/lib/op/LibAllStandardOps.sol index b38ab5f55..a8fc10f39 100644 --- a/src/lib/op/LibAllStandardOps.sol +++ b/src/lib/op/LibAllStandardOps.sol @@ -51,7 +51,7 @@ import {LibOpEnsure} from "./logic/LibOpEnsure.sol"; import {LibOpEqualTo} from "./logic/LibOpEqualTo.sol"; import {LibOpBinaryEqualTo} from "./logic/LibOpBinaryEqualTo.sol"; import {LibOpEveryNP} from "./logic/LibOpEveryNP.sol"; -import {LibOpGreaterThanNP} from "./logic/LibOpGreaterThanNP.sol"; +import {LibOpGreaterThan} from "./logic/LibOpGreaterThan.sol"; import {LibOpGreaterThanOrEqualToNP} from "./logic/LibOpGreaterThanOrEqualToNP.sol"; import {LibOpIfNP} from "./logic/LibOpIfNP.sol"; import {LibOpIsZeroNP} from "./logic/LibOpIsZeroNP.sol"; @@ -105,7 +105,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 = 30; +uint256 constant ALL_STANDARD_OPS_LENGTH = 31; /// @title LibAllStandardOps /// @notice Every opcode available from the core repository laid out as a single @@ -211,7 +211,7 @@ library LibAllStandardOps { AuthoringMetaV2("equal-to", "1 if all inputs are equal, 0 otherwise. Equality is numerical."), AuthoringMetaV2("binary-equal-to", "1 if all inputs are equal, 0 otherwise. Equality is binary."), // AuthoringMetaV2("every", "The last nonzero value out of all inputs, or 0 if any input is 0."), - // AuthoringMetaV2("greater-than", "1 if the first input is greater than the second input, 0 otherwise."), + AuthoringMetaV2("greater-than", "true if the first input is greater than the second input, false otherwise."), // AuthoringMetaV2( // "greater-than-or-equal-to", // "1 if the first input is greater than or equal to the second input, 0 otherwise." @@ -423,8 +423,8 @@ library LibAllStandardOps { LibParseOperand.handleOperandDisallowed, // // every // LibParseOperand.handleOperandDisallowed, - // // greater-than - // LibParseOperand.handleOperandDisallowed, + // greater-than + LibParseOperand.handleOperandDisallowed, // // greater-than-or-equal-to // LibParseOperand.handleOperandDisallowed, // // if @@ -574,7 +574,7 @@ library LibAllStandardOps { LibOpEqualTo.integrity, LibOpBinaryEqualTo.integrity, // LibOpEveryNP.integrity, - // LibOpGreaterThanNP.integrity, + LibOpGreaterThan.integrity, // LibOpGreaterThanOrEqualToNP.integrity, // LibOpIfNP.integrity, // LibOpIsZeroNP.integrity, @@ -686,7 +686,7 @@ library LibAllStandardOps { LibOpEqualTo.run, LibOpBinaryEqualTo.run, // LibOpEveryNP.run, - // LibOpGreaterThanNP.run, + LibOpGreaterThan.run, // LibOpGreaterThanOrEqualToNP.run, // LibOpIfNP.run, // LibOpIsZeroNP.run, diff --git a/src/lib/op/logic/LibOpGreaterThanNP.sol b/src/lib/op/logic/LibOpGreaterThan.sol similarity index 53% rename from src/lib/op/logic/LibOpGreaterThanNP.sol rename to src/lib/op/logic/LibOpGreaterThan.sol index 049e84c81..5008e7516 100644 --- a/src/lib/op/logic/LibOpGreaterThanNP.sol +++ b/src/lib/op/logic/LibOpGreaterThan.sol @@ -5,11 +5,13 @@ import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpre import {Pointer} from "rain.solmem/lib/LibPointer.sol"; import {InterpreterState} from "../../state/LibInterpreterState.sol"; import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {Float, LibDecimalFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; -/// @title LibOpGreaterThanNP +/// @title LibOpGreaterThan /// @notice Opcode to return 1 if the first item on the stack is greater than /// the second item on the stack, else 0. -library LibOpGreaterThanNP { +library LibOpGreaterThan { function integrity(IntegrityCheckState memory, OperandV2) internal pure returns (uint256, uint256) { return (2, 1); } @@ -17,21 +19,30 @@ library LibOpGreaterThanNP { /// GT /// GT is 1 if the first item is greater than the second item, else 0. function run(InterpreterState memory, OperandV2, Pointer stackTop) internal pure returns (Pointer) { + Float a; + Float b; assembly ("memory-safe") { - let a := mload(stackTop) + a := mload(stackTop) stackTop := add(stackTop, 0x20) - mstore(stackTop, gt(a, mload(stackTop))) + b := mload(stackTop) + } + bool greaterThan = LibDecimalFloat.gt(a, b); + assembly ("memory-safe") { + mstore(stackTop, greaterThan) } return stackTop; } /// Gas intensive reference implementation of GT for testing. - function referenceFn(InterpreterState memory, OperandV2, uint256[] memory inputs) + function referenceFn(InterpreterState memory, OperandV2, StackItem[] memory inputs) internal pure - returns (uint256[] memory outputs) + returns (StackItem[] memory outputs) { - outputs = new uint256[](1); - outputs[0] = inputs[0] > inputs[1] ? 1 : 0; + Float a = Float.wrap(StackItem.unwrap(inputs[0])); + Float b = Float.wrap(StackItem.unwrap(inputs[1])); + bool greaterThan = LibDecimalFloat.gt(a, b); + outputs = new StackItem[](1); + outputs[0] = StackItem.wrap(bytes32(uint256(greaterThan ? 1 : 0))); } } diff --git a/src/lib/op/math/LibOpDiv.sol b/src/lib/op/math/LibOpDiv.sol index e7abf5acf..a3f60e6d9 100644 --- a/src/lib/op/math/LibOpDiv.sol +++ b/src/lib/op/math/LibOpDiv.sol @@ -21,8 +21,7 @@ library LibOpDiv { } /// div - /// 18 decimal fixed point division with implied overflow checks from PRB - /// Math. + /// 18 decimal floating point division. function run(InterpreterState memory, OperandV2 operand, Pointer stackTop) internal pure returns (Pointer) { Float a; Float b; diff --git a/test/src/lib/op/logic/LibOpGreaterThan.t.sol b/test/src/lib/op/logic/LibOpGreaterThan.t.sol new file mode 100644 index 000000000..99d6cf6c4 --- /dev/null +++ b/test/src/lib/op/logic/LibOpGreaterThan.t.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: CAL +pragma solidity =0.8.25; + +import {OpTest} from "test/abstract/OpTest.sol"; +import {LibOpGreaterThan} from "src/lib/op/logic/LibOpGreaterThan.sol"; +import {IntegrityCheckState, BadOpInputsLength} from "src/lib/integrity/LibIntegrityCheck.sol"; +import { + IInterpreterV4, + OperandV2, + SourceIndexV2, + FullyQualifiedNamespace +} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {InterpreterState} from "src/lib/state/LibInterpreterState.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; + +contract LibOpGreaterThanTest is OpTest { + /// Directly test the integrity logic of LibOpGreaterThan. No matter the + /// operand inputs, the calc inputs must be 2, and the calc outputs must be + /// 1. + function testOpGreaterThanIntegrityHappy( + 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) = + LibOpGreaterThan.integrity(state, LibOperand.build(inputs, outputs, operandData)); + + // The inputs from the operand are ignored. The op is always 2 inputs. + assertEq(calcInputs, 2); + assertEq(calcOutputs, 1); + } + + /// Directly test the runtime logic of LibOpGreaterThan. + function testOpGreaterThanRun(StackItem input1, StackItem input2) external view { + InterpreterState memory state = opTestDefaultInterpreterState(); + StackItem[] memory inputs = new StackItem[](2); + inputs[0] = input1; + inputs[1] = input2; + OperandV2 operand = LibOperand.build(uint8(inputs.length), 1, 0); + opReferenceCheck( + state, operand, LibOpGreaterThan.referenceFn, LibOpGreaterThan.integrity, LibOpGreaterThan.run, inputs + ); + } + + /// Test the eval of greater than opcode parsed from a string. Tests 2 + /// inputs. Both inputs are 0. + function testOpGreaterThanEval2ZeroInputs() external view { + checkHappy("_: greater-than(0 0);", 0, ""); + } + + /// Test the eval of greater than opcode parsed from a string. Tests 2 + /// inputs. The first input is 0, the second input is 1. + function testOpGreaterThanEval2InputsFirstZeroSecondOne() external view { + checkHappy("_: greater-than(0 1);", 0, ""); + } + + /// Test the eval of greater than opcode parsed from a string. Tests 2 + /// inputs. The first input is 1, the second input is 0. + function testOpGreaterThanEval2InputsFirstOneSecondZero() external view { + checkHappy("_: greater-than(1 0);", bytes32(uint256(1)), ""); + } + + /// Test the eval of greater than opcode parsed from a string. Tests 2 + /// inputs. Both inputs are 1. + function testOpGreaterThanEval2InputsBothOne() external view { + checkHappy("_: greater-than(1 1);", 0, ""); + } + + /// Test 1.1 gt 1.2, which should return 0. + function testOpGreaterThanEval1_1Gt1_2() external view { + checkHappy("_: greater-than(1.1 1.2);", 0, ""); + } + + /// Test 1.0 gt 1 which should return 0. + function testOpGreaterThanEval1_0Gt1() external view { + checkHappy("_: greater-than(1.0 1);", 0, ""); + } + + /// Test -1.1 gt -1.2, which should return 1. + function testOpGreaterThanEvalNeg1_1GtNeg1_2() external view { + checkHappy("_: greater-than(-1.1 -1.2);", bytes32(uint256(1)), ""); + } + + /// Test -1 gt 0, which should return 0. + function testOpGreaterThanEvalNeg1Gt0() external view { + checkHappy("_: greater-than(-1 0);", 0, ""); + } + + /// Test that a greater than without inputs fails integrity check. + function testOpGreaterThanEvalFail0Inputs() public { + vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 0, 2, 0)); + bytes memory bytecode = iDeployer.parse2("_: greater-than();"); + (bytecode); + } + + /// Test that a greater than with 1 input fails integrity check. + function testOpGreaterThanEvalFail1Input() public { + vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 1, 2, 1)); + bytes memory bytecode = iDeployer.parse2("_: greater-than(0x00);"); + (bytecode); + } + + /// Test that a greater than with 3 inputs fails integrity check. + function testOpGreaterThanEvalFail3Inputs() public { + vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 3, 2, 3)); + bytes memory bytecode = iDeployer.parse2("_: greater-than(0x00 0x00 0x00);"); + (bytecode); + } + + function testOpGreaterThanZeroOutputs() external { + checkBadOutputs(": greater-than(1 2);", 2, 1, 0); + } + + function testOpGreaterThanTwoOutputs() external { + checkBadOutputs("_ _: greater-than(1 2);", 2, 1, 2); + } +} diff --git a/test/src/lib/op/logic/LibOpGreaterThanNP.t.sol b/test/src/lib/op/logic/LibOpGreaterThanNP.t.sol deleted file mode 100644 index 6d069b5be..000000000 --- a/test/src/lib/op/logic/LibOpGreaterThanNP.t.sol +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-License-Identifier: CAL -pragma solidity =0.8.25; - -// // import {OpTest} from "test/abstract/OpTest.sol"; -// // import {LibContext} from "rain.interpreter.interface/lib/caller/LibContext.sol"; -// // import {LibOpGreaterThanNP} from "src/lib/op/logic/LibOpGreaterThanNP.sol"; -// // import {IntegrityCheckState, BadOpInputsLength} from "src/lib/integrity/LibIntegrityCheck.sol"; -// // import { -// // IInterpreterV4, -// // Operand, -// // SourceIndexV2, -// // FullyQualifiedNamespace -// // } from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -// // import {InterpreterState} from "src/lib/state/LibInterpreterState.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"; - -// contract LibOpGreaterThanNPTest is OpTest { -// /// Directly test the integrity logic of LibOpGreaterThanNP. No matter the -// /// operand inputs, the calc inputs must be 2, and the calc outputs must be -// /// 1. -// function testOpGreaterThanNPIntegrityHappy( -// 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) = -// LibOpGreaterThanNP.integrity(state, LibOperand.build(inputs, outputs, operandData)); - -// // // The inputs from the operand are ignored. The op is always 2 inputs. -// // assertEq(calcInputs, 2); -// // assertEq(calcOutputs, 1); -// // } - -// /// Directly test the runtime logic of LibOpGreaterThanNP. -// function testOpGreaterThanNPRun(uint256 input1, uint256 input2) external view { -// InterpreterState memory state = opTestDefaultInterpreterState(); -// uint256[] memory inputs = new uint256[](2); -// inputs[0] = input1; -// inputs[1] = input2; -// Operand operand = LibOperand.build(uint8(inputs.length), 1, 0); -// opReferenceCheck( -// state, operand, LibOpGreaterThanNP.referenceFn, LibOpGreaterThanNP.integrity, LibOpGreaterThanNP.run, inputs -// ); -// } - -// // /// Test the eval of greater than opcode parsed from a string. Tests 2 -// // /// inputs. Both inputs are 0. -// // function testOpGreaterThanNPEval2ZeroInputs() external { -// // checkHappy("_: greater-than(0 0);", 0, ""); -// // } - -// // /// Test the eval of greater than opcode parsed from a string. Tests 2 -// // /// inputs. The first input is 0, the second input is 1. -// // function testOpGreaterThanNPEval2InputsFirstZeroSecondOne() external { -// // checkHappy("_: greater-than(0 1);", 0, ""); -// // } - -// // /// Test the eval of greater than opcode parsed from a string. Tests 2 -// // /// inputs. The first input is 1, the second input is 0. -// // function testOpGreaterThanNPEval2InputsFirstOneSecondZero() external { -// // checkHappy("_: greater-than(1 0);", 1, ""); -// // } - -// // /// Test the eval of greater than opcode parsed from a string. Tests 2 -// // /// inputs. Both inputs are 1. -// // function testOpGreaterThanNPEval2InputsBothOne() external { -// // checkHappy("_: greater-than(1 1);", 0, ""); -// // } - -// // /// Test that a greater than without inputs fails integrity check. -// // function testOpGreaterThanNPEvalFail0Inputs() public { -// // vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 0, 2, 0)); -// // bytes memory bytecode = iDeployer.parse2("_: greater-than();"); -// // (bytecode); -// // } - -// // /// Test that a greater than with 1 input fails integrity check. -// // function testOpGreaterThanNPEvalFail1Input() public { -// // vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 1, 2, 1)); -// // bytes memory bytecode = iDeployer.parse2("_: greater-than(0x00);"); -// // (bytecode); -// // } - -// // /// Test that a greater than with 3 inputs fails integrity check. -// // function testOpGreaterThanNPEvalFail3Inputs() public { -// // vm.expectRevert(abi.encodeWithSelector(BadOpInputsLength.selector, 3, 2, 3)); -// // bytes memory bytecode = iDeployer.parse2("_: greater-than(0x00 0x00 0x00);"); -// // (bytecode); -// // } - -// // function testOpGreaterThanNPZeroOutputs() external { -// // checkBadOutputs(": greater-than(1 2);", 2, 1, 0); -// // } - -// // function testOpGreaterThanNPTwoOutputs() external { -// // checkBadOutputs("_ _: greater-than(1 2);", 2, 1, 2); -// // } -// // }