diff --git a/.gas-snapshot b/.gas-snapshot index 0c5bfcbff..4b90960e8 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,383 +1,400 @@ -BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2054, μ: 320946, ~: 320946) -BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2054, μ: 678755, ~: 678755) -LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 46436) -LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 7929) -LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 7911) -LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2054, μ: 83782, ~: 83782) -LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2054, μ: 9769, ~: 10284) -LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2054, μ: 8886, ~: 9401) -LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2054, μ: 43080, ~: 42666) -LibOpAddTest:testOpAddEval2InputsHappy() (gas: 160651) -LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57663) -LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 102979) -LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 198924) -LibOpAddTest:testOpAddEval2InputsUnhappy() (gas: 103121) -LibOpAddTest:testOpAddEval3InputsHappy() (gas: 309434) -LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 708615) -LibOpAddTest:testOpAddEvalOneInput() (gas: 36586) -LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91465) -LibOpAddTest:testOpAddEvalTwoOutput() (gas: 43969) -LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30206) -LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 42987) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2054, μ: 18200, ~: 18427) -LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13871, ~: 13765) -LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13868, ~: 13762) -LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2049, μ: 52105, ~: 52460) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 207724) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57816) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58544) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstZeroSecondOne() (gas: 58546) -LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57861) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30609) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34929) -LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43427) -LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19699, ~: 19947) -LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2054, μ: 16674, ~: 16674) -LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41587) -LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40518) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 719503) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13751, ~: 13664) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2054, μ: 16671, ~: 16671) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18194) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35743) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45512) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41316) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30765) -LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40290) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEval() (gas: 718209) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18135) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35684) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45410) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41234) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30662) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40231) -LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13750, ~: 13663) -LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2054, μ: 16628, ~: 16628) -LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2054, μ: 50948, ~: 50720) -LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 35156) -LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 31457) -LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 30448) -LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19649, ~: 19905) -LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2054, μ: 20839, ~: 20508) -LibOpCallTest:testCallTraceInnerOnly() (gas: 62973) -LibOpCallTest:testCallTraceOuterOnly() (gas: 45543) -LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2052, μ: 39910, ~: 38502) -LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2054, μ: 59319, ~: 59049) -LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2049, μ: 59170, ~: 59680) -LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 71887) -LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 65502) -LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 350365) -LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2054, μ: 47011, ~: 47011) -LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19679, ~: 19944) -LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34330) -LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2054, μ: 17123, ~: 17123) -LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 31134) -LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 30083) -LibOpConstantTest:testOpConstantEvalNPE2E() (gas: 56058) -LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41503) -LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 19198, ~: 19098) -LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 40165, ~: 39896) -LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31642) -LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41582) -LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2054, μ: 52463, ~: 51854) -LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30258) -LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40210) -LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 106, μ: 6577560, ~: 5315832) -LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 106, μ: 6604442, ~: 5316013) -LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 106, μ: 6577704, ~: 5315976) -LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 106, μ: 6564293, ~: 5266480) -LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 106, μ: 75328, ~: 73756) -LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2054, μ: 48204, ~: 48204) -LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 14502, ~: 14415) -LibOpContextNPTest:testOpContextNPOneInput() (gas: 41581) -LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 106, μ: 10364582, ~: 7556896) -LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 106, μ: 10714932, ~: 8099396) -LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 106, μ: 10724094, ~: 8100387) -LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46445) -LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37249) -LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36197) -LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2054, μ: 74388, ~: 85258) -LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13749, ~: 13662) -LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2054, μ: 16698, ~: 16698) -LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41128) -LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 37000) -LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31264) -LibOpCtPopNPTest:testOpCtPopNPZeroOutputs() (gas: 35949) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalHappy() (gas: 835187) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 46957) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42809) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37139) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41756) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2054, μ: 22133, ~: 22304) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2054, μ: 41505, ~: 41549) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2054, μ: 35696, ~: 35466) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2054, μ: 21009, ~: 20814) +BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2055, μ: 320946, ~: 320946) +BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2055, μ: 678755, ~: 678755) +LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 48524) +LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 8154) +LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 8136) +LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2055, μ: 84007, ~: 84007) +LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2055, μ: 9770, ~: 10284) +LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2055, μ: 8887, ~: 9401) +LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2055, μ: 43067, ~: 42630) +LibOpAddTest:testOpAddEval2InputsHappy() (gas: 160672) +LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 57669) +LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 102991) +LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 198952) +LibOpAddTest:testOpAddEval2InputsUnhappy() (gas: 103133) +LibOpAddTest:testOpAddEval3InputsHappy() (gas: 309464) +LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 708702) +LibOpAddTest:testOpAddEvalOneInput() (gas: 36592) +LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91501) +LibOpAddTest:testOpAddEvalTwoOutput() (gas: 43976) +LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30212) +LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 42994) +LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18199, ~: 18427) +LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13868, ~: 13733) +LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13865, ~: 13730) +LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2049, μ: 52153, ~: 51723) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 207750) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57822) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58551) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstZeroSecondOne() (gas: 58553) +LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57867) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30615) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34935) +LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43434) +LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19696, ~: 19966) +LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2055, μ: 16674, ~: 16674) +LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41593) +LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40524) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 719611) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13748, ~: 13661) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2055, μ: 16671, ~: 16671) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18200) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35749) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45518) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41322) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30771) +LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40296) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEval() (gas: 718317) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18141) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35690) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45416) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41240) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30668) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40237) +LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13747, ~: 13660) +LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2055, μ: 16628, ~: 16628) +LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2055, μ: 50954, ~: 50726) +LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 35162) +LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 31463) +LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 30454) +LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19653, ~: 19915) +LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2055, μ: 20845, ~: 20508) +LibOpCallTest:testCallTraceInnerOnly() (gas: 62979) +LibOpCallTest:testCallTraceOuterOnly() (gas: 45549) +LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2054, μ: 39770, ~: 38479) +LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2055, μ: 59250, ~: 58566) +LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2051, μ: 58500, ~: 58712) +LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 71893) +LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 65508) +LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 350425) +LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2055, μ: 47017, ~: 47017) +LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19677, ~: 19944) +LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34336) +LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2055, μ: 17123, ~: 17123) +LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 31140) +LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 30089) +LibOpConstantTest:testOpConstantEvalNPE2E() (gas: 56065) +LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41509) +LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 19197, ~: 19102) +LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 40155, ~: 39809) +LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31648) +LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41588) +LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2055, μ: 52463, ~: 51854) +LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30264) +LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40216) +LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 107, μ: 6552666, ~: 5288363) +LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 107, μ: 6579298, ~: 5288544) +LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 107, μ: 6552810, ~: 5288507) +LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 107, μ: 6539525, ~: 5244353) +LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 107, μ: 75273, ~: 72967) +LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2055, μ: 48210, ~: 48210) +LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 14499, ~: 14412) +LibOpContextNPTest:testOpContextNPOneInput() (gas: 41587) +LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 107, μ: 10315057, ~: 7525557) +LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 107, μ: 10666713, ~: 8068784) +LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 107, μ: 10675800, ~: 8069699) +LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46451) +LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37255) +LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36203) +LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2055, μ: 74155, ~: 85238) +LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13746, ~: 13659) +LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2055, μ: 16698, ~: 16698) +LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41134) +LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 37006) +LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31270) +LibOpCtPopNPTest:testOpCtPopNPZeroOutputs() (gas: 35955) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalHappy() (gas: 835295) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 46963) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42815) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37145) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41762) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2055, μ: 22124, ~: 22237) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2055, μ: 41495, ~: 41545) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 35686, ~: 35423) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2055, μ: 21004, ~: 20814) LibOpDivTest:testDebugOpDivRun() (gas: 13482) -LibOpDivTest:testOpDivEvalOneInput() (gas: 126279) -LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91441) -LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 337295) -LibOpDivTest:testOpDivEvalThreeInputsUnhappy() (gas: 211872) -LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 62998) -LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 295677) -LibOpDivTest:testOpDivEvalTwoInputsUnhappy() (gas: 143594) -LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 56393) -LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41209) -LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30162) -LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40205) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2054, μ: 18252, ~: 18417) -LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13824, ~: 13718) -LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13847, ~: 13741) -LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2049, μ: 37612, ~: 33725) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55840) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2054, μ: 72127, ~: 72033) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37096) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18599) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43627) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50659) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31102) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49635) -LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13713, ~: 13626) -LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2054, μ: 27668, ~: 27579) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2052, μ: 66046, ~: 66046) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37201) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18657) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2049, μ: 62319, ~: 62319) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49528) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44397) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31161) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43329) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13692, ~: 13605) +LibOpDivTest:testOpDivEvalOneInput() (gas: 126303) +LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91477) +LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 337335) +LibOpDivTest:testOpDivEvalThreeInputsUnhappy() (gas: 211898) +LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 63004) +LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 295717) +LibOpDivTest:testOpDivEvalTwoInputsUnhappy() (gas: 143613) +LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 56399) +LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41216) +LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30168) +LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40212) +LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18250, ~: 18486) +LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13821, ~: 13686) +LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13844, ~: 13709) +LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2049, μ: 37632, ~: 33610) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55846) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2055, μ: 72125, ~: 72039) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37102) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18606) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43633) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50665) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31108) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49641) +LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13710, ~: 13623) +LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2055, μ: 27669, ~: 27579) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2051, μ: 66052, ~: 66052) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37207) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18664) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2050, μ: 62325, ~: 62325) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49534) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44403) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31167) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43335) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13689, ~: 13602) LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2053, μ: 28009, ~: 28009) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalHappy() (gas: 55257) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalOperandDisallowed() (gas: 18360) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoInputs() (gas: 43424) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoOutputs() (gas: 37672) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalZeroInputs() (gas: 30918) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalZeroOutputs() (gas: 36618) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13751, ~: 13664) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPRun(address,address,uint16) (runs: 2054, μ: 23614, ~: 23614) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30688) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 34976) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44465) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18190) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2054, μ: 96459, ~: 92419) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35434) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44930) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31135) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39723) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2054, μ: 13765, ~: 13701) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2054, μ: 24201, ~: 24201) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40769) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 832412) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42032) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 51779) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 47605) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37053) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 46601) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2054, μ: 18144, ~: 18137) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2054, μ: 41713, ~: 41757) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2054, μ: 35825, ~: 35595) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2054, μ: 21396, ~: 21212) -LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34416) -LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33941) -LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 166173) -LibOpEnsureTest:testOpEnsureEvalOne() (gas: 34622) -LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45340) -LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 111821) -LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 17041) -LibOpEnsureTest:testOpEnsureEvalZero() (gas: 29618) -LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19726, ~: 19970) -LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13815, ~: 13709) -LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39576) -LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2050, μ: 18144, ~: 18151) -LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 339088) -LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 57628) -LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 58313) -LibOpEqualToNPTest:testOpEqualToEval2InputsFirstZeroSecondOne() (gas: 58316) -LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 57651) -LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 30042) -LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 34353) -LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 42777) -LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19678, ~: 19944) -LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2054, μ: 17543, ~: 17466) -LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 41042) -LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 39951) -LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 99742) -LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115312) -LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2054, μ: 34954, ~: 34896) -LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2054, μ: 53489, ~: 53581) -LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2054, μ: 117794, ~: 117661) -LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 308586) -LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57464) -LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 522445) -LibOpGetTest:testLibOpGetEvalStoreAndSetAndGet() (gas: 255487) -LibOpGetTest:testLibOpGetEvalStoreThenGet() (gas: 475940) -LibOpGetTest:testLibOpGetEvalThreeInputs() (gas: 44978) -LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39735) -LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 35328) -LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29751) -LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 34298) -LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 20564, ~: 20799) -LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2054, μ: 19633, ~: 19638) -LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2054, μ: 47596, ~: 47610) -LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2054, μ: 49830, ~: 49835) -LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2054, μ: 51422, ~: 51427) -LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2054, μ: 24664, ~: 24668) -LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58562) -LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 61162) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57877) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 58607) -LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 58626) -LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 57898) -LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 30410) -LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34731) -LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43072) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58659) -LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61363) -LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19695, ~: 19956) -LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2054, μ: 17418, ~: 17347) -LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41828) -LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40780) -LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 46279) -LibOpHashNPTest:testOpHashNPEval1Input() (gas: 54887) -LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 63230) -LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 63904) -LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 78457) -LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19716, ~: 19981) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2052, μ: 59221, ~: 59221) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18827) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2049, μ: 55461, ~: 55461) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43855) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38217) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 31350) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37189) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13733, ~: 13646) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2054, μ: 27211, ~: 27211) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalHappy() (gas: 55263) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalOperandDisallowed() (gas: 18366) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoInputs() (gas: 43430) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoOutputs() (gas: 37678) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalZeroInputs() (gas: 30924) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalZeroOutputs() (gas: 36624) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13748, ~: 13661) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerOfNPRun(address,address,uint16) (runs: 2055, μ: 23614, ~: 23614) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30694) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 34982) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44471) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18197) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2055, μ: 96390, ~: 92399) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35440) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44936) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31141) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39730) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 13762, ~: 13698) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2055, μ: 24201, ~: 24201) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40776) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 832520) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42038) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 51785) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 47611) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37059) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 46607) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2055, μ: 18149, ~: 18135) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2055, μ: 41695, ~: 41753) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 35815, ~: 35552) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2055, μ: 21398, ~: 21212) +LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34422) +LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33947) +LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 166193) +LibOpEnsureTest:testOpEnsureEvalOne() (gas: 34628) +LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45346) +LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 111833) +LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 17047) +LibOpEnsureTest:testOpEnsureEvalZero() (gas: 29624) +LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19720, ~: 20002) +LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13812, ~: 13677) +LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39583) +LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2051, μ: 18144, ~: 18151) +LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 339133) +LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 57634) +LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 58320) +LibOpEqualToNPTest:testOpEqualToEval2InputsFirstZeroSecondOne() (gas: 58323) +LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 57657) +LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 30048) +LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 34359) +LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 42783) +LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19675, ~: 19925) +LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2055, μ: 17541, ~: 17466) +LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 41048) +LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 39957) +LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 99749) +LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115319) +LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2054, μ: 34958, ~: 34884) +LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2054, μ: 53463, ~: 53472) +LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2055, μ: 117800, ~: 117748) +LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 308623) +LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57488) +LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 522490) +LibOpGetTest:testLibOpGetEvalStoreAndSetAndGet() (gas: 255505) +LibOpGetTest:testLibOpGetEvalStoreThenGet() (gas: 475988) +LibOpGetTest:testLibOpGetEvalThreeInputs() (gas: 44984) +LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39742) +LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 35334) +LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29757) +LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 34304) +LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 20559, ~: 20799) +LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2055, μ: 19634, ~: 19638) +LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2055, μ: 47596, ~: 47610) +LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2055, μ: 49831, ~: 49835) +LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2055, μ: 51423, ~: 51427) +LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2055, μ: 24664, ~: 24668) +LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58568) +LibOpGreaterThanTest:testOpGreaterThanEval1_1Gt1_2() (gas: 61169) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsBothOne() (gas: 57883) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstOneSecondZero() (gas: 58614) +LibOpGreaterThanTest:testOpGreaterThanEval2InputsFirstZeroSecondOne() (gas: 58633) +LibOpGreaterThanTest:testOpGreaterThanEval2ZeroInputs() (gas: 57904) +LibOpGreaterThanTest:testOpGreaterThanEvalFail0Inputs() (gas: 30416) +LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34737) +LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43078) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58666) +LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61370) +LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19683, ~: 19923) +LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2055, μ: 17419, ~: 17347) +LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41835) +LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40787) +LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 46285) +LibOpHashNPTest:testOpHashNPEval1Input() (gas: 54893) +LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 63237) +LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 63910) +LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 78464) +LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19711, ~: 19956) LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2049, μ: 19459, ~: 19563) -LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30819) -LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29445) -LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 58383) -LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57633) -LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19702, ~: 19956) -LibOpLessThanTest:testOpLessThanNP1_0Lt1() (gas: 58386) -LibOpLessThanTest:testOpLessThanNP1_1Lt1_2() (gas: 60875) -LibOpLessThanTest:testOpLessThanNPEval2InputsBothOne() (gas: 57657) -LibOpLessThanTest:testOpLessThanNPEval2InputsFirstOneSecondZero() (gas: 58340) -LibOpLessThanTest:testOpLessThanNPMinus1Lt0() (gas: 58438) -LibOpLessThanTest:testOpLessThanNPMinus1_1LtMinus1_2() (gas: 61099) -LibOpLessThanTest:testOpLessThanNPTwoOutputs() (gas: 41914) -LibOpLessThanTest:testOpLessThanNPZeroOutputs() (gas: 40030) -LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2054, μ: 17424, ~: 17353) -LibOpLessThanTest:testOpLessThanToNPEvalFail0Inputs() (gas: 30145) -LibOpLessThanTest:testOpLessThanToNPEvalFail1Input() (gas: 34435) -LibOpLessThanTest:testOpLessThanToNPEvalFail3Inputs() (gas: 42815) -LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 879918) -LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 2028801) -LibOpMaxTest:testOpMaxEvalOneInput() (gas: 129016) -LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 58861) -LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40725) -LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 30164) -LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2054, μ: 18205, ~: 18442) -LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13825, ~: 13719) -LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13847, ~: 13741) -LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2049, μ: 26611, ~: 26441) -LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 47274) -LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 35103) -LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19664, ~: 19924) +LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30825) +LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29451) +LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 58390) +LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57639) +LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19697, ~: 19979) +LibOpLessThanTest:testOpLessThanNP1_0Lt1() (gas: 58392) +LibOpLessThanTest:testOpLessThanNP1_1Lt1_2() (gas: 60882) +LibOpLessThanTest:testOpLessThanNPEval2InputsBothOne() (gas: 57663) +LibOpLessThanTest:testOpLessThanNPEval2InputsFirstOneSecondZero() (gas: 58347) +LibOpLessThanTest:testOpLessThanNPMinus1Lt0() (gas: 58445) +LibOpLessThanTest:testOpLessThanNPMinus1_1LtMinus1_2() (gas: 61106) +LibOpLessThanTest:testOpLessThanNPTwoOutputs() (gas: 41921) +LibOpLessThanTest:testOpLessThanNPZeroOutputs() (gas: 40036) +LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2055, μ: 17423, ~: 17353) +LibOpLessThanTest:testOpLessThanToNPEvalFail0Inputs() (gas: 30151) +LibOpLessThanTest:testOpLessThanToNPEvalFail1Input() (gas: 34441) +LibOpLessThanTest:testOpLessThanToNPEvalFail3Inputs() (gas: 42821) +LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 880041) +LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 2029060) +LibOpMaxTest:testOpMaxEvalOneInput() (gas: 129040) +LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 58885) +LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40731) +LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 30170) +LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18205, ~: 18365) +LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13822, ~: 13687) +LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13844, ~: 13709) +LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2049, μ: 26607, ~: 26371) +LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 47280) +LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 35109) +LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19652, ~: 19883) LibOpMaxUint256Test:testOpMaxUint256Run() (gas: 15997) -LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 31886) -LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 30791) -LibOpMaxValueTest:testOpMaxValueEval() (gas: 46890) -LibOpMaxValueTest:testOpMaxValueEvalFail() (gas: 34411) -LibOpMaxValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19658, ~: 19902) +LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 31892) +LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 30797) +LibOpMaxValueTest:testOpMaxValueEval() (gas: 46896) +LibOpMaxValueTest:testOpMaxValueEvalFail() (gas: 34417) +LibOpMaxValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19642, ~: 19877) LibOpMaxValueTest:testOpMaxValueRun() (gas: 16217) -LibOpMaxValueTest:testOpMaxValueTwoOutputs() (gas: 31260) -LibOpMaxValueTest:testOpMaxValueZeroOutputs() (gas: 30165) -LibOpMinTest:testOpMinEval2InputsHappy() (gas: 972692) -LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3458165) -LibOpMinTest:testOpMinEvalOneInput() (gas: 126180) -LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 58884) -LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30144) -LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2054, μ: 18281, ~: 18504) -LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13848, ~: 13742) -LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13825, ~: 13719) -LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2049, μ: 26546, ~: 26627) -LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13826, ~: 13720) -LibOpMulTest:testOpMulEvalOneInput() (gas: 126214) -LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91463) -LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 743606) -LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 60796) -LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 522811) -LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 54348) -LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30207) -LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2054, μ: 18245, ~: 18477) -LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13869, ~: 13763) -LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2049, μ: 29013, ~: 26565) -LibOpMulTest:testOpMulTwoOutputs() (gas: 40746) -LibOpMulTest:testOpMulZeroOutputs() (gas: 39700) -LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2054, μ: 17661, ~: 17665) -LibOpSetTest:testLibOpSetEvalOneInput() (gas: 34186) -LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39822) -LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 55979) -LibOpSetTest:testLibOpSetEvalSetTwice() (gas: 78228) -LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44619) -LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 258419) -LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40444) -LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 29366) -LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 20445, ~: 20711) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 878718) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128089) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44441) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40325) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34600) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39250) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2052, μ: 19757, ~: 19690) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2054, μ: 35790, ~: 35560) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2054, μ: 41998, ~: 42483) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2053, μ: 16833, ~: 16833) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1053606) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 128677) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 105, μ: 19715, ~: 19283) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 106, μ: 36865, ~: 37164) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 106, μ: 40691, ~: 41177) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2054, μ: 16836, ~: 16836) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44565) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40385) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34659) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39334) -LibOpStackNPTest:testOpStackEval() (gas: 65307) -LibOpStackNPTest:testOpStackEvalSeveral() (gas: 87145) -LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2054, μ: 18898, ~: 18656) -LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2054, μ: 41437, ~: 41563) -LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 39329) -LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 42989) -LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 106, μ: 2091169, ~: 1906210) -LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 37874) -LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41499) -LibOpSubTest:testOpSubEvalOneInput() (gas: 128837) -LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226122) -LibOpSubTest:testOpSubEvalTwoInputs() (gas: 342240) -LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30125) -LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2054, μ: 18249, ~: 18443) -LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13825, ~: 13719) -LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2054, μ: 13826, ~: 13720) -LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2049, μ: 55646, ~: 54776) -LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 65803) -LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 58720) -LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 56595) -LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2054, μ: 84976, ~: 84651) -LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2054, μ: 19672, ~: 19939) -LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2054, μ: 20596, ~: 20364) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56641) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2054, μ: 70270, ~: 70270) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37935) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19247) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 44275) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51307) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31728) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50283) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13773, ~: 13686) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2054, μ: 24718, ~: 24718) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2054, μ: 63330, ~: 63330) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37974) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19305) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50176) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 45045) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31831) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 44000) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2054, μ: 13796, ~: 13709) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2054, μ: 24168, ~: 24168) +LibOpMaxValueTest:testOpMaxValueTwoOutputs() (gas: 31266) +LibOpMaxValueTest:testOpMaxValueZeroOutputs() (gas: 30171) +LibOpMinTest:testOpMinEval2InputsHappy() (gas: 972829) +LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3458613) +LibOpMinTest:testOpMinEvalOneInput() (gas: 126204) +LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 58908) +LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30150) +LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18278, ~: 18516) +LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13845, ~: 13710) +LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13822, ~: 13687) +LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2049, μ: 26539, ~: 26627) +LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13823, ~: 13688) +LibOpMulTest:testOpMulEvalOneInput() (gas: 126238) +LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91499) +LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 743697) +LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 60803) +LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 522883) +LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 54354) +LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30213) +LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18243, ~: 18470) +LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13866, ~: 13731) +LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2049, μ: 28977, ~: 26565) +LibOpMulTest:testOpMulTwoOutputs() (gas: 40752) +LibOpMulTest:testOpMulZeroOutputs() (gas: 39706) +LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2055, μ: 17660, ~: 17665) +LibOpSetTest:testLibOpSetEvalOneInput() (gas: 34192) +LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39829) +LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 56003) +LibOpSetTest:testLibOpSetEvalSetTwice() (gas: 78234) +LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44625) +LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 258452) +LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40451) +LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 29372) +LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 20441, ~: 20691) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 878842) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128113) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44447) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40331) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34606) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39256) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2054, μ: 19758, ~: 19739) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2055, μ: 35780, ~: 35518) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 41983, ~: 42651) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2054, μ: 16833, ~: 16833) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1053755) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 128703) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 106, μ: 19584, ~: 18955) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 107, μ: 36662, ~: 36899) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 107, μ: 40506, ~: 41169) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2055, μ: 16836, ~: 16836) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44571) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40391) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34665) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39340) +LibOpStackNPTest:testOpStackEval() (gas: 65313) +LibOpStackNPTest:testOpStackEvalSeveral() (gas: 87151) +LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2055, μ: 18894, ~: 18656) +LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2055, μ: 41427, ~: 41563) +LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 39336) +LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 42996) +LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 107, μ: 2082715, ~: 1866817) +LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 37881) +LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41506) +LibOpSubTest:testOpSubEvalOneInput() (gas: 128861) +LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226150) +LibOpSubTest:testOpSubEvalTwoInputs() (gas: 342286) +LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30131) +LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2055, μ: 18244, ~: 18476) +LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13822, ~: 13687) +LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2055, μ: 13823, ~: 13688) +LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2049, μ: 55784, ~: 55579) +LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 65815) +LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 58732) +LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 56607) +LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2055, μ: 84987, ~: 84663) +LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2055, μ: 19670, ~: 19920) +LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2055, μ: 20591, ~: 20364) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56648) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2055, μ: 70276, ~: 70276) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37942) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19254) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 44281) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51313) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31734) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50289) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13770, ~: 13683) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2055, μ: 24718, ~: 24718) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2055, μ: 63336, ~: 63336) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37981) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19312) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50182) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 45051) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31837) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 44006) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13793, ~: 13706) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2055, μ: 24168, ~: 24168) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2055, μ: 56439, ~: 56439) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19475) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 44503) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38877) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 32020) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37804) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2055, μ: 13793, ~: 13706) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2055, μ: 23332, ~: 23332) LibParseCommentsTest:testParseCommentAfterSources() (gas: 69689) LibParseCommentsTest:testParseCommentBetweenSources() (gas: 69745) LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 46231) @@ -430,7 +447,7 @@ LibParseInputsOnlyGasTest:testParseGasInputsOnly09() (gas: 52192) LibParseInputsOnlyTest:testParseInputsOnlyMultiple() (gas: 52451) LibParseInputsOnlyTest:testParseInputsOnlySingle() (gas: 51541) LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexBounds() (gas: 18858) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2054, μ: 44993, ~: 43991) +LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2055, μ: 44982, ~: 43990) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE() (gas: 11195) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE0() (gas: 11173) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert() (gas: 11218) @@ -449,7 +466,7 @@ LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegative LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNonDecimal() (gas: 11150) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert0() (gas: 35135) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert1() (gas: 35045) -LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2054, μ: 27340, ~: 37882) +LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2055, μ: 27345, ~: 37882) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal00() (gas: 56730) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal01() (gas: 63896) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal02() (gas: 70152) @@ -468,23 +485,23 @@ LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex00() (gas: 55856) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex01() (gas: 61572) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex02() (gas: 66623) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHexUint256Max() (gas: 72869) -LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2054, μ: 16497, ~: 16416) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2053, μ: 30121, ~: 29997) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2054, μ: 19025, ~: 18940) +LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2055, μ: 16496, ~: 16416) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2054, μ: 30117, ~: 29992) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2055, μ: 19024, ~: 18937) LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2048, μ: 31901, ~: 31390) LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2050, μ: 13482, ~: 13384) LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2050, μ: 24343, ~: 24267) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 54552) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 5643) LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 100, μ: 68659, ~: 68371) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 105, μ: 65812, ~: 65240) +LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 106, μ: 65739, ~: 65197) LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 100, μ: 69407, ~: 69511) -LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 106, μ: 61719, ~: 61825) +LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 107, μ: 61709, ~: 61825) LibParseLiteralStringTest:testParseStringLiteralSimple() (gas: 54654) -LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 102, μ: 75312, ~: 75835) +LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 103, μ: 75269, ~: 75822) LibParseLiteralSubParseableTest:testParseLiteralSubParseableBody() (gas: 64571) LibParseLiteralSubParseableTest:testParseLiteralSubParseableEmptyBody() (gas: 19630) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2053, μ: 89644, ~: 87750) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2054, μ: 89620, ~: 87745) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchEmpty() (gas: 10659) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosed() (gas: 10619) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace0() (gas: 10679) @@ -549,36 +566,36 @@ LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecon LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultThird() (gas: 55536) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnclosed() (gas: 52609) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnopened() (gas: 47193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2054, μ: 12114, ~: 12193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2054, μ: 13578, ~: 13436) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2054, μ: 10367, ~: 10410) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2054, μ: 11731, ~: 11562) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2054, μ: 8643, ~: 8700) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2054, μ: 11709, ~: 11953) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2054, μ: 35394, ~: 35566) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2055, μ: 12114, ~: 12193) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2055, μ: 13578, ~: 13436) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2055, μ: 10367, ~: 10410) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2055, μ: 11731, ~: 11562) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2055, μ: 8643, ~: 8700) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2055, μ: 11710, ~: 11953) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2055, μ: 35390, ~: 35566) LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1NoValues() (gas: 4679) -LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2054, μ: 34777, ~: 34873) +LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2055, μ: 34773, ~: 34873) LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedNoValues() (gas: 3219) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2054, μ: 9917, ~: 10039) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2054, μ: 11258, ~: 11074) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2054, μ: 35198, ~: 35470) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2055, μ: 9918, ~: 10039) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2055, μ: 11258, ~: 11074) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2055, μ: 35194, ~: 35470) LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultNoValues() (gas: 4625) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2054, μ: 8807, ~: 9089) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2054, μ: 11279, ~: 11085) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2054, μ: 35092, ~: 35364) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2055, μ: 8807, ~: 9089) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2055, μ: 11279, ~: 11085) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2055, μ: 35088, ~: 35364) LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1NoValues() (gas: 3891) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2054, μ: 8180, ~: 8208) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2054, μ: 9321, ~: 9095) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2054, μ: 9878, ~: 9901) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2054, μ: 11185, ~: 11003) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2054, μ: 35013, ~: 35145) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2054, μ: 35033, ~: 35165) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2055, μ: 8180, ~: 8217) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2055, μ: 9321, ~: 9095) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2055, μ: 9878, ~: 9901) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2055, μ: 11185, ~: 11003) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2055, μ: 35009, ~: 35145) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2055, μ: 35029, ~: 35165) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultNoValues() (gas: 4599) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2054, μ: 7613, ~: 7893) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2055, μ: 7613, ~: 7893) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoValues() (gas: 3266) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2054, μ: 7652, ~: 7936) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2054, μ: 9290, ~: 9499) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2054, μ: 9331, ~: 9540) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2055, μ: 7652, ~: 7936) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2055, μ: 9290, ~: 9499) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2055, μ: 9331, ~: 9540) LibParseOperandM1M1Test:testOperandM1M1Both() (gas: 57649) LibParseOperandM1M1Test:testOperandM1M1BothZero() (gas: 55824) LibParseOperandM1M1Test:testOperandM1M1Elided() (gas: 51802) @@ -590,13 +607,13 @@ LibParseOperandM1M1Test:testOperandM1M1SecondOverflow() (gas: 53500) LibParseOperandM1M1Test:testOperandM1M1SecondZero() (gas: 57377) LibParseOperandM1M1Test:testOperandM1M1Unclosed() (gas: 251386) LibParseOperandM1M1Test:testOperandM1M1Unopened() (gas: 49346) -LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 104, μ: 42975, ~: 42972) -LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 106, μ: 359232, ~: 355583) -LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 105, μ: 42852, ~: 42849) -LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 106, μ: 158560, ~: 159350) -LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 106, μ: 275913, ~: 269780) +LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 105, μ: 42975, ~: 42972) +LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 107, μ: 359106, ~: 354759) +LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 106, μ: 42852, ~: 42849) +LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 107, μ: 158284, ~: 159209) +LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 107, μ: 276153, ~: 269825) LibParseOperandParseOperandTest:testParseOperandTooManyValues() (gas: 54582) -LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 106, μ: 213869, ~: 212940) +LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 107, μ: 214045, ~: 215134) LibParseOperandParseOperandTest:testParseOperandUnclosed() (gas: 54141) LibParseOperandParseOperandTest:testParseOperandUnexpectedChars() (gas: 51419) LibParseOperandSingleFullTest:testOperandSingleFullElided() (gas: 51178) @@ -615,16 +632,16 @@ LibParseOperandSingleFullTest:testOperandSingleFullUint16MaxOverflow() (gas: 514 LibParseOperandSingleFullTest:testOperandSingleFullUnclosed() (gas: 49874) LibParseOperandSingleFullTest:testOperandSingleFullUnopened() (gas: 48263) LibParseOperandSingleFullTest:testOperandSingleFullZero() (gas: 54245) -LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2054, μ: 9457, ~: 9402) +LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2055, μ: 9458, ~: 9402) LibParseParseWordTest:testLibParseParseWordExamples() (gas: 26983) LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2050, μ: 6477, ~: 6257) -LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2052, μ: 9727, ~: 9660) -LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 106, μ: 8981, ~: 8974) -LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 106, μ: 16141, ~: 15980) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 105, μ: 173927, ~: 159831) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 105, μ: 356987, ~: 370845) +LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2053, μ: 9727, ~: 9660) +LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 107, μ: 8980, ~: 8938) +LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 107, μ: 16068, ~: 15977) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 106, μ: 173164, ~: 158943) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 106, μ: 355080, ~: 368921) LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserSpecificStrings() (gas: 254483) -LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 106, μ: 19776, ~: 17663) +LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 107, μ: 19715, ~: 17529) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored00() (gas: 8389) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored01() (gas: 8451) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored02() (gas: 8537) @@ -700,65 +717,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: 2054, μ: 20474, ~: 20346) -LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2054, μ: 17754, ~: 17677) -LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2054, μ: 313202, ~: 261007) -LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2054, μ: 17718, ~: 17641) -LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2054, μ: 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: 2055, μ: 20470, ~: 20340) +LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2055, μ: 17750, ~: 17668) +LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2055, μ: 313396, ~: 261608) +LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2055, μ: 17714, ~: 17632) +LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2055, μ: 3330, ~: 3330) LibParseStateConstantValueBloomTest:testConstantValueBloomAllBits() (gas: 45879) -LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2054, μ: 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: 2054, μ: 148326, ~: 144922) -LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2054, μ: 13350, ~: 13470) -LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2054, μ: 7158, ~: 7158) +LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2055, μ: 3447, ~: 3447) +LibParseStateExportSubParsersTest:testExportSubParsers((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2055, μ: 148377, ~: 144970) +LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2055, μ: 13350, ~: 13470) +LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2055, μ: 7158, ~: 7158) LibParseStateNewActiveSourcePointerTest:testPreUnalignedNewPointer() (gas: 9188) -LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2054, μ: 4802, ~: 4799) -LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2054, μ: 6477, ~: 6474) -LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2054, μ: 225590, ~: 226516) -LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2054, μ: 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: 2054, μ: 134909, ~: 132080) -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: 2054, μ: 17007, ~: 16935) -LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2054, μ: 44734, ~: 45094) -LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2054, μ: 15488, ~: 15508) +LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2055, μ: 4802, ~: 4799) +LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2055, μ: 6477, ~: 6474) +LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2055, μ: 225560, ~: 226516) +LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2055, μ: 7030, ~: 7030) +LibParseStatePushSubParserTest:testPushSubParserList((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address[]) (runs: 2055, μ: 134954, ~: 132196) +LibParseStatePushSubParserTest:testPushSubParserMultiple((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address,address,address) (runs: 2055, μ: 17004, ~: 16935) +LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2055, μ: 44722, ~: 45094) +LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2055, μ: 15484, ~: 15501) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParen() (gas: 48678) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested() (gas: 68700) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested2() (gas: 70248) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested3() (gas: 80148) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested4() (gas: 80013) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2053, μ: 46790, ~: 46791) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2054, μ: 52910, ~: 52956) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2054, μ: 46790, ~: 46791) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2055, μ: 52911, ~: 52956) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOF() (gas: 132631) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOL() (gas: 132654) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2053, μ: 46382, ~: 46382) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2054, μ: 46382, ~: 46382) LibParseUnexpectedLHSTest:testParseUnexpectedLHSUnderscoreTail() (gas: 134986) -LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2053, μ: 46615, ~: 46615) +LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2054, μ: 46615, ~: 46615) LibParseUnexpectedRHSTest:testParseUnexpectedRHSLeftParen() (gas: 46106) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 50722) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 56990) -LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2054, μ: 13230, ~: 13163) -LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2054, μ: 11433, ~: 11167) -RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 7447172) -RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 7456877) -RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2054, μ: 7454613, ~: 7454613) +LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2055, μ: 13230, ~: 13163) +LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2055, μ: 11433, ~: 11167) +RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 7535317) +RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 7545197) +RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2055, μ: 7542758, ~: 7542758) RainterpreterExpressionDeployerMetaTest:testRainterpreterExpressionDeployerExpectedConstructionMetaHash() (gas: 6221) -RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2054, μ: 2384681, ~: 2384681) -RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2054, μ: 3447551, ~: 3447551) -RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17220193) -RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10383826) -RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10387118) -RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3446557) -RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3451033) -RainterpreterParserPointersTest:testParserParseMeta() (gas: 271587) -RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 2388131) -RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 2160041) -RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 2159627) -RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 2158324) +RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2055, μ: 2463061, ~: 2463061) +RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2055, μ: 3453367, ~: 3453367) +RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17249288) +RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10401282) +RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10404574) +RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3452373) +RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3457073) +RainterpreterParserPointersTest:testParserParseMeta() (gas: 285307) +RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 2466735) +RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 2160048) +RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 2159634) +RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 2158330) RainterpreterReferenceExternDescribedByMetaV1:testRainterpreterReferenceExternDescribedByMetaV1Happy() (gas: 2081641) -RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2054, μ: 2093899, ~: 2093899) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2183783) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2178021) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 106, μ: 3597, ~: 3597) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 106, μ: 758404, ~: 764471) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 106, μ: 2095491, ~: 2095759) +RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2055, μ: 2093899, ~: 2093899) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2183789) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2178028) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 107, μ: 3597, ~: 3597) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 107, μ: 756186, ~: 762999) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 107, μ: 2095499, ~: 2095759) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 100, μ: 2091863, ~: 2091662) RainterpreterReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 2081736) RainterpreterReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 2081779) @@ -766,14 +783,14 @@ RainterpreterReferenceExternPointersTest:testSubParserFunctionPointers() (gas: 2 RainterpreterReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 2081756) RainterpreterReferenceExternPointersTest:testSubParserOperandParsers() (gas: 2082229) RainterpreterReferenceExternPointersTest:testSubParserParseMeta() (gas: 22017) -RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2212938) -RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2054, μ: 2167479, ~: 2167574) -RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 2128678) -RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 52330) -RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 83058) -RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2054, μ: 229923, ~: 229923) +RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2212950) +RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2055, μ: 2167482, ~: 2167581) +RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 2128684) +RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 52336) +RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 83065) +RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2055, μ: 229923, ~: 229923) RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 102, μ: 1614946, ~: 1605278) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 106, μ: 3478977, ~: 3346528) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 106, μ: 1887683, ~: 1924733) -RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 103, μ: 249636, ~: 250199) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 107, μ: 3472745, ~: 3318341) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 107, μ: 1881833, ~: 1898212) +RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 104, μ: 249550, ~: 250045) RainterpreterTest:testRainterpreterOddFunctionPointersLength() (gas: 3672) \ No newline at end of file diff --git a/lib/rain.interpreter.interface b/lib/rain.interpreter.interface index b98af98b0..70d9fae47 160000 --- a/lib/rain.interpreter.interface +++ b/lib/rain.interpreter.interface @@ -1 +1 @@ -Subproject commit b98af98b04ba70bc81fc7157a0172655627860bd +Subproject commit 70d9fae479072d0dad154ba203fd9b6c17d553b2 diff --git a/src/generated/Rainterpreter.pointers.sol b/src/generated/Rainterpreter.pointers.sol index 717be8b6c..2492f07ba 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(0xfb3f1b21051afed257ddbc45179a15718cc1ef1c2f594b33b0d58e8234ad9f6b); +bytes32 constant BYTECODE_HASH = bytes32(0xa6b8194695aec2caaf40b73cd4e492ee12c82b68f6cb09e771bcd016eb1c1830); /// @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"0749077b079f092b09f40a060a180a310a550a890a9a0aab0b4d0b6c0c2a0cda0e1c0f4f0ff1107510861097109710a81135114e1162117b119411a71209125712a512d61324137213c014a7"; + hex"075b078d07b1093d0a060a180a2a0a430a670a9b0aac0abd0b5f0b7e0c3c0cec0d700eb20fe510de118011f81209121a121a122b12b812d112e512fe1317132a138c13da1428145914a714f51543162a"; diff --git a/src/generated/RainterpreterExpressionDeployer.pointers.sol b/src/generated/RainterpreterExpressionDeployer.pointers.sol index 69a11f7e6..9ff5290d7 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(0xdc618b20362cbf40d34136f4c0507f0c5f60301abd35a026e32baf4764e0a0da); +bytes32 constant BYTECODE_HASH = bytes32(0x8129e7266bfb3b783324f17acce944c8eceb52114fdc1e752e1e619af4b996a7); /// @dev The hash of the meta that describes the contract. -bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xbebc529bcf04714a69fdd6a742560fb243b303b6e4ffdf69b30f0948a47ed0b3); +bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xa584ea21441427aadd44a19078a8f80abb0563d43e8da2bb0aab9f02a1205398); /// @dev The function pointers for the integrity check fns. bytes constant INTEGRITY_FUNCTION_POINTERS = - hex"0de80e660eca1044104e104e10581061107c11221122117e11f61203104e1203104e104e10581044104410441044120d104e104e104e104e10441217123f121710441217123f123f1058120d"; + hex"0df80e760eda1054105e105e10681071108c11321132118e12061213105e10681213105e1068105e10681054105410541054121d105e105e105e105e10541227124f122710541227124f124f1068121d"; diff --git a/src/generated/RainterpreterParser.pointers.sol b/src/generated/RainterpreterParser.pointers.sol index d9fe2298b..2ef0aa842 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(0x462087a93e3b043abb176513bfc08f67767019ac3b6ed30880c894a3ec231f66); +bytes32 constant BYTECODE_HASH = bytes32(0x6f543e4dfa04d86b7bb9adbd4f2daf59cafd956a3d1f4d295cb680b8c286ac04); /// @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(0x462087a93e3b043abb176513bfc08f6776701 /// 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"010e000088000000102c00000c8880800d24a0148109008880010000140550a010000d1dbb6302525f2210999fd51671b5110a2139801869a80f00a4ed3f25ba92e12148361e2428c11e089ebd5e07e2359819b5fc9e22d9ace20fe92356143994150b7dfb1509bb6451066c83bf1f5797780c4960e303fa47a905e82f0c1b4efea02024d7751dbfd64113d6a860115832fd1ab8491f1ebe2c7c01d81c842362708d0efdd5d8122466661547b9490477ee1817e0ddd31c3436fb"; + hex"010e000088000004102c00000c8880800d24a0148109008880010000140554a010000d1dbb6302525f2211999fd50f6c01da1871b5110a2139801a69a80f00a4ed3f27ba92e12348361e2628c11e089ebd5e07e235981bb5fc9e24d9ace210e92356163994150b7dfb1509bb6451066c83bf215797780c4960e303fa47a905e82f0c1d4efea02224d7751fbfd64115d6a860135832fd1cb8491f20be2c7c01d81c842562708d0efdd5d8142466661747b9490477ee181251471f19e0ddd31e3436fb"; /// @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"19ca19ca19ca1a9f1bb61bb61bb61a9f1a9f19ca19ca19ca1bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb61bb619ca1bb61bb6"; + hex"19db19db19db1ab01bc71bc71bc71ab01ab019db19db19db1bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc71bc719db1bc71bc7"; /// @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"1512174417871825"; +bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"1523175517981836"; diff --git a/src/lib/op/LibAllStandardOps.sol b/src/lib/op/LibAllStandardOps.sol index b1a397431..a4ffa77dd 100644 --- a/src/lib/op/LibAllStandardOps.sol +++ b/src/lib/op/LibAllStandardOps.sol @@ -34,7 +34,7 @@ import {LibOpUint256ERC20TotalSupply} from "./erc20/uint256/LibOpUint256ERC20Tot import {LibOpERC20Allowance} from "./erc20/LibOpERC20Allowance.sol"; import {LibOpERC20BalanceOf} from "./erc20/LibOpERC20BalanceOf.sol"; -// import {LibOpERC20TotalSupply} from "./erc20/LibOpERC20TotalSupply.sol"; +import {LibOpERC20TotalSupply} from "./erc20/LibOpERC20TotalSupply.sol"; import {LibOpUint256ERC721BalanceOf} from "./erc721/uint256/LibOpUint256ERC721BalanceOf.sol"; import {LibOpERC721OwnerOf} from "./erc721/LibOpERC721OwnerOf.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 = 38; +uint256 constant ALL_STANDARD_OPS_LENGTH = 40; /// @title LibAllStandardOps /// @notice Every opcode available from the core repository laid out as a single @@ -168,10 +168,10 @@ library LibAllStandardOps { "uint256-erc20-balance-of", "Gets the balance of an erc20 token for an account as a uint256 value. The first input is the token address and the second is the account address." ), - // AuthoringMetaV2( - // "uint256-erc20-total-supply", - // "Gets the total supply of an erc20 token as a uint256 value. The input is the token address." - // ), + AuthoringMetaV2( + "uint256-erc20-total-supply", + "Gets the total supply of an erc20 token as a uint256 value. The input is the token address." + ), AuthoringMetaV2( "erc20-allowance", "Gets the allowance of an erc20 token for an account. The first input is the token address, the second is the owner address, and the third is the spender address. Lossy conversion to float so that \"infinite approve\" doesn't error." @@ -180,9 +180,9 @@ library LibAllStandardOps { "erc20-balance-of", "Gets the balance of an erc20 token for an account. The first input is the token address and the second is the account address." ), - // AuthoringMetaV2( - // "erc20-total-supply", "Gets the total supply of an erc20 token. The input is the token address." - // ), + AuthoringMetaV2( + "erc20-total-supply", "Gets the total supply of an erc20 token. The input is the token address." + ), // AuthoringMetaV2( // "uint256-erc721-balance-of", // "Gets the balance of an erc721 token for an account as a uint256 value. The first input is the token address and the second is the account address." @@ -389,14 +389,14 @@ library LibAllStandardOps { LibParseOperand.handleOperandDisallowed, // uint256-erc20-balance-of LibParseOperand.handleOperandDisallowed, - // // uint256-erc20-total-supply - // LibParseOperand.handleOperandDisallowed, + // uint256-erc20-total-supply + LibParseOperand.handleOperandDisallowed, // erc20-allowance LibParseOperand.handleOperandDisallowed, // erc20-balance-of LibParseOperand.handleOperandDisallowed, - // // erc20-total-supply - // LibParseOperand.handleOperandDisallowed, + // erc20-total-supply + LibParseOperand.handleOperandDisallowed, // // uint256-erc721-balance-of // LibParseOperand.handleOperandDisallowed, // erc721-owner-of @@ -556,10 +556,10 @@ library LibAllStandardOps { LibOpHashNP.integrity, LibOpUint256ERC20Allowance.integrity, LibOpUint256ERC20BalanceOf.integrity, - // LibOpUint256ERC20TotalSupply.integrity, + LibOpUint256ERC20TotalSupply.integrity, LibOpERC20Allowance.integrity, LibOpERC20BalanceOf.integrity, - // LibOpERC20TotalSupply.integrity, + LibOpERC20TotalSupply.integrity, // LibOpUint256ERC721BalanceOf.integrity, LibOpERC721OwnerOf.integrity, LibOpERC5313OwnerNP.integrity, @@ -668,10 +668,10 @@ library LibAllStandardOps { LibOpHashNP.run, LibOpUint256ERC20Allowance.run, LibOpUint256ERC20BalanceOf.run, - // LibOpUint256ERC20TotalSupply.run, + LibOpUint256ERC20TotalSupply.run, LibOpERC20Allowance.run, LibOpERC20BalanceOf.run, - // LibOpERC20TotalSupply.run, + LibOpERC20TotalSupply.run, // LibOpUint256ERC721BalanceOf.run, LibOpERC721OwnerOf.run, LibOpERC5313OwnerNP.run, diff --git a/src/lib/op/erc20/LibOpERC20TotalSupply.sol b/src/lib/op/erc20/LibOpERC20TotalSupply.sol index 1ec0ba1e7..ff7dc5e85 100644 --- a/src/lib/op/erc20/LibOpERC20TotalSupply.sol +++ b/src/lib/op/erc20/LibOpERC20TotalSupply.sol @@ -1,63 +1,55 @@ // SPDX-License-Identifier: CAL pragma solidity ^0.8.25; -// import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; -// import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -// import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; -// import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -// import {InterpreterState} from "../../state/LibInterpreterState.sol"; -// import {IERC20Metadata} from "openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol"; - -// /// @title LibOpERC20TotalSupply -// /// @notice Opcode for ERC20 `totalSupply`. -// library LibOpERC20TotalSupply { -// function integrity(IntegrityCheckState memory, Operand) internal pure returns (uint256, uint256) { -// // Always 1 input, the contract. -// // Always 1 output, the total supply. -// return (1, 1); -// } - -// function run(InterpreterState memory, Operand, Pointer stackTop) internal view returns (Pointer) { -// uint256 token; -// assembly ("memory-safe") { -// token := mload(stackTop) -// } -// uint256 totalSupply = IERC20(address(uint160(token))).totalSupply(); - -// uint256 tokenDecimals = IERC20Metadata(address(uint160(token))).decimals(); -// totalSupply = LibFixedPointDecimalScale.scale18( -// totalSupply, -// tokenDecimals, -// // Error on overflow as total supply is a critical value. -// // Rounding down is the default. -// 0 -// ); - -// assembly ("memory-safe") { -// mstore(stackTop, totalSupply) -// } -// return stackTop; -// } - -// function referenceFn(InterpreterState memory, Operand, uint256[] memory inputs) -// internal -// view -// returns (uint256[] memory) -// { -// uint256 account = inputs[0]; -// uint256 totalSupply = IERC20(address(uint160(account))).totalSupply(); - -// uint256 tokenDecimals = IERC20Metadata(address(uint160(account))).decimals(); -// totalSupply = LibFixedPointDecimalScale.scale18( -// totalSupply, -// tokenDecimals, -// // Error on overflow as total supply is a critical value. -// // Rounding down is the default. -// 0 -// ); - -// uint256[] memory outputs = new uint256[](1); -// outputs[0] = totalSupply; -// return outputs; -// } -// } +import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; +import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; +import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {InterpreterState} from "../../state/LibInterpreterState.sol"; +import {IERC20Metadata} from "openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; + +/// @title LibOpERC20TotalSupply +/// @notice Opcode for ERC20 `totalSupply`. +library LibOpERC20TotalSupply { + function integrity(IntegrityCheckState memory, OperandV2) internal pure returns (uint256, uint256) { + // Always 1 input, the contract. + // Always 1 output, the total supply. + return (1, 1); + } + + function run(InterpreterState memory, OperandV2, Pointer stackTop) internal view returns (Pointer) { + uint256 token; + assembly ("memory-safe") { + token := mload(stackTop) + } + uint256 totalSupply = IERC20(address(uint160(token))).totalSupply(); + + // This can fail as `decimals` is an OPTIONAL part of the ERC20 standard. + uint8 tokenDecimals = IERC20Metadata(address(uint160(token))).decimals(); + + Float totalSupplyFloat = LibDecimalFloat.fromFixedDecimalLosslessPacked(totalSupply, tokenDecimals); + + assembly ("memory-safe") { + mstore(stackTop, totalSupplyFloat) + } + return stackTop; + } + + function referenceFn(InterpreterState memory, OperandV2, StackItem[] memory inputs) + internal + view + returns (StackItem[] memory) + { + address account = address(uint160(uint256(StackItem.unwrap(inputs[0])))); + uint256 totalSupply = IERC20(account).totalSupply(); + + uint8 tokenDecimals = IERC20Metadata(address(uint160(account))).decimals(); + Float totalSupplyFloat = LibDecimalFloat.fromFixedDecimalLosslessPacked(totalSupply, tokenDecimals); + + StackItem[] memory outputs = new StackItem[](1); + outputs[0] = StackItem.wrap(Float.unwrap(totalSupplyFloat)); + return outputs; + } +} diff --git a/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol b/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol index ef0639090..d7d62f6ab 100644 --- a/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol +++ b/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol @@ -6,6 +6,7 @@ import {Pointer} from "rain.solmem/lib/LibPointer.sol"; import {IntegrityCheckState} from "../../../integrity/LibIntegrityCheck.sol"; import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; import {InterpreterState} from "../../../state/LibInterpreterState.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; /// @title LibOpUint256ERC20TotalSupply /// @notice Opcode for ERC20 `totalSupply`. @@ -28,15 +29,15 @@ library LibOpUint256ERC20TotalSupply { return stackTop; } - function referenceFn(InterpreterState memory, OperandV2, uint256[] memory inputs) + function referenceFn(InterpreterState memory, OperandV2, StackItem[] memory inputs) internal view - returns (uint256[] memory) + returns (StackItem[] memory) { - uint256 account = inputs[0]; - uint256 totalSupply = IERC20(address(uint160(account))).totalSupply(); - uint256[] memory outputs = new uint256[](1); - outputs[0] = totalSupply; + address account = address(uint160(uint256(StackItem.unwrap(inputs[0])))); + uint256 totalSupply = IERC20(account).totalSupply(); + StackItem[] memory outputs = new StackItem[](1); + outputs[0] = StackItem.wrap(bytes32(totalSupply)); return outputs; } } diff --git a/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol b/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol index 7d24305f4..92f8453b1 100644 --- a/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol +++ b/test/src/lib/op/erc20/LibOpERC20TotalSupply.t.sol @@ -1,92 +1,104 @@ // SPDX-License-Identifier: CAL pragma solidity =0.8.25; -// import {stdError} from "forge-std/Test.sol"; -// import {OpTest} from "test/abstract/OpTest.sol"; -// import {IntegrityCheckState} from "src/lib/integrity/LibIntegrityCheck.sol"; -// import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -// import {LibOpERC20TotalSupply} from "src/lib/op/erc20/LibOpERC20TotalSupply.sol"; -// import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; -// import {UnexpectedOperand} from "src/error/ErrParse.sol"; -// import {LibOperand} from "test/lib/operand/LibOperand.sol"; -// import {LibWillOverflow} from "rain.math.fixedpoint/lib/LibWillOverflow.sol"; -// import {IERC20Metadata} from "openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol"; -// import {LibFixedPointDecimalScale} from "rain.math.fixedpoint/lib/LibFixedPointDecimalScale.sol"; - -// /// @title LibOpERC20TotalSupplyTest -// /// @notice Test the opcode for getting the total supply of an erc20 contract. -// contract LibOpERC20TotalSupplyTest is OpTest { -// function testOpERC20TotalSupplyNPIntegrity(IntegrityCheckState memory state, Operand operand) external pure { -// (uint256 calcInputs, uint256 calcOutputs) = LibOpERC20TotalSupply.integrity(state, operand); - -// assertEq(calcInputs, 1); -// assertEq(calcOutputs, 1); -// } - -// function testOpERC20TotalSupplyNPRun(address account, uint256 totalSupply, uint16 operandData, uint8 decimals) -// external -// { -// assumeEtchable(account); -// vm.etch(account, hex"fe"); - -// vm.assume(!LibWillOverflow.scale18WillOverflow(totalSupply, decimals, 0)); - -// uint256[] memory inputs = new uint256[](1); -// inputs[0] = uint256(uint160(account)); -// Operand operand = LibOperand.build(1, 1, operandData); - -// vm.mockCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); -// // called once for reference, once for run -// vm.expectCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), 2); - -// vm.mockCall(account, abi.encodeWithSelector(IERC20Metadata.decimals.selector), abi.encode(decimals)); - -// opReferenceCheck( -// opTestDefaultInterpreterState(), -// operand, -// LibOpERC20TotalSupply.referenceFn, -// LibOpERC20TotalSupply.integrity, -// LibOpERC20TotalSupply.run, -// inputs -// ); -// } - -// /// Test the eval of totalSupply parsed from a string. -// function testOpERC20TotalSupplyNPEvalHappy(uint256 totalSupply, uint8 decimals) external { -// vm.assume(!LibWillOverflow.scale18WillOverflow(totalSupply, decimals, 0)); -// vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); -// vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20Metadata.decimals.selector), abi.encode(decimals)); -// totalSupply = LibFixedPointDecimalScale.scale18(totalSupply, decimals, 0); -// checkHappy("_: erc20-total-supply(0xdeadbeef);", totalSupply, "0xdeadbeef 0xdeadc0de"); -// } - -// /// Test overflow of totalSupply. -// function testOpERC20TotalSupplyNPEvalOverflow(uint256 totalSupply, uint8 decimals) external { -// vm.assume(LibWillOverflow.scale18WillOverflow(totalSupply, decimals, 0)); -// vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); -// vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20Metadata.decimals.selector), abi.encode(decimals)); -// checkUnhappy("_: erc20-total-supply(0xdeadbeef);", stdError.arithmeticError); -// } - -// /// Test that a totalSupply with bad inputs fails integrity. -// function testOpERC20TotalSupplyNPEvalZeroInputs() external { -// checkBadInputs("_: erc20-total-supply();", 0, 1, 0); -// } - -// function testOpERC20TotalSupplyNPEvalTwoInputs() external { -// checkBadInputs("_: erc20-total-supply(0xdeadbeef 0xdeadc0de);", 2, 1, 2); -// } - -// function testOpERC20TotalSupplyNPEvalZeroOutputs() external { -// checkBadOutputs(": erc20-total-supply(0xdeadbeef);", 1, 1, 0); -// } - -// function testOpERC20TotalSupplyNPEvalTwoOutputs() external { -// checkBadOutputs("_ _: erc20-total-supply(0xdeadbeef);", 1, 1, 2); -// } - -// /// Test that operand is disallowed. -// function testOpERC20TotalSupplyNPEvalOperandDisallowed() external { -// checkUnhappyParse("_: erc20-total-supply<0>(0xdeadbeef);", abi.encodeWithSelector(UnexpectedOperand.selector)); -// } -// } +import {OpTest} from "test/abstract/OpTest.sol"; +import {IntegrityCheckState} from "src/lib/integrity/LibIntegrityCheck.sol"; +import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {LibOpERC20TotalSupply} from "src/lib/op/erc20/LibOpERC20TotalSupply.sol"; +import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; +import {UnexpectedOperand} from "src/error/ErrParse.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {IERC20Metadata} from "openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {LibDecimalFloat, Float, LossyConversionToFloat} from "rain.math.float/lib/LibDecimalFloat.sol"; + +/// @title LibOpERC20TotalSupplyTest +/// @notice Test the opcode for getting the total supply of an erc20 contract. +contract LibOpERC20TotalSupplyTest is OpTest { + function testOpERC20TotalSupplyIntegrity(IntegrityCheckState memory state, OperandV2 operand) external pure { + (uint256 calcInputs, uint256 calcOutputs) = LibOpERC20TotalSupply.integrity(state, operand); + + assertEq(calcInputs, 1); + assertEq(calcOutputs, 1); + } + + function testOpERC20TotalSupplyNPRun(address account, uint256 totalSupply, uint16 operandData, uint8 decimals) + external + { + assumeEtchable(account); + vm.etch(account, hex"fe"); + + (, bool lossless) = LibDecimalFloat.fromFixedDecimalLossyPacked(totalSupply, decimals); + vm.assume(lossless); + + StackItem[] memory inputs = new StackItem[](1); + inputs[0] = StackItem.wrap(bytes32(uint256(uint160(account)))); + OperandV2 operand = LibOperand.build(1, 1, operandData); + + vm.mockCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); + // called once for reference, once for run + vm.expectCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), 2); + + vm.mockCall(account, abi.encodeWithSelector(IERC20Metadata.decimals.selector), abi.encode(decimals)); + + opReferenceCheck( + opTestDefaultInterpreterState(), + operand, + LibOpERC20TotalSupply.referenceFn, + LibOpERC20TotalSupply.integrity, + LibOpERC20TotalSupply.run, + inputs + ); + } + + /// Test the eval of totalSupply parsed from a string. + function testOpERC20TotalSupplyEvalHappy(uint256 totalSupply, uint8 decimals) external { + (, bool lossless) = LibDecimalFloat.fromFixedDecimalLossyPacked(totalSupply, decimals); + vm.assume(lossless); + + vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); + vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20Metadata.decimals.selector), abi.encode(decimals)); + + Float totalSupplyFloat = LibDecimalFloat.fromFixedDecimalLosslessPacked(totalSupply, decimals); + + checkHappy("_: erc20-total-supply(0xdeadbeef);", Float.unwrap(totalSupplyFloat), "0xdeadbeef 0xdeadc0de"); + } + + /// Test overflow of totalSupply. + function testOpERC20TotalSupplyEvalOverflow(uint256 totalSupply, uint8 decimals) external { + (int256 signedCoefficient, int256 exponent, bool lossless) = + LibDecimalFloat.fromFixedDecimalLossy(totalSupply, decimals); + vm.assume(!lossless); + (, bool losslessPack) = LibDecimalFloat.packLossy(signedCoefficient, exponent); + vm.assume(!losslessPack); + + vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); + vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20Metadata.decimals.selector), abi.encode(decimals)); + checkUnhappy( + "_: erc20-total-supply(0xdeadbeef);", + abi.encodeWithSelector(LossyConversionToFloat.selector, signedCoefficient, exponent) + ); + } + + /// Test that a totalSupply with bad inputs fails integrity. + function testOpERC20TotalSupplyEvalZeroInputs() external { + checkBadInputs("_: erc20-total-supply();", 0, 1, 0); + } + + function testOpERC20TotalSupplyEvalTwoInputs() external { + checkBadInputs("_: erc20-total-supply(0xdeadbeef 0xdeadc0de);", 2, 1, 2); + } + + function testOpERC20TotalSupplyEvalZeroOutputs() external { + checkBadOutputs(": erc20-total-supply(0xdeadbeef);", 1, 1, 0); + } + + function testOpERC20TotalSupplyEvalTwoOutputs() external { + checkBadOutputs("_ _: erc20-total-supply(0xdeadbeef);", 1, 1, 2); + } + + /// Test that operand is disallowed. + function testOpERC20TotalSupplyEvalOperandDisallowed() external { + checkUnhappyParse("_: erc20-total-supply<0>(0xdeadbeef);", abi.encodeWithSelector(UnexpectedOperand.selector)); + } +} diff --git a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol index 057a02409..52daf53c3 100644 --- a/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol +++ b/test/src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.t.sol @@ -1,73 +1,74 @@ // SPDX-License-Identifier: CAL pragma solidity =0.8.25; -// // import {OpTest} from "test/abstract/OpTest.sol"; -// // import {IntegrityCheckState} from "src/lib/integrity/LibIntegrityCheck.sol"; -// // import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -// // import {LibOpUint256ERC20TotalSupply} from "src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol"; -// // import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; -// // import {UnexpectedOperand} from "src/error/ErrParse.sol"; -// // import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {OpTest} from "test/abstract/OpTest.sol"; +import {IntegrityCheckState} from "src/lib/integrity/LibIntegrityCheck.sol"; +import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {LibOpUint256ERC20TotalSupply} from "src/lib/op/erc20/uint256/LibOpUint256ERC20TotalSupply.sol"; +import {IERC20} from "openzeppelin-contracts/contracts/interfaces/IERC20.sol"; +import {UnexpectedOperand} from "src/error/ErrParse.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -// /// @title LibOpUint256ERC20TotalSupplyTest -// /// @notice Test the opcode for getting the total supply of an erc20 contract. -// contract LibOpUint256ERC20TotalSupplyTest is OpTest { -// function testOpERC20TotalSupplyNPIntegrity(IntegrityCheckState memory state, Operand operand) external pure { -// (uint256 calcInputs, uint256 calcOutputs) = LibOpUint256ERC20TotalSupply.integrity(state, operand); +/// @title LibOpUint256ERC20TotalSupplyTest +/// @notice Test the opcode for getting the total supply of an erc20 contract. +contract LibOpUint256ERC20TotalSupplyTest is OpTest { + function testOpERC20TotalSupplyIntegrity(IntegrityCheckState memory state, OperandV2 operand) external pure { + (uint256 calcInputs, uint256 calcOutputs) = LibOpUint256ERC20TotalSupply.integrity(state, operand); -// // assertEq(calcInputs, 1); -// // assertEq(calcOutputs, 1); -// // } + assertEq(calcInputs, 1); + assertEq(calcOutputs, 1); + } -// // function testOpERC20TotalSupplyNPRun(address account, uint256 totalSupply, uint16 operandData) external { -// // assumeEtchable(account); -// // vm.etch(account, hex"fe"); + function testOpERC20TotalSupplyRun(address account, uint256 totalSupply, uint16 operandData) external { + assumeEtchable(account); + vm.etch(account, hex"fe"); -// // uint256[] memory inputs = new uint256[](1); -// // inputs[0] = uint256(uint160(account)); -// // Operand operand = LibOperand.build(1, 1, operandData); + StackItem[] memory inputs = new StackItem[](1); + inputs[0] = StackItem.wrap(bytes32(uint256(uint160(account)))); + OperandV2 operand = LibOperand.build(1, 1, operandData); -// // vm.mockCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); -// // // called once for reference, once for run -// // vm.expectCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), 2); + vm.mockCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); + // called once for reference, once for run + vm.expectCall(account, abi.encodeWithSelector(IERC20.totalSupply.selector), 2); -// // opReferenceCheck( -// // opTestDefaultInterpreterState(), -// // operand, -// // LibOpUint256ERC20TotalSupply.referenceFn, -// // LibOpUint256ERC20TotalSupply.integrity, -// // LibOpUint256ERC20TotalSupply.run, -// // inputs -// // ); -// // } + opReferenceCheck( + opTestDefaultInterpreterState(), + operand, + LibOpUint256ERC20TotalSupply.referenceFn, + LibOpUint256ERC20TotalSupply.integrity, + LibOpUint256ERC20TotalSupply.run, + inputs + ); + } -// // /// Test the eval of totalSupply parsed from a string. -// // function testOpERC20TotalSupplyNPEvalHappy(uint256 totalSupply) external { -// // vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); -// // checkHappy("_: uint256-erc20-total-supply(0xdeadbeef);", totalSupply, "0xdeadbeef 0xdeadc0de"); -// // } + /// Test the eval of totalSupply parsed from a string. + function testOpERC20TotalSupplyEvalHappy(uint256 totalSupply) external { + vm.mockCall(address(0xdeadbeef), abi.encodeWithSelector(IERC20.totalSupply.selector), abi.encode(totalSupply)); + checkHappy("_: uint256-erc20-total-supply(0xdeadbeef);", bytes32(totalSupply), "0xdeadbeef 0xdeadc0de"); + } -// // /// Test that a totalSupply with bad inputs fails integrity. -// // function testOpERC20TotalSupplyNPEvalZeroInputs() external { -// // checkBadInputs("_: uint256-erc20-total-supply();", 0, 1, 0); -// // } + /// Test that a totalSupply with bad inputs fails integrity. + function testOpERC20TotalSupplyEvalZeroInputs() external { + checkBadInputs("_: uint256-erc20-total-supply();", 0, 1, 0); + } -// // function testOpERC20TotalSupplyNPEvalTwoInputs() external { -// // checkBadInputs("_: uint256-erc20-total-supply(0xdeadbeef 0xdeadc0de);", 2, 1, 2); -// // } + function testOpERC20TotalSupplyEvalTwoInputs() external { + checkBadInputs("_: uint256-erc20-total-supply(0xdeadbeef 0xdeadc0de);", 2, 1, 2); + } -// // function testOpERC20TotalSupplyNPEvalZeroOutputs() external { -// // checkBadOutputs(": uint256-erc20-total-supply(0xdeadbeef);", 1, 1, 0); -// // } + function testOpERC20TotalSupplyEvalZeroOutputs() external { + checkBadOutputs(": uint256-erc20-total-supply(0xdeadbeef);", 1, 1, 0); + } -// // function testOpERC20TotalSupplyNPEvalTwoOutputs() external { -// // checkBadOutputs("_ _: uint256-erc20-total-supply(0xdeadbeef);", 1, 1, 2); -// // } + function testOpERC20TotalSupplyEvalTwoOutputs() external { + checkBadOutputs("_ _: uint256-erc20-total-supply(0xdeadbeef);", 1, 1, 2); + } -// // /// Test that operand is disallowed. -// // function testOpERC20TotalSupplyNPEvalOperandDisallowed() external { -// // checkUnhappyParse( -// // "_: uint256-erc20-total-supply<0>(0xdeadbeef);", abi.encodeWithSelector(UnexpectedOperand.selector) -// // ); -// // } -// // } + /// Test that operand is disallowed. + function testOpERC20TotalSupplyEvalOperandDisallowed() external { + checkUnhappyParse( + "_: uint256-erc20-total-supply<0>(0xdeadbeef);", abi.encodeWithSelector(UnexpectedOperand.selector) + ); + } +}