From d64976fa6f1bbb52680bb326b243358cc8d8c696 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Thu, 7 Aug 2025 11:34:27 +0400 Subject: [PATCH] exp op --- .gas-snapshot | 693 +++++++++--------- src/generated/Rainterpreter.pointers.sol | 4 +- ...interpreterExpressionDeployer.pointers.sol | 6 +- .../RainterpreterParser.pointers.sol | 8 +- src/lib/op/LibAllStandardOps.sol | 14 +- src/lib/op/math/LibOpExp.sol | 78 +- test/src/lib/op/math/LibOpExp.t.sol | 138 ++-- test/src/lib/op/math/LibOpSqrt.t.sol | 1 + 8 files changed, 499 insertions(+), 443 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 1d941313c..303c18c05 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,16 +1,16 @@ -BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2064, μ: 320946, ~: 320946) -BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2064, μ: 678755, ~: 678755) -LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 77176) -LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 10973) -LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 10958) -LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2064, μ: 86843, ~: 86843) -LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2064, μ: 9767, ~: 10284) -LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2064, μ: 8884, ~: 9401) -LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2064, μ: 43045, ~: 42583) +BaseRainterpreterExternNPE2IERC165Test:testRainterpreterExternNPE2IERC165(bytes4) (runs: 2061, μ: 320946, ~: 320946) +BaseRainterpreterSubParserNPE2IERC165Test:testRainterpreterSubParserNPE2IERC165(uint32) (runs: 2061, μ: 678755, ~: 678755) +LibAllStandardOpsTest:testIntegrityAndOpcodeFunctionPointersLength() (gas: 80113) +LibAllStandardOpsTest:testIntegrityFunctionPointersLength() (gas: 11310) +LibAllStandardOpsTest:testOpcodeFunctionPointersLength() (gas: 11295) +LibEvalFBoundsTest:testEvalNPFBoundsModConstant(bytes32) (runs: 2061, μ: 87181, ~: 87181) +LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,bytes32) (runs: 2061, μ: 9770, ~: 10284) +LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,bytes32) (runs: 2061, μ: 8887, ~: 9401) +LibInterpreterStateStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2061, μ: 43081, ~: 42630) LibOpAbsTest:testOpAbsEval() (gas: 293383) LibOpAbsTest:testOpAbsEvalOperandDisallowed() (gas: 17593) -LibOpAbsTest:testOpAbsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13753, ~: 13664) -LibOpAbsTest:testOpAbsRun(bytes32,uint16) (runs: 2064, μ: 17409, ~: 17349) +LibOpAbsTest:testOpAbsIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13754, ~: 13667) +LibOpAbsTest:testOpAbsRun(bytes32,uint16) (runs: 2061, μ: 17409, ~: 17349) LibOpAbsTest:testOpAbsTwoInputs() (gas: 40024) LibOpAbsTest:testOpAbsTwoOutputs() (gas: 35855) LibOpAbsTest:testOpAbsZeroInputs() (gas: 30184) @@ -27,10 +27,10 @@ LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 91729) LibOpAddTest:testOpAddEvalTwoOutput() (gas: 44027) LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30263) LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 43045) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18204, ~: 18430) -LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13873, ~: 13765) -LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13870, ~: 13762) -LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2052, μ: 52081, ~: 51918) +LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18202, ~: 18434) +LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13874, ~: 13797) +LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13871, ~: 13794) +LibOpAddTest:testOpAddRun(bytes32[]) (runs: 2051, μ: 52185, ~: 51999) LibOpAnyTest:testOpAnyEval1FalseInput() (gas: 51945) LibOpAnyTest:testOpAnyEval1TrueInput() (gas: 51893) LibOpAnyTest:testOpAnyEval2FalseInputs() (gas: 57239) @@ -40,12 +40,20 @@ LibOpAnyTest:testOpAnyEval2MixedInputsZeroExponent() (gas: 58913) LibOpAnyTest:testOpAnyEval2TrueInputs() (gas: 57829) LibOpAnyTest:testOpAnyEvalFail() (gas: 29770) LibOpAnyTest:testOpAnyIntegrityGas0() (gas: 3251) -LibOpAnyTest:testOpAnyIntegrityHappy(uint8,uint16) (runs: 2064, μ: 8291, ~: 8417) +LibOpAnyTest:testOpAnyIntegrityHappy(uint8,uint16) (runs: 2061, μ: 8301, ~: 8568) LibOpAnyTest:testOpAnyIntegrityUnhappyZeroInputs() (gas: 4059) -LibOpAnyTest:testOpAnyRun(bytes32[],uint16) (runs: 2052, μ: 21817, ~: 21797) +LibOpAnyTest:testOpAnyRun(bytes32[],uint16) (runs: 2051, μ: 21817, ~: 21797) LibOpAnyTest:testOpAnyRunGas0() (gas: 3345) LibOpAnyTest:testOpAnyTwoOutputs() (gas: 35825) LibOpAnyTest:testOpAnyZeroOutputs() (gas: 34795) +LibOpAvgTest:testOpAvgEval() (gas: 447365) +LibOpAvgTest:testOpAvgEvalOneInput() (gas: 35224) +LibOpAvgTest:testOpAvgEvalOperandDisallowed() (gas: 17634) +LibOpAvgTest:testOpAvgEvalThreeInputs() (gas: 44951) +LibOpAvgTest:testOpAvgEvalTwoOutputs() (gas: 40755) +LibOpAvgTest:testOpAvgEvalZeroOutputs() (gas: 39730) +LibOpAvgTest:testOpAvgIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13776, ~: 13689) +LibOpAvgTest:testOpAvgRun(int256,int256,int256,int256,uint16) (runs: 2061, μ: 37796, ~: 37828) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2() (gas: 208020) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsBothOne() (gas: 57888) LibOpBinaryEqualToTest:testOpBinaryEqualToEval2InputsFirstOneSecondZero() (gas: 58619) @@ -54,13 +62,13 @@ LibOpBinaryEqualToTest:testOpBinaryEqualToEval2ZeroInputs() (gas: 57933) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail0Inputs() (gas: 30666) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail1Input() (gas: 34985) LibOpBinaryEqualToTest:testOpBinaryEqualToEvalFail3Inputs() (gas: 43484) -LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19696, ~: 19947) -LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2064, μ: 16674, ~: 16674) +LibOpBinaryEqualToTest:testOpBinaryEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19698, ~: 19947) +LibOpBinaryEqualToTest:testOpBinaryEqualToRun(bytes32,bytes32) (runs: 2061, μ: 16674, ~: 16674) LibOpBinaryEqualToTest:testOpBinaryEqualToTwoOutputs() (gas: 41643) LibOpBinaryEqualToTest:testOpBinaryEqualToZeroOutputs() (gas: 40574) LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 720691) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13753, ~: 13664) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2064, μ: 16671, ~: 16671) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13754, ~: 13667) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(bytes32,bytes32) (runs: 2061, μ: 16671, ~: 16671) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18238) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35799) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45568) @@ -74,26 +82,26 @@ LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 45466) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41290) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30719) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40287) -LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13752, ~: 13663) -LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2064, μ: 16628, ~: 16628) -LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2064, μ: 51018, ~: 50792) +LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13753, ~: 13666) +LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(bytes32,bytes32) (runs: 2061, μ: 16628, ~: 16628) +LibOpBlockNumberTest:testOpBlockNumberEval(uint256) (runs: 2061, μ: 51020, ~: 50792) LibOpBlockNumberTest:testOpBlockNumberEvalOneInput() (gas: 35212) LibOpBlockNumberTest:testOpBlockNumberEvalTwoOutputs() (gas: 31514) LibOpBlockNumberTest:testOpBlockNumberEvalZeroOutputs() (gas: 30505) -LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19652, ~: 19891) -LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2064, μ: 20848, ~: 21044) +LibOpBlockNumberTest:testOpBlockNumberIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19648, ~: 19871) +LibOpBlockNumberTest:testOpBlockNumberRun(uint256,uint16) (runs: 2061, μ: 20849, ~: 21044) LibOpCallTest:testCallTraceInnerOnly() (gas: 63050) LibOpCallTest:testCallTraceOuterOnly() (gas: 45616) -LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2060, μ: 39753, ~: 38381) -LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2064, μ: 59442, ~: 59146) -LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2056, μ: 58594, ~: 59166) +LibOpCallTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2059, μ: 39749, ~: 38527) +LibOpCallTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2061, μ: 59259, ~: 58875) +LibOpCallTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,bytes32[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2055, μ: 58901, ~: 59163) LibOpCallTest:testOpCallNPRunInputsMismatch() (gas: 72617) LibOpCallTest:testOpCallNPRunOutputsMismatch() (gas: 65559) LibOpCallTest:testOpCallNPRunSourceDoesNotExist() (gas: 350927) -LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2064, μ: 47083, ~: 47083) -LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19673, ~: 19934) +LibOpChainIdTest:testOpChainIDEval(uint64) (runs: 2061, μ: 47083, ~: 47083) +LibOpChainIdTest:testOpChainIDIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19685, ~: 19915) LibOpChainIdTest:testOpChainIdEvalFail() (gas: 34386) -LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2064, μ: 17123, ~: 17123) +LibOpChainIdTest:testOpChainIdRun(uint64,uint16) (runs: 2061, μ: 17123, ~: 17123) LibOpChainIdTest:testOpChainIdTwoOutputs() (gas: 31191) LibOpChainIdTest:testOpChainIdZeroOutputs() (gas: 30140) LibOpConditionsTest:testOpConditionsEval1FalseInput1TrueInput() (gas: 70646) @@ -106,37 +114,37 @@ LibOpConditionsTest:testOpConditionsEvalErrorCode() (gas: 67715) LibOpConditionsTest:testOpConditionsEvalFail0Inputs() (gas: 30406) LibOpConditionsTest:testOpConditionsEvalFail1Inputs() (gas: 34694) LibOpConditionsTest:testOpConditionsEvalUnhappyOperand() (gas: 18121) -LibOpConditionsTest:testOpConditionsIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 20246, ~: 20469) -LibOpConditionsTest:testOpConditionsRun(bytes32[],bytes32) (runs: 2052, μ: 19738, ~: 19850) -LibOpConditionsTest:testOpConditionsRunNoConditionsMet(bytes32[],string) (runs: 2059, μ: 29101, ~: 29267) +LibOpConditionsTest:testOpConditionsIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 20238, ~: 20463) +LibOpConditionsTest:testOpConditionsRun(bytes32[],bytes32) (runs: 2051, μ: 19737, ~: 19850) +LibOpConditionsTest:testOpConditionsRunNoConditionsMet(bytes32[],string) (runs: 2053, μ: 29123, ~: 29334) LibOpConditionsTest:testOpConditionsTwoOutputs() (gas: 39995) LibOpConditionsTest:testOpConditionsZeroOutputs() (gas: 38945) LibOpConstantTest:testOpConstantEvalNPE2E() (gas: 56133) LibOpConstantTest:testOpConstantEvalZeroConstants() (gas: 41559) -LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 19200, ~: 19095) -LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 40170, ~: 39809) +LibOpConstantTest:testOpConstantNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 19201, ~: 19102) +LibOpConstantTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 40173, ~: 39809) LibOpConstantTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31698) LibOpConstantTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41638) -LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2064, μ: 52406, ~: 51854) +LibOpConstantTest:testOpConstantNPRun(bytes32[],uint16) (runs: 2061, μ: 52449, ~: 51854) LibOpConstantTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30314) LibOpConstantTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40266) -LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 116, μ: 6333035, ~: 5154576) -LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 116, μ: 6357616, ~: 5154757) -LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 116, μ: 6333179, ~: 5154720) -LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 116, μ: 6320934, ~: 5062375) -LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 116, μ: 74529, ~: 72462) -LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2064, μ: 48273, ~: 48273) -LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 14504, ~: 14415) +LibOpContextNPTest:testOpContextNPEval00(bytes32[][]) (runs: 113, μ: 6546913, ~: 5244273) +LibOpContextNPTest:testOpContextNPEval01(bytes32[][]) (runs: 113, μ: 6572141, ~: 5244454) +LibOpContextNPTest:testOpContextNPEval10(bytes32[][]) (runs: 113, μ: 6547057, ~: 5244417) +LibOpContextNPTest:testOpContextNPEval11(bytes32[][]) (runs: 113, μ: 6534483, ~: 5059614) +LibOpContextNPTest:testOpContextNPEvalOOBi(bytes32[]) (runs: 113, μ: 75102, ~: 72576) +LibOpContextNPTest:testOpContextNPEvalOOBj(bytes32) (runs: 2061, μ: 48273, ~: 48273) +LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 14505, ~: 14418) LibOpContextNPTest:testOpContextNPOneInput() (gas: 41637) -LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 116, μ: 9907370, ~: 6985371) -LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 116, μ: 10255056, ~: 7520072) -LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 116, μ: 10263510, ~: 7520987) +LibOpContextNPTest:testOpContextNPRun(bytes32[][],uint256,uint256) (runs: 113, μ: 10375361, ~: 7240865) +LibOpContextNPTest:testOpContextNPRunOOBi(bytes32[][],uint256,uint256) (runs: 113, μ: 10604405, ~: 7779154) +LibOpContextNPTest:testOpContextNPRunOOBj(bytes32[][],uint256,uint256) (runs: 113, μ: 10724934, ~: 7780069) LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46501) LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37306) LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36254) -LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2064, μ: 74364, ~: 85330) -LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13751, ~: 13662) -LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2064, μ: 16698, ~: 16698) +LibOpCtPopNPTest:testOpCtPopNPEval(bytes32) (runs: 2061, μ: 74466, ~: 85330) +LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13752, ~: 13665) +LibOpCtPopNPTest:testOpCtPopNPRun(bytes32) (runs: 2061, μ: 16698, ~: 16698) LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41184) LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 37056) LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31321) @@ -146,10 +154,10 @@ LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 47013) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 42865) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37196) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41812) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2064, μ: 22135, ~: 22213) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2064, μ: 41510, ~: 41549) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2064, μ: 35703, ~: 35466) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2064, μ: 21014, ~: 20814) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2061, μ: 22137, ~: 22237) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2061, μ: 41506, ~: 41549) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2061, μ: 35706, ~: 35509) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(bytes32,uint8,uint8) (runs: 2061, μ: 21010, ~: 20814) LibOpDivTest:testDebugOpDivRun() (gas: 13482) LibOpDivTest:testOpDivEvalOneInput() (gas: 127233) LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 91705) @@ -162,55 +170,55 @@ LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 57349) LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41267) LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30219) LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40263) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18257, ~: 18409) -LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13826, ~: 13718) -LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13849, ~: 13741) -LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2052, μ: 37631, ~: 33555) +LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18255, ~: 18479) +LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13827, ~: 13750) +LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13850, ~: 13773) +LibOpDivTest:testOpDivRun(bytes32[]) (runs: 2051, μ: 37582, ~: 33715) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 55898) -LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2064, μ: 72201, ~: 72107) +LibOpERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256,uint8) (runs: 2061, μ: 72202, ~: 72107) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37152) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 18643) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 43683) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 50717) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31159) LibOpERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 49693) -LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13715, ~: 13626) -LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2062, μ: 27669, ~: 27579) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2062, μ: 66118, ~: 66118) +LibOpERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13716, ~: 13629) +LibOpERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256,uint8) (runs: 2061, μ: 27669, ~: 27579) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256,uint8) (runs: 2056, μ: 66118, ~: 66118) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 37257) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 18701) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2048, μ: 62387, ~: 62387) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalOverflow(uint256,uint8) (runs: 2050, μ: 62387, ~: 62387) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 49584) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 44453) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31218) LibOpERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 43385) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13694, ~: 13605) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2061, μ: 28009, ~: 28009) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2060, μ: 59288, ~: 59288) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13695, ~: 13608) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16,uint8) (runs: 2056, μ: 28009, ~: 28009) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256,uint8) (runs: 2058, μ: 59288, ~: 59288) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 18864) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOverflow(uint256,uint8) (runs: 2049, μ: 55523, ~: 55523) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 43905) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38267) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 31401) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37239) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13738, ~: 13649) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2061, μ: 27211, ~: 27211) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13739, ~: 13652) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2059, μ: 27211, ~: 27211) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalHappy() (gas: 55308) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalOperandDisallowed() (gas: 18382) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoInputs() (gas: 43501) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalTwoOutputs() (gas: 37704) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroInputs() (gas: 30995) LibOpERC5313OwnerTest:testOpERC5313OwnerEvalZeroOutputs() (gas: 36675) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13755, ~: 13666) -LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2062, μ: 23615, ~: 23615) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2061, μ: 105379, ~: 105530) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19658, ~: 19812) +LibOpERC5313OwnerTest:testOpERC5313OwnerOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13756, ~: 13669) +LibOpERC5313OwnerTest:testOpERC5313OwnerOfRun(address,address,uint16) (runs: 2060, μ: 23615, ~: 23615) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2056, μ: 105383, ~: 105530) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19656, ~: 19892) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 30862) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35151) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 44587) LibOpERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 21585) LibOpERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 35618) -LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2061, μ: 26008, ~: 26008) +LibOpERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2056, μ: 26008, ~: 26008) LibOpERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45107) LibOpERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41112) LibOpERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31296) @@ -219,30 +227,30 @@ LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30745) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 35032) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44523) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18234) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2062, μ: 96647, ~: 92570) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2061, μ: 96520, ~: 92466) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35490) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44988) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31192) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39781) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2064, μ: 13768, ~: 13701) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2062, μ: 24201, ~: 24201) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2061, μ: 13769, ~: 13705) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,bytes32,address,uint16) (runs: 2061, μ: 24201, ~: 24201) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40827) LibOpETest:testOpEEval() (gas: 44640) LibOpETest:testOpEEvalOneInput() (gas: 34298) LibOpETest:testOpEEvalTwoOutputs() (gas: 30666) LibOpETest:testOpEEvalZeroOutputs() (gas: 29615) -LibOpETest:testOpEIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19692, ~: 19943) -LibOpETest:testOpERun(uint16) (runs: 2064, μ: 16132, ~: 16132) +LibOpETest:testOpEIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19699, ~: 19943) +LibOpETest:testOpERun(uint16) (runs: 2061, μ: 16132, ~: 16132) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 833580) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42088) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 51835) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 47661) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37110) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 46657) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2064, μ: 18151, ~: 18137) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2064, μ: 41713, ~: 41757) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2064, μ: 35832, ~: 35595) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2064, μ: 21394, ~: 21212) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2061, μ: 18144, ~: 18148) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8) (runs: 2061, μ: 41723, ~: 41757) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2061, μ: 35835, ~: 35638) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(bytes32,bytes32,uint8,uint8) (runs: 2061, μ: 21400, ~: 21212) LibOpEnsureTest:testOpEnsureEvalBadOutputs() (gas: 34460) LibOpEnsureTest:testOpEnsureEvalBadOutputs2() (gas: 33985) LibOpEnsureTest:testOpEnsureEvalHappy() (gas: 166172) @@ -251,10 +259,10 @@ LibOpEnsureTest:testOpEnsureEvalThree() (gas: 45396) LibOpEnsureTest:testOpEnsureEvalUnhappy() (gas: 164901) LibOpEnsureTest:testOpEnsureEvalUnhappyOperand() (gas: 17085) LibOpEnsureTest:testOpEnsureEvalZero() (gas: 29675) -LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19712, ~: 19892) -LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13817, ~: 13709) +LibOpEnsureTest:testOpEnsureIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19725, ~: 19918) +LibOpEnsureTest:testOpEnsureIntegrityUnhappy((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13818, ~: 13741) LibOpEnsureTest:testOpEnsureOneOutput() (gas: 39634) -LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2055, μ: 18059, ~: 18106) +LibOpEnsureTest:testOpEnsureRun(bytes32,string) (runs: 2056, μ: 18061, ~: 18106) LibOpEqualToNPTest:testOpEqualToEval2Inputs() (gas: 339601) LibOpEqualToNPTest:testOpEqualToEval2InputsBothOne() (gas: 57700) LibOpEqualToNPTest:testOpEqualToEval2InputsFirstOneSecondZero() (gas: 58388) @@ -263,8 +271,8 @@ LibOpEqualToNPTest:testOpEqualToEval2ZeroInputs() (gas: 57723) LibOpEqualToNPTest:testOpEqualToEvalFail0Inputs() (gas: 30099) LibOpEqualToNPTest:testOpEqualToEvalFail1Input() (gas: 34409) LibOpEqualToNPTest:testOpEqualToEvalFail3Inputs() (gas: 42833) -LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19674, ~: 19906) -LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2064, μ: 17543, ~: 17466) +LibOpEqualToNPTest:testOpEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19676, ~: 19900) +LibOpEqualToNPTest:testOpEqualToRun(bytes32,bytes32) (runs: 2061, μ: 17543, ~: 17466) LibOpEqualToNPTest:testOpEqualToTwoOutputs() (gas: 41098) LibOpEqualToNPTest:testOpEqualToZeroOutputs() (gas: 40007) LibOpEveryTest:testOpEveryEval1FalseInput() (gas: 52064) @@ -275,11 +283,19 @@ LibOpEveryTest:testOpEveryEval2MixedInputs2() (gas: 57979) LibOpEveryTest:testOpEveryEval2TrueInputs() (gas: 58322) LibOpEveryTest:testOpEveryEvalFail() (gas: 29905) LibOpEveryTest:testOpEveryEvalZeroWithExponent() (gas: 59019) -LibOpEveryTest:testOpEveryIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19800, ~: 20051) -LibOpEveryTest:testOpEveryIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13865, ~: 13757) -LibOpEveryTest:testOpEveryRun(bytes32[]) (runs: 2052, μ: 20845, ~: 20873) +LibOpEveryTest:testOpEveryIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19803, ~: 20079) +LibOpEveryTest:testOpEveryIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13866, ~: 13789) +LibOpEveryTest:testOpEveryRun(bytes32[]) (runs: 2051, μ: 20844, ~: 20873) LibOpEveryTest:testOpEveryTwoOutputs() (gas: 36025) LibOpEveryTest:testOpEveryZeroOutputs() (gas: 34996) +LibOpExpTest:testOpExpEval() (gas: 279272) +LibOpExpTest:testOpExpEvalOperandDisallowed() (gas: 17610) +LibOpExpTest:testOpExpEvalTwoInputs() (gas: 40066) +LibOpExpTest:testOpExpEvalZeroInputs() (gas: 30226) +LibOpExpTest:testOpExpIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13796, ~: 13709) +LibOpExpTest:testOpExpRun(int224,int32,uint16) (runs: 2061, μ: 58506, ~: 59319) +LibOpExpTest:testOpExpTwoOutputs() (gas: 35919) +LibOpExpTest:testOpExpZeroOutputs() (gas: 34888) LibOpExponentialGrowthTest:testOpExponentialGrowthEval() (gas: 773499) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalFourInputs() (gas: 51625) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOneInput() (gas: 36408) @@ -288,29 +304,29 @@ LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoInputs() (gas: 41801) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoOutputs() (gas: 47358) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroInputs() (gas: 31066) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroOutputs() (gas: 46289) -LibOpExponentialGrowthTest:testOpExponentialGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13751, ~: 13662) -LibOpExponentialGrowthTest:testOpExponentialGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2064, μ: 69249, ~: 71060) +LibOpExponentialGrowthTest:testOpExponentialGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13752, ~: 13665) +LibOpExponentialGrowthTest:testOpExponentialGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2061, μ: 69418, ~: 71391) LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 99815) LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 115386) -LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2062, μ: 34999, ~: 35002) -LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2062, μ: 53571, ~: 53730) -LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2062, μ: 117979, ~: 117836) +LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2059, μ: 34950, ~: 34904) +LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,bytes32[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2059, μ: 53451, ~: 53548) +LibOpExternNPTest:testOpExternNPRunHappy(address,bytes32[],uint16,bytes32[],bytes32[]) (runs: 2060, μ: 117859, ~: 117617) LibOpFloorTest:testOpFloorEval() (gas: 254903) LibOpFloorTest:testOpFloorEvalOperandDisallowed() (gas: 17733) -LibOpFloorTest:testOpFloorIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13752, ~: 13663) -LibOpFloorTest:testOpFloorRun(bytes32,uint16) (runs: 2064, μ: 17155, ~: 17138) +LibOpFloorTest:testOpFloorIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13753, ~: 13666) +LibOpFloorTest:testOpFloorRun(bytes32,uint16) (runs: 2061, μ: 17155, ~: 17138) LibOpFloorTest:testOpFloorTwoInputs() (gas: 40208) LibOpFloorTest:testOpFloorTwoOutputs() (gas: 36016) LibOpFloorTest:testOpFloorZeroInputs() (gas: 30347) LibOpFloorTest:testOpFloorZeroOutputs() (gas: 35009) -LibOpFracTest:testOpFracEval() (gas: 337578) -LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 17651) -LibOpFracTest:testOpFracIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13794, ~: 13705) -LibOpFracTest:testOpFracRun(bytes32,uint16) (runs: 2064, μ: 17113, ~: 17096) -LibOpFracTest:testOpFracTwoInputs() (gas: 40095) -LibOpFracTest:testOpFracTwoOutputs() (gas: 35946) -LibOpFracTest:testOpFracZeroInputs() (gas: 30232) -LibOpFracTest:testOpFracZeroOutputs() (gas: 34894) +LibOpFracTest:testOpFracEval() (gas: 342970) +LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 18325) +LibOpFracTest:testOpFracIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13795, ~: 13708) +LibOpFracTest:testOpFracRun(bytes32,uint16) (runs: 2061, μ: 17113, ~: 17096) +LibOpFracTest:testOpFracTwoInputs() (gas: 40769) +LibOpFracTest:testOpFracTwoOutputs() (gas: 36620) +LibOpFracTest:testOpFracZeroInputs() (gas: 30906) +LibOpFracTest:testOpFracZeroOutputs() (gas: 35568) LibOpGetTest:testLibOpGetEvalKeyNotSet() (gas: 309076) LibOpGetTest:testLibOpGetEvalOperandDisallowed() (gas: 57640) LibOpGetTest:testLibOpGetEvalSetThenGet() (gas: 523074) @@ -321,12 +337,12 @@ LibOpGetTest:testLibOpGetEvalTwoInputs() (gas: 39793) LibOpGetTest:testLibOpGetEvalTwoOutputs() (gas: 35384) LibOpGetTest:testLibOpGetEvalZeroInputs() (gas: 29808) LibOpGetTest:testLibOpGetEvalZeroOutputs() (gas: 34354) -LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 20564, ~: 20822) -LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2064, μ: 19634, ~: 19638) -LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2064, μ: 47596, ~: 47610) -LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2064, μ: 49831, ~: 49835) -LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2064, μ: 51423, ~: 51427) -LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2064, μ: 24664, ~: 24668) +LibOpGetTest:testLibOpGetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 20565, ~: 20799) +LibOpGetTest:testLibOpGetRunState(bytes32,bytes32,uint16) (runs: 2061, μ: 19633, ~: 19638) +LibOpGetTest:testLibOpGetRunStateAndStore(bytes32,bytes32,bytes32,uint16) (runs: 2061, μ: 47596, ~: 47610) +LibOpGetTest:testLibOpGetRunStore(bytes32,bytes32,uint16) (runs: 2061, μ: 49830, ~: 49835) +LibOpGetTest:testLibOpGetRunStoreDifferentNamespace(bytes32,bytes32,uint16) (runs: 2061, μ: 51422, ~: 51427) +LibOpGetTest:testLibOpGetRunUnset(bytes32,uint16) (runs: 2061, μ: 24664, ~: 24668) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsBothOne() (gas: 59079) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 59788) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 59788) @@ -334,8 +350,8 @@ LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEval2ZeroInputs() (gas: LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail0Inputs() (gas: 31416) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail1Input() (gas: 35844) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToEvalFail3Inputs() (gas: 44193) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2064, μ: 13747, ~: 13680) -LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToRun(bytes32,bytes32) (runs: 2064, μ: 17393, ~: 17323) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2061, μ: 13748, ~: 13684) +LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToRun(bytes32,bytes32) (runs: 2061, μ: 17395, ~: 17323) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToTwoOutputs() (gas: 43037) LibOpGreaterThanOrEqualToTest:testOpGreaterThanOrEqualToZeroOutputs() (gas: 41812) LibOpGreaterThanTest:testOpGreaterThanEval1_0Gt1() (gas: 58634) @@ -349,8 +365,8 @@ LibOpGreaterThanTest:testOpGreaterThanEvalFail1Input() (gas: 34787) LibOpGreaterThanTest:testOpGreaterThanEvalFail3Inputs() (gas: 43128) LibOpGreaterThanTest:testOpGreaterThanEvalNeg1Gt0() (gas: 58734) LibOpGreaterThanTest:testOpGreaterThanEvalNeg1_1GtNeg1_2() (gas: 61438) -LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19693, ~: 19937) -LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2064, μ: 17419, ~: 17347) +LibOpGreaterThanTest:testOpGreaterThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19699, ~: 19974) +LibOpGreaterThanTest:testOpGreaterThanRun(bytes32,bytes32) (runs: 2061, μ: 17419, ~: 17347) LibOpGreaterThanTest:testOpGreaterThanTwoOutputs() (gas: 41886) LibOpGreaterThanTest:testOpGreaterThanZeroOutputs() (gas: 40838) LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 46351) @@ -358,8 +374,8 @@ LibOpHashNPTest:testOpHashNPEval1Input() (gas: 54960) LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 63303) LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 63977) LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 78532) -LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19712, ~: 19956) -LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2052, μ: 19458, ~: 19563) +LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19713, ~: 19975) +LibOpHashNPTest:testOpHashNPRun(bytes32[]) (runs: 2051, μ: 19459, ~: 19563) LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30876) LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29502) LibOpIfTest:testOpIfEval3InputsFirstOneSecondTwoThirdThree() (gas: 63725) @@ -378,25 +394,25 @@ LibOpIfTest:testOpIfEvalFail4Inputs() (gas: 46486) LibOpIfTest:testOpIfEvalTwoOutputs() (gas: 45990) LibOpIfTest:testOpIfEvalZeroExponent() (gas: 65029) LibOpIfTest:testOpIfEvalZeroOutputs() (gas: 44921) -LibOpIfTest:testOpIfIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19669, ~: 19949) -LibOpIfTest:testOpIfRun(bytes32,bytes32,bytes32) (runs: 2064, μ: 17013, ~: 17014) +LibOpIfTest:testOpIfIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19678, ~: 19994) +LibOpIfTest:testOpIfRun(bytes32,bytes32,bytes32) (runs: 2061, μ: 17013, ~: 17014) LibOpInvTest:testOpExpEvalOperandDisallowed() (gas: 17632) LibOpInvTest:testOpInvEval() (gas: 177042) -LibOpInvTest:testOpInvIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13752, ~: 13663) -LibOpInvTest:testOpInvRun(int224,int32,uint16) (runs: 2064, μ: 25067, ~: 25219) +LibOpInvTest:testOpInvIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13753, ~: 13666) +LibOpInvTest:testOpInvRun(int224,int32,uint16) (runs: 2060, μ: 25068, ~: 25219) LibOpInvTest:testOpInvTwoInputs() (gas: 40110) LibOpInvTest:testOpInvTwoOutputs() (gas: 35896) LibOpInvTest:testOpInvZeroInputs() (gas: 30227) LibOpInvTest:testOpInvZeroOutputs() (gas: 34889) -LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 54072) -LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 53030) -LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 52767) -LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 30682) -LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 39240) -LibOpIsZeroTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19792, ~: 20088) -LibOpIsZeroTest:testOpIsZeroRun(bytes32) (runs: 2064, μ: 16420, ~: 16421) -LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 37075) -LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 35781) +LibOpIsZeroTest:testOpIsZeroEval0e20Input() (gas: 53398) +LibOpIsZeroTest:testOpIsZeroEval1NonZeroInput() (gas: 52356) +LibOpIsZeroTest:testOpIsZeroEval1ZeroInput() (gas: 52093) +LibOpIsZeroTest:testOpIsZeroEvalFail0Inputs() (gas: 30008) +LibOpIsZeroTest:testOpIsZeroEvalFail2Inputs() (gas: 38566) +LibOpIsZeroTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19785, ~: 20063) +LibOpIsZeroTest:testOpIsZeroRun(bytes32) (runs: 2061, μ: 16420, ~: 16421) +LibOpIsZeroTest:testOpIsZeroTwoOutputs() (gas: 36401) +LibOpIsZeroTest:testOpIsZeroZeroOutputs() (gas: 35107) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsBothOne() (gas: 57260) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstOneSecondZero() (gas: 57972) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2InputsFirstZeroSecondOne() (gas: 57993) @@ -404,13 +420,13 @@ LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEval2ZeroInputs() (gas: 57284) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail0Inputs() (gas: 31151) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail1Input() (gas: 35506) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToEvalFail3Inputs() (gas: 43970) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19680, ~: 19988) -LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToRun(bytes32,bytes32) (runs: 2064, μ: 17399, ~: 17329) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19674, ~: 19959) +LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToRun(bytes32,bytes32) (runs: 2061, μ: 17401, ~: 17329) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToTwoOutputs() (gas: 42637) LibOpLessThanOrEqualToTest:testOpLessThanOrEqualToZeroOutputs() (gas: 41590) LibOpLessThanTest:testOpLessThanEval2InputsFirstZeroSecondOne() (gas: 58458) LibOpLessThanTest:testOpLessThanEval2ZeroInputs() (gas: 57705) -LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19696, ~: 19966) +LibOpLessThanTest:testOpLessThanIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19698, ~: 19928) LibOpLessThanTest:testOpLessThanNP1_0Lt1() (gas: 58458) LibOpLessThanTest:testOpLessThanNP1_1Lt1_2() (gas: 60950) LibOpLessThanTest:testOpLessThanNPEval2InputsBothOne() (gas: 57729) @@ -419,29 +435,29 @@ LibOpLessThanTest:testOpLessThanNPMinus1Lt0() (gas: 58513) LibOpLessThanTest:testOpLessThanNPMinus1_1LtMinus1_2() (gas: 61174) LibOpLessThanTest:testOpLessThanNPTwoOutputs() (gas: 41972) LibOpLessThanTest:testOpLessThanNPZeroOutputs() (gas: 40086) -LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2064, μ: 17423, ~: 17353) +LibOpLessThanTest:testOpLessThanRun(bytes32,bytes32) (runs: 2061, μ: 17426, ~: 17353) LibOpLessThanTest:testOpLessThanToNPEvalFail0Inputs() (gas: 30202) LibOpLessThanTest:testOpLessThanToNPEvalFail1Input() (gas: 34491) LibOpLessThanTest:testOpLessThanToNPEvalFail3Inputs() (gas: 42871) -LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 793593) -LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 51905) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 36731) -LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 19094) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoInputs() (gas: 42081) -LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 47597) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 31324) -LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 46548) -LibOpLinearGrowthTest:testOpLinearGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13751, ~: 13662) -LibOpLinearGrowthTest:testOpLinearGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2064, μ: 36145, ~: 36753) +LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 784157) +LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 51231) +LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 36057) +LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 18420) +LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoInputs() (gas: 41407) +LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 46923) +LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 30650) +LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 45874) +LibOpLinearGrowthTest:testOpLinearGrowthIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13752, ~: 13665) +LibOpLinearGrowthTest:testOpLinearGrowthRun(int224,int32,int224,int32,int224,int32,uint16) (runs: 2061, μ: 36143, ~: 36743) LibOpMaxNegativeValueTest:testOpMaxNegativeValueEval() (gas: 47417) LibOpMaxNegativeValueTest:testOpMaxNegativeValueEvalFail() (gas: 35217) LibOpMaxNegativeValueTest:testOpMaxNegativeValueRun() (gas: 16187) LibOpMaxNegativeValueTest:testOpMaxNegativeValueTwoOutputs() (gas: 31981) LibOpMaxNegativeValueTest:testOpMaxNegativeValueZeroOutputs() (gas: 30973) -LibOpMaxNegativeValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19664, ~: 19918) +LibOpMaxNegativeValueTest:testOpMaxValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19669, ~: 19918) LibOpMaxPositiveValueTest:testOpMaxPositiveValueEval() (gas: 47416) LibOpMaxPositiveValueTest:testOpMaxPositiveValueEvalFail() (gas: 35238) -LibOpMaxPositiveValueTest:testOpMaxPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19704, ~: 19928) +LibOpMaxPositiveValueTest:testOpMaxPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19704, ~: 19956) LibOpMaxPositiveValueTest:testOpMaxPositiveValueRun() (gas: 16196) LibOpMaxPositiveValueTest:testOpMaxPositiveValueTwoOutputs() (gas: 31980) LibOpMaxPositiveValueTest:testOpMaxPositiveValueZeroOutputs() (gas: 30972) @@ -451,60 +467,60 @@ LibOpMaxTest:testOpMaxEvalOneInput() (gas: 129970) LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 59037) LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 40781) LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 30221) -LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18209, ~: 18408) -LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13827, ~: 13719) -LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13849, ~: 13741) -LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2052, μ: 26586, ~: 26345) +LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18214, ~: 18442) +LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13828, ~: 13751) +LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13850, ~: 13773) +LibOpMaxTest:testOpMaxRun(bytes32[]) (runs: 2051, μ: 26583, ~: 26363) LibOpMaxUint256Test:testOpMaxUint256Eval() (gas: 47346) LibOpMaxUint256Test:testOpMaxUint256EvalFail() (gas: 35159) -LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19649, ~: 19898) +LibOpMaxUint256Test:testOpMaxUint256Integrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19659, ~: 19908) LibOpMaxUint256Test:testOpMaxUint256Run() (gas: 15997) LibOpMaxUint256Test:testOpMaxUint256TwoOutputs() (gas: 31943) LibOpMaxUint256Test:testOpMaxUint256ZeroOutputs() (gas: 30848) LibOpMinNegativeValueTest:testOpMinNegativeValueEval() (gas: 47437) LibOpMinNegativeValueTest:testOpMinNegativeValueEvalFail() (gas: 35239) -LibOpMinNegativeValueTest:testOpMinNegativeValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19678, ~: 19921) +LibOpMinNegativeValueTest:testOpMinNegativeValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19675, ~: 19926) LibOpMinNegativeValueTest:testOpMinNegativeValueRun() (gas: 16218) LibOpMinNegativeValueTest:testOpMinNegativeValueTwoOutputs() (gas: 32002) LibOpMinNegativeValueTest:testOpMinNegativeValueZeroOutputs() (gas: 30972) LibOpMinPositiveValueTest:testOpMinPositiveValueEval() (gas: 47417) LibOpMinPositiveValueTest:testOpMinPositiveValueEvalFail() (gas: 35196) -LibOpMinPositiveValueTest:testOpMinPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19660, ~: 19903) +LibOpMinPositiveValueTest:testOpMinPositiveValueIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19659, ~: 19922) LibOpMinPositiveValueTest:testOpMinPositiveValueRun() (gas: 16240) LibOpMinPositiveValueTest:testOpMinPositiveValueTwoOutputs() (gas: 32001) LibOpMinPositiveValueTest:testOpMinPositiveValueZeroOutputs() (gas: 30971) -LibOpMinTest:testOpMinEval2InputsHappy() (gas: 978854) -LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3503835) -LibOpMinTest:testOpMinEvalOneInput() (gas: 127134) -LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 59060) -LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30201) -LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18282, ~: 18446) -LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13850, ~: 13742) -LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13827, ~: 13719) -LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2052, μ: 26520, ~: 26627) -LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13828, ~: 13720) -LibOpMulTest:testOpMulEvalOneInput() (gas: 127168) -LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 91727) -LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 745526) -LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 61752) -LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 524350) -LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 55146) -LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30264) -LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18245, ~: 18415) -LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13871, ~: 13763) -LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2052, μ: 29034, ~: 26762) -LibOpMulTest:testOpMulTwoOutputs() (gas: 40802) -LibOpMulTest:testOpMulZeroOutputs() (gas: 39756) +LibOpMinTest:testOpMinEval2InputsHappy() (gas: 993008) +LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3548993) +LibOpMinTest:testOpMinEvalOneInput() (gas: 129830) +LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 61756) +LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30875) +LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18281, ~: 18516) +LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13851, ~: 13774) +LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13828, ~: 13751) +LibOpMinTest:testOpMinRun(bytes32[],uint16) (runs: 2051, μ: 26526, ~: 26609) +LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13829, ~: 13752) +LibOpMulTest:testOpMulEvalOneInput() (gas: 129864) +LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 95771) +LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 754962) +LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 62426) +LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 531764) +LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 55820) +LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30938) +LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18248, ~: 18477) +LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13872, ~: 13795) +LibOpMulTest:testOpMulRun(bytes32[]) (runs: 2051, μ: 29012, ~: 26565) +LibOpMulTest:testOpMulTwoOutputs() (gas: 41476) +LibOpMulTest:testOpMulZeroOutputs() (gas: 40430) LibOpPowTest:testOpPowEval() (gas: 541725) LibOpPowTest:testOpPowEvalOneInput() (gas: 35388) LibOpPowTest:testOpPowEvalOperandDisallowed() (gas: 17796) -LibOpPowTest:testOpPowIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13772, ~: 13683) +LibOpPowTest:testOpPowIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13773, ~: 13686) LibOpPowTest:testOpPowNegativeBaseError() (gas: 101004) -LibOpPowTest:testOpPowRun(int224,int32,int224,int32) (runs: 2064, μ: 65064, ~: 68645) +LibOpPowTest:testOpPowRun(int224,int32,int224,int32) (runs: 2061, μ: 65098, ~: 68645) LibOpPowTest:testOpPowThreeInputs() (gas: 45114) LibOpPowTest:testOpPowTwoOutputs() (gas: 40918) LibOpPowTest:testOpPowZeroOutputs() (gas: 39913) -LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2064, μ: 17660, ~: 17665) +LibOpSetTest:testLibOpSet(bytes32,bytes32) (runs: 2061, μ: 17660, ~: 17665) LibOpSetTest:testLibOpSetEvalOneInput() (gas: 34242) LibOpSetTest:testLibOpSetEvalOneOutput() (gas: 39880) LibOpSetTest:testLibOpSetEvalOperandsDisallowed() (gas: 56155) @@ -513,50 +529,57 @@ LibOpSetTest:testLibOpSetEvalThreeInputs() (gas: 44675) LibOpSetTest:testLibOpSetEvalTwoInputs() (gas: 258827) LibOpSetTest:testLibOpSetEvalTwoOutputs() (gas: 40502) LibOpSetTest:testLibOpSetEvalZeroInputs() (gas: 29423) -LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 20444, ~: 20711) +LibOpSetTest:testLibOpSetIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 20442, ~: 20691) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 880174) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128301) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44497) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40381) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34657) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39306) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2064, μ: 19739, ~: 19710) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2064, μ: 35798, ~: 35560) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 41992, ~: 42651) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2064, μ: 16833, ~: 16833) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 2057, μ: 19786, ~: 19779) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 2061, μ: 35800, ~: 35603) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 41992, ~: 42651) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(bytes32,uint8) (runs: 2060, μ: 16833, ~: 16833) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1055354) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 128890) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 116, μ: 19743, ~: 19207) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 116, μ: 36908, ~: 37164) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 116, μ: 40709, ~: 41177) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2064, μ: 16836, ~: 16836) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint8) (runs: 110, μ: 19717, ~: 19297) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8) (runs: 113, μ: 36984, ~: 37429) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 113, μ: 40794, ~: 41185) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(bytes32,uint8) (runs: 2059, μ: 16836, ~: 16836) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44621) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40441) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34716) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39390) +LibOpSqrtTest:testOpSqrtEval() (gas: 236800) +LibOpSqrtTest:testOpSqrtEvalBad() (gas: 65443) +LibOpSqrtTest:testOpSqrtEvalOperandDisallowed() (gas: 17651) +LibOpSqrtTest:testOpSqrtEvalTwoOutputs() (gas: 35958) +LibOpSqrtTest:testOpSqrtEvalZeroOutputs() (gas: 34904) +LibOpSqrtTest:testOpSqrtIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13752, ~: 13665) +LibOpSqrtTest:testOpSqrtRun(bytes32) (runs: 2061, μ: 48739, ~: 52873) LibOpStackNPTest:testOpStackEval() (gas: 66054) LibOpStackNPTest:testOpStackEvalSeveral() (gas: 90587) -LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2064, μ: 18900, ~: 18763) -LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2064, μ: 41378, ~: 41563) +LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,bytes32[],bytes32) (runs: 2061, μ: 18896, ~: 18713) +LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,bytes32[],uint16,uint256) (runs: 2061, μ: 41430, ~: 41563) LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 40060) LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 43046) -LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 116, μ: 2004899, ~: 1835418) +LibOpStackNPTest:testOpStackNPRun(bytes32[][],uint256) (runs: 113, μ: 2066173, ~: 1839115) LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 38605) LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41556) LibOpSubTest:testOpSubEvalOneInput() (gas: 129791) LibOpSubTest:testOpSubEvalThreeInputs() (gas: 226422) LibOpSubTest:testOpSubEvalTwoInputs() (gas: 343485) LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30182) -LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18249, ~: 18472) -LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13827, ~: 13719) -LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13828, ~: 13720) -LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2052, μ: 55617, ~: 54480) +LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18244, ~: 18418) +LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13828, ~: 13751) +LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13829, ~: 13752) +LibOpSubTest:testOpSubRun(bytes32[]) (runs: 2051, μ: 55812, ~: 54823) LibOpTimestampTest:testOpBlockTimestampNPEvalFail() (gas: 65915) LibOpTimestampTest:testOpBlockTimestampNPTwoOutputs() (gas: 58834) LibOpTimestampTest:testOpBlockTimestampNPZeroOutputs() (gas: 56709) -LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2064, μ: 85120, ~: 84795) -LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19670, ~: 19905) -LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2064, μ: 20592, ~: 20364) +LibOpTimestampTest:testOpTimestampEval(uint256) (runs: 2061, μ: 85119, ~: 84795) +LibOpTimestampTest:testOpTimestampIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19679, ~: 19990) +LibOpTimestampTest:testOpTimestampRun(uint256) (runs: 2061, μ: 20594, ~: 20364) LibOpUint256AddTest:testOpUint256AddEvalOneInput() (gas: 128471) LibOpUint256AddTest:testOpUint256AddEvalOperandsDisallowed() (gas: 95615) LibOpUint256AddTest:testOpUint256AddEvalThreeInputsHappy() (gas: 209954) @@ -565,10 +588,10 @@ LibOpUint256AddTest:testOpUint256AddEvalTwoInputsHappy() (gas: 280492) LibOpUint256AddTest:testOpUint256AddEvalTwoOutputs() (gas: 41472) LibOpUint256AddTest:testOpUint256AddEvalZeroInputs() (gas: 30890) LibOpUint256AddTest:testOpUint256AddEvalZeroOutputs() (gas: 40403) -LibOpUint256AddTest:testOpUint256AddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18250, ~: 18471) -LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13829, ~: 13721) -LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13827, ~: 13719) -LibOpUint256AddTest:testOpUint256AddRun(bytes32[]) (runs: 2052, μ: 19915, ~: 19497) +LibOpUint256AddTest:testOpUint256AddIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18249, ~: 18471) +LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13830, ~: 13753) +LibOpUint256AddTest:testOpUint256AddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13828, ~: 13751) +LibOpUint256AddTest:testOpUint256AddRun(bytes32[]) (runs: 2051, μ: 19914, ~: 19363) LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 771856) LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 143734) LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1408548) @@ -578,45 +601,45 @@ LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 61608) LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 41473) LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 30891) LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 40381) -LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18268, ~: 18424) -LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13849, ~: 13741) -LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13829, ~: 13721) -LibOpUint256DivTest:testOpUint256DivRun(bytes32[]) (runs: 2052, μ: 24849, ~: 25168) +LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18270, ~: 18440) +LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13850, ~: 13773) +LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13830, ~: 13753) +LibOpUint256DivTest:testOpUint256DivRun(bytes32[]) (runs: 2051, μ: 24848, ~: 25168) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalFourInputs() (gas: 56699) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2064, μ: 70344, ~: 70344) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalHappy(uint256) (runs: 2061, μ: 70344, ~: 70344) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOneInput() (gas: 37992) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalOperandDisallowed() (gas: 19291) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoInputs() (gas: 44331) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalTwoOutputs() (gas: 51365) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroInputs() (gas: 31785) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceEvalZeroOutputs() (gas: 50341) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13775, ~: 13686) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2062, μ: 24718, ~: 24718) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2064, μ: 63403, ~: 63403) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13776, ~: 13689) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceRun(address,address,address,uint256) (runs: 2060, μ: 24718, ~: 24718) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalHappy(uint256) (runs: 2061, μ: 63403, ~: 63403) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOneInput() (gas: 38031) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalOperandDisallowed() (gas: 19349) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalThreeInputs() (gas: 50232) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalTwoOutputs() (gas: 45101) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroInputs() (gas: 31888) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfEvalZeroOutputs() (gas: 44056) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13798, ~: 13709) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13799, ~: 13712) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfRun(address,address,uint256,uint16) (runs: 2061, μ: 24168, ~: 24168) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2064, μ: 56505, ~: 56505) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalHappy(uint256) (runs: 2061, μ: 56505, ~: 56505) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalOperandDisallowed() (gas: 19512) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoInputs() (gas: 44553) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalTwoOutputs() (gas: 38927) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroInputs() (gas: 32071) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyEvalZeroOutputs() (gas: 37854) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2064, μ: 13798, ~: 13709) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2063, μ: 23332, ~: 23332) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2062, μ: 609276, ~: 104920) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2064, μ: 19689, ~: 19908) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),bytes32) (runs: 2061, μ: 13799, ~: 13712) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyRun(address,uint256,uint16) (runs: 2061, μ: 23332, ~: 23332) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2058, μ: 104751, ~: 104920) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint8,uint16) (runs: 2061, μ: 19682, ~: 19908) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 31510) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35894) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 45235) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFailOperand() (gas: 22223) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfOneInput() (gas: 36424) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2062, μ: 24211, ~: 24211) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfRun(address,address,uint256,uint16) (runs: 2058, μ: 24211, ~: 24211) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfThreeInputs() (gas: 45755) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfTwoOutputs() (gas: 41750) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31944) @@ -630,11 +653,11 @@ LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 143866) LibOpUint256MulTest:testOpUint256MulEvalTwoOutputs() (gas: 41417) LibOpUint256MulTest:testOpUint256MulEvalZeroInputs() (gas: 30944) LibOpUint256MulTest:testOpUint256MulEvalZeroOutputs() (gas: 40416) -LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18205, ~: 18436) -LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13871, ~: 13763) -LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13828, ~: 13720) -LibOpUint256MulTest:testOpUint256MulRun(bytes32[]) (runs: 2052, μ: 18794, ~: 19053) -LibOpUint256PowTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18226, ~: 18444) +LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18204, ~: 18436) +LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13872, ~: 13795) +LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13829, ~: 13752) +LibOpUint256MulTest:testOpUint256MulRun(bytes32[]) (runs: 2051, μ: 18868, ~: 19078) +LibOpUint256PowTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18230, ~: 18456) LibOpUint256PowTest:testOpUint256PowEval2InputsHappy() (gas: 872829) LibOpUint256PowTest:testOpUint256PowEval2InputsUnhappy() (gas: 145846) LibOpUint256PowTest:testOpUint256PowEval3InputsHappy() (gas: 1981311) @@ -644,21 +667,21 @@ LibOpUint256PowTest:testOpUint256PowEvalOperandDisallowed() (gas: 62300) LibOpUint256PowTest:testOpUint256PowEvalTwoOutputs() (gas: 41602) LibOpUint256PowTest:testOpUint256PowEvalZeroInputs() (gas: 31083) LibOpUint256PowTest:testOpUint256PowEvalZeroOutputs() (gas: 40534) -LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13851, ~: 13743) -LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13828, ~: 13720) -LibOpUint256PowTest:testOpUint256PowRun(bytes32[]) (runs: 2052, μ: 19385, ~: 19304) -LibOpUint256SubTest:testOpUint256SubEvalOneInput() (gas: 131254) -LibOpUint256SubTest:testOpUint256SubEvalOperandsDisallowed() (gas: 99661) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsHappy() (gas: 212525) -LibOpUint256SubTest:testOpUint256SubEvalThreeInputsUnhappy() (gas: 116436) -LibOpUint256SubTest:testOpUint256SubEvalTwoInputsHappy() (gas: 284534) -LibOpUint256SubTest:testOpUint256SubEvalTwoOutputs() (gas: 42135) -LibOpUint256SubTest:testOpUint256SubEvalZeroInputs() (gas: 31575) -LibOpUint256SubTest:testOpUint256SubEvalZeroOutputs() (gas: 41067) -LibOpUint256SubTest:testOpUint256SubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2064, μ: 18242, ~: 18443) -LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13872, ~: 13764) -LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2064, μ: 13828, ~: 13720) -LibOpUint256SubTest:testOpUint256SubRun(bytes32[]) (runs: 2052, μ: 17660, ~: 17687) +LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13852, ~: 13775) +LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13829, ~: 13752) +LibOpUint256PowTest:testOpUint256PowRun(bytes32[]) (runs: 2051, μ: 19391, ~: 19309) +LibOpUint256SubTest:testOpUint256SubEvalOneInput() (gas: 128558) +LibOpUint256SubTest:testOpUint256SubEvalOperandsDisallowed() (gas: 95617) +LibOpUint256SubTest:testOpUint256SubEvalThreeInputsHappy() (gas: 209829) +LibOpUint256SubTest:testOpUint256SubEvalThreeInputsUnhappy() (gas: 115088) +LibOpUint256SubTest:testOpUint256SubEvalTwoInputsHappy() (gas: 280490) +LibOpUint256SubTest:testOpUint256SubEvalTwoOutputs() (gas: 41461) +LibOpUint256SubTest:testOpUint256SubEvalZeroInputs() (gas: 30901) +LibOpUint256SubTest:testOpUint256SubEvalZeroOutputs() (gas: 40393) +LibOpUint256SubTest:testOpUint256SubIntegrityHappy((uint256,uint256,uint256,bytes32[],uint256,bytes),uint8,uint16) (runs: 2061, μ: 18250, ~: 18418) +LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyOneInput((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13873, ~: 13796) +LibOpUint256SubTest:testOpUint256SubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,bytes32[],uint256,bytes)) (runs: 2061, μ: 13829, ~: 13752) +LibOpUint256SubTest:testOpUint256SubRun(bytes32[]) (runs: 2051, μ: 17590, ~: 17687) LibParseCommentsTest:testParseCommentAfterSources() (gas: 69689) LibParseCommentsTest:testParseCommentBetweenSources() (gas: 69745) LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 46231) @@ -711,7 +734,7 @@ LibParseInputsOnlyGasTest:testParseGasInputsOnly09() (gas: 52192) LibParseInputsOnlyTest:testParseInputsOnlyMultiple() (gas: 52451) LibParseInputsOnlyTest:testParseInputsOnlySingle() (gas: 51541) LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexBounds() (gas: 18858) -LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2064, μ: 44939, ~: 43980) +LibParseLiteralBoundLiteralHexTest:testParseLiteralBoundLiteralHexFuzz(string,bytes1,string) (runs: 2061, μ: 44962, ~: 43971) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE() (gas: 11195) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotE0() (gas: 11173) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatDotRevert() (gas: 11218) @@ -730,7 +753,7 @@ LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNegative LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatNonDecimal() (gas: 11150) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert0() (gas: 35135) LibParseLiteralDecimalParseDecimalFloatTest:testParseLiteralDecimalFloatPrecisionRevert1() (gas: 35045) -LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2064, μ: 27274, ~: 37882) +LibParseLiteralHexBoundHexTest:testParseLiteralHexRoundTrip(bytes32) (runs: 2061, μ: 27318, ~: 37882) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal00() (gas: 56730) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal01() (gas: 63896) LibParseLiteralIntegerDecimalTest:testParseIntegerLiteralDecimal02() (gas: 70152) @@ -749,23 +772,23 @@ LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex00() (gas: 55856) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex01() (gas: 61572) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHex02() (gas: 66623) LibParseLiteralIntegerHexTest:testParseIntegerLiteralHexUint256Max() (gas: 72869) -LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2061, μ: 16495, ~: 16416) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2062, μ: 30115, ~: 29992) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2061, μ: 19023, ~: 18937) -LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2051, μ: 31900, ~: 31390) -LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2050, μ: 13485, ~: 13384) -LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2050, μ: 24344, ~: 24269) +LibParseLiteralStringBoundTest:testParseStringLiteralBounds(string) (runs: 2059, μ: 16492, ~: 16416) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsInvalidCharBefore(string,uint256) (runs: 2059, μ: 30115, ~: 29987) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsParserOutOfBounds(string,uint256) (runs: 2059, μ: 19019, ~: 18937) +LibParseLiteralStringBoundTest:testParseStringLiteralBoundsTooLong(string) (runs: 2050, μ: 31904, ~: 31390) +LibParseLiteralStringTest:testParseStringLiteralAny(bytes) (runs: 2052, μ: 13479, ~: 13384) +LibParseLiteralStringTest:testParseStringLiteralCorrupt(bytes,uint256) (runs: 2052, μ: 24339, ~: 24261) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 54552) LibParseLiteralStringTest:testParseStringLiteralEmpty() (gas: 5643) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 103, μ: 68659, ~: 68457) -LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 114, μ: 65816, ~: 65523) -LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 103, μ: 69367, ~: 69457) -LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 113, μ: 61716, ~: 61825) +LibParseLiteralStringTest:testParseStringLiteralInvalidCharAfter(string,string) (runs: 102, μ: 68749, ~: 68569) +LibParseLiteralStringTest:testParseStringLiteralInvalidCharWithin(string,uint256) (runs: 111, μ: 65797, ~: 65240) +LibParseLiteralStringTest:testParseStringLiteralLongASCII(string) (runs: 102, μ: 69472, ~: 69704) +LibParseLiteralStringTest:testParseStringLiteralShortASCII(string) (runs: 111, μ: 61644, ~: 61798) LibParseLiteralStringTest:testParseStringLiteralSimple() (gas: 54654) -LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 108, μ: 75177, ~: 75793) +LibParseLiteralStringTest:testParseStringLiteralTwo(string,string) (runs: 105, μ: 75080, ~: 75764) LibParseLiteralSubParseableTest:testParseLiteralSubParseableBody() (gas: 64571) LibParseLiteralSubParseableTest:testParseLiteralSubParseableEmptyBody() (gas: 19630) -LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2062, μ: 89553, ~: 87701) +LibParseLiteralSubParseableTest:testParseLiteralSubParseableHappyFuzz(string,string,string) (runs: 2059, μ: 89633, ~: 87844) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchEmpty() (gas: 10659) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosed() (gas: 10619) LibParseLiteralSubParseableTest:testParseLiteralSubParseableMissingDispatchUnclosedWhitespace0() (gas: 10679) @@ -830,36 +853,36 @@ LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultSecon LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultThird() (gas: 55536) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnclosed() (gas: 52609) LibParseOperandDoublePerByteNoDefaultTest:testOperandDoublePerByteNoDefaultUnopened() (gas: 47193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2064, μ: 12114, ~: 12193) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2064, μ: 13578, ~: 13436) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2064, μ: 10367, ~: 10410) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2064, μ: 11731, ~: 11562) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2064, μ: 8643, ~: 8700) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2064, μ: 11709, ~: 11953) -LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2062, μ: 35362, ~: 35566) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValues(uint256,uint256,uint256) (runs: 2061, μ: 12115, ~: 12193) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1AllValuesThirdValueTooLarge(uint256,uint256,uint256) (runs: 2061, μ: 13578, ~: 13436) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValue(uint256,uint256) (runs: 2061, μ: 10368, ~: 10410) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstAndSecondValueSecondValueTooLarge(uint256,uint256) (runs: 2061, μ: 11731, ~: 11562) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueOnly(uint256) (runs: 2061, μ: 8644, ~: 8700) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1FirstValueTooLarge(int256) (runs: 2061, μ: 11709, ~: 11953) +LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1ManyValues(bytes32[]) (runs: 2061, μ: 35370, ~: 35566) LibParseOperandHandleOperand8M1M1Test:testHandleOperand8M1M1NoValues() (gas: 4679) -LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2064, μ: 34718, ~: 34636) +LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedAnyValues(bytes32[]) (runs: 2061, μ: 34755, ~: 34636) LibParseOperandHandleOperandDisallowedTest:testHandleOperandDisallowedNoValues() (gas: 3219) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2064, μ: 9918, ~: 10039) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2064, μ: 11257, ~: 11074) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2063, μ: 35152, ~: 35470) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultBothValuesWithinOneByte(uint256,uint256) (runs: 2061, μ: 9918, ~: 10039) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultFirstValueTooLarge(uint256,uint256) (runs: 2061, μ: 11259, ~: 11074) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultManyValues(bytes32[]) (runs: 2061, μ: 35174, ~: 35470) LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultNoValues() (gas: 4625) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2064, μ: 8807, ~: 9089) -LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2064, μ: 11278, ~: 11085) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2063, μ: 35046, ~: 35364) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultOneValue(uint256) (runs: 2061, μ: 8807, ~: 9089) +LibParseOperandHandleOperandDoublePerByteNoDefaultTest:testHandleOperandDoublePerByteNoDefaultSecondValueTooLarge(uint256,uint256) (runs: 2061, μ: 11278, ~: 11085) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1ManyValues(bytes32[]) (runs: 2061, μ: 35068, ~: 35364) LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1NoValues() (gas: 3891) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2064, μ: 8180, ~: 8200) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2064, μ: 9320, ~: 9095) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2064, μ: 9877, ~: 9901) -LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2064, μ: 11184, ~: 11003) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2064, μ: 34953, ~: 35145) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2064, μ: 34973, ~: 35165) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValue(uint256) (runs: 2061, μ: 8180, ~: 8217) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1OneValueTooLarge(uint256) (runs: 2061, μ: 9321, ~: 9095) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValues(uint256,uint256) (runs: 2061, μ: 9878, ~: 9901) +LibParseOperandHandleOperandM1M1Test:testHandleOperandM1M1TwoValuesSecondValueTooLarge(uint256,uint256) (runs: 2061, μ: 11184, ~: 11003) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullManyValues(bytes32[]) (runs: 2061, μ: 34990, ~: 35145) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultManyValues(bytes32[]) (runs: 2061, μ: 35010, ~: 35165) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultNoValues() (gas: 4599) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2064, μ: 7612, ~: 7893) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoDefaultSingleValue(uint256) (runs: 2061, μ: 7613, ~: 7893) LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullNoValues() (gas: 3266) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2064, μ: 7651, ~: 7936) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2064, μ: 9290, ~: 9499) -LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2064, μ: 9331, ~: 9540) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValue(uint256) (runs: 2061, μ: 7652, ~: 7936) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueDisallowed(uint256) (runs: 2061, μ: 9290, ~: 9499) +LibParseOperandHandleOperandSingleFullTest:testHandleOperandSingleFullSingleValueNoDefaultDisallowed(uint256) (runs: 2061, μ: 9332, ~: 9540) LibParseOperandM1M1Test:testOperandM1M1Both() (gas: 57649) LibParseOperandM1M1Test:testOperandM1M1BothZero() (gas: 55824) LibParseOperandM1M1Test:testOperandM1M1Elided() (gas: 51802) @@ -871,13 +894,13 @@ LibParseOperandM1M1Test:testOperandM1M1SecondOverflow() (gas: 53500) LibParseOperandM1M1Test:testOperandM1M1SecondZero() (gas: 57377) LibParseOperandM1M1Test:testOperandM1M1Unclosed() (gas: 251386) LibParseOperandM1M1Test:testOperandM1M1Unopened() (gas: 49346) -LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 113, μ: 42975, ~: 42972) -LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 116, μ: 359664, ~: 356850) -LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 114, μ: 42852, ~: 42849) -LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 116, μ: 154937, ~: 157351) -LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 116, μ: 274418, ~: 266789) +LibParseOperandParseOperandTest:testParseOperandEmptyOperand(string) (runs: 109, μ: 42975, ~: 42972) +LibParseOperandParseOperandTest:testParseOperandFourDecimalLiterals(bool[4],int256[4],string[5],string) (runs: 111, μ: 360421, ~: 356408) +LibParseOperandParseOperandTest:testParseOperandNoOpeningCharacter(string) (runs: 111, μ: 42852, ~: 42849) +LibParseOperandParseOperandTest:testParseOperandSingleDecimalLiteral(bool,int256,string,string,string) (runs: 113, μ: 158924, ~: 159209) +LibParseOperandParseOperandTest:testParseOperandThreeDecimalLiterals(bool,bool,bool,int256,int256,int256,string,string,string,string,string) (runs: 113, μ: 278112, ~: 272979) LibParseOperandParseOperandTest:testParseOperandTooManyValues() (gas: 54582) -LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 116, μ: 214051, ~: 214817) +LibParseOperandParseOperandTest:testParseOperandTwoDecimalLiterals(bool,bool,int256,int256,string,string,string,string) (runs: 112, μ: 214341, ~: 215672) LibParseOperandParseOperandTest:testParseOperandUnclosed() (gas: 54141) LibParseOperandParseOperandTest:testParseOperandUnexpectedChars() (gas: 51419) LibParseOperandSingleFullTest:testOperandSingleFullElided() (gas: 51178) @@ -896,16 +919,16 @@ LibParseOperandSingleFullTest:testOperandSingleFullUint16MaxOverflow() (gas: 514 LibParseOperandSingleFullTest:testOperandSingleFullUnclosed() (gas: 49874) LibParseOperandSingleFullTest:testOperandSingleFullUnopened() (gas: 48263) LibParseOperandSingleFullTest:testOperandSingleFullZero() (gas: 54245) -LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2064, μ: 9457, ~: 9402) +LibParseParseWordTest:testLibParseParseWordEnd(uint256) (runs: 2061, μ: 9458, ~: 9402) LibParseParseWordTest:testLibParseParseWordExamples() (gas: 26983) -LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2050, μ: 6477, ~: 6257) -LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2062, μ: 9726, ~: 9660) -LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 116, μ: 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: 116, μ: 16198, ~: 15980) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 114, μ: 170723, ~: 156164) -LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 114, μ: 347430, ~: 359033) +LibParseParseWordTest:testLibParseParseWordReferenceImplementation(bytes,uint256) (runs: 2052, μ: 6477, ~: 6257) +LibParseParseWordTest:testLibParseParseWordTooLong(bytes) (runs: 2057, μ: 9726, ~: 9660) +LibParsePragmaKeywordTest:testPragmaKeywordNoWhitespace(uint256,string) (runs: 113, μ: 8977, ~: 8938) +LibParsePragmaKeywordTest:testPragmaKeywordNoop((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),string) (runs: 113, μ: 16004, ~: 15977) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserBasic(string,address,uint256,string) (runs: 111, μ: 173206, ~: 158056) +LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserCoupleOfAddresses(string,string,address,address,uint256,string) (runs: 111, μ: 355639, ~: 371421) LibParsePragmaKeywordTest:testPragmaKeywordParseSubParserSpecificStrings() (gas: 254483) -LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 116, μ: 19940, ~: 18056) +LibParsePragmaKeywordTest:testPragmaKeywordWhitespaceNoHex(uint256,string) (runs: 113, μ: 19925, ~: 17398) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored00() (gas: 8389) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored01() (gas: 8451) LibParseSingleLHSIgnoredGasTest:testParseGasSingleLHSIgnored02() (gas: 8537) @@ -981,66 +1004,66 @@ 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: 2064, μ: 20475, ~: 20339) -LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2064, μ: 17755, ~: 17668) -LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2064, μ: 313486, ~: 261966) -LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2064, μ: 17719, ~: 17632) -LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2064, μ: 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: 2061, μ: 20464, ~: 20339) +LibParseStackNameTest:testPushAndRetrieveStackNameDoubleIdentical((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2061, μ: 17745, ~: 17668) +LibParseStackNameTest:testPushAndRetrieveStackNameMany((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2061, μ: 313417, ~: 261608) +LibParseStackNameTest:testPushAndRetrieveStackNameSingle((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),bytes32) (runs: 2061, μ: 17709, ~: 17632) +LibParseStateConstantValueBloomTest:testConstantValueBloom(bytes32) (runs: 2061, μ: 3330, ~: 3330) LibParseStateConstantValueBloomTest:testConstantValueBloomAllBits() (gas: 45879) -LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2064, μ: 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: 2064, μ: 147899, ~: 144376) -LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2064, μ: 13350, ~: 13470) -LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2064, μ: 7158, ~: 7158) +LibParseStateConstantValueBloomTest:testConstantValueBloomSingleBit(bytes32) (runs: 2061, μ: 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: 2061, μ: 148399, ~: 144875) +LibParseStateNewActiveSourcePointerTest:testAlignedOldPointer(uint256,uint256) (runs: 2061, μ: 13350, ~: 13470) +LibParseStateNewActiveSourcePointerTest:testPostUnalignedNewPointer(uint256) (runs: 2061, μ: 7158, ~: 7158) LibParseStateNewActiveSourcePointerTest:testPreUnalignedNewPointer() (gas: 9188) -LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2064, μ: 4802, ~: 4799) -LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2064, μ: 6476, ~: 6474) -LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2064, μ: 225155, ~: 224765) -LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2064, μ: 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: 2064, μ: 134524, ~: 131588) -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: 2064, μ: 17008, ~: 16935) -LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2064, μ: 44736, ~: 45088) -LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2064, μ: 15489, ~: 15494) +LibParseStateNewActiveSourcePointerTest:testZeroOldPointer(bytes) (runs: 2061, μ: 4802, ~: 4799) +LibParseStatePushConstantValueTest:testPushConstantValueEmpty(bytes,bytes,bytes,bytes) (runs: 2061, μ: 6476, ~: 6474) +LibParseStatePushConstantValueTest:testPushConstantValueMany(bytes32[]) (runs: 2061, μ: 225424, ~: 224765) +LibParseStatePushConstantValueTest:testPushConstantValueSingle(bytes32) (runs: 2061, μ: 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: 2061, μ: 134972, ~: 131964) +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: 2061, μ: 16998, ~: 16935) +LibParseStatePushSubParserTest:testPushSubParserOverflow((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),uint256) (runs: 2061, μ: 44705, ~: 45083) +LibParseStatePushSubParserTest:testPushSubParserZero((uint256,uint256,uint256,uint256,uint256,uint256,bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes,bytes,bytes32[],uint256,bytes,bytes),address) (runs: 2061, μ: 15479, ~: 15488) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParen() (gas: 48678) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested() (gas: 68700) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested2() (gas: 70248) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested3() (gas: 80148) LibParseUnclosedLeftParenTest:testParseUnclosedLeftParenNested4() (gas: 80013) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2062, μ: 46790, ~: 46791) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2064, μ: 52910, ~: 52956) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadIgnoredTail(uint8) (runs: 2059, μ: 46790, ~: 46791) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSBadNamedTail(uint8,bytes) (runs: 2061, μ: 52910, ~: 52956) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOF() (gas: 132631) LibParseUnexpectedLHSTest:testParseUnexpectedLHSEOL() (gas: 132654) -LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2062, μ: 46382, ~: 46382) +LibParseUnexpectedLHSTest:testParseUnexpectedLHSSingleChar(uint8) (runs: 2059, μ: 46382, ~: 46382) LibParseUnexpectedLHSTest:testParseUnexpectedLHSUnderscoreTail() (gas: 134986) -LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2064, μ: 46615, ~: 46615) +LibParseUnexpectedRHSTest:testParseUnexpectedRHS(uint8) (runs: 2060, μ: 46615, ~: 46615) LibParseUnexpectedRHSTest:testParseUnexpectedRHSLeftParen() (gas: 46106) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 50722) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 56990) -LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2064, μ: 13231, ~: 13163) -LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2064, μ: 11435, ~: 11167) -RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 8618001) -RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 8630601) -RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2064, μ: 8625442, ~: 8625442) +LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2061, μ: 13231, ~: 13163) +LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2061, μ: 11433, ~: 11167) +RainterpreterExpressionDeployerDeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 8675704) +RainterpreterExpressionDeployerDescribedByMetaV1Test:testRainterpreterExpressionDeployerDescribedByMetaV1Happy() (gas: 8688568) +RainterpreterExpressionDeployerIERC165Test:testRainterpreterExpressionDeployerIERC165(bytes4) (runs: 2061, μ: 8683145, ~: 8683145) RainterpreterExpressionDeployerMetaTest:testRainterpreterExpressionDeployerExpectedConstructionMetaHash() (gas: 6221) -RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2064, μ: 3409362, ~: 3409362) -RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2064, μ: 3530562, ~: 3530562) -RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17635206) -RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10632861) -RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10636153) -RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3529568) -RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3537642) -RainterpreterParserPointersTest:testParserParseMeta() (gas: 4764457) -RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 3416437) +RainterpreterIERC165Test:testRainterpreterIERC165(bytes4) (runs: 2061, μ: 3452675, ~: 3452675) +RainterpreterParserIERC165Test:testRainterpreterParserIERC165(bytes4) (runs: 2061, μ: 3538978, ~: 3538978) +RainterpreterParserParserPragma:testParsePragmaNoPragma() (gas: 17677266) +RainterpreterParserParserPragma:testParsePragmaSinglePragma() (gas: 10658099) +RainterpreterParserParserPragma:testParsePragmaWithInterstitial() (gas: 10661391) +RainterpreterParserPointersTest:testLiteralParserFunctionPointers() (gas: 3537984) +RainterpreterParserPointersTest:testOperandHandlerFunctionPointers() (gas: 3546395) +RainterpreterParserPointersTest:testParserParseMeta() (gas: 4979631) +RainterpreterPointersTest:testOpcodeFunctionPointers() (gas: 3460087) RainterpreterReferenceExternContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 2160790) RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 2160375) RainterpreterReferenceExternContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 2159071) RainterpreterReferenceExternDescribedByMetaV1:testRainterpreterReferenceExternDescribedByMetaV1Happy() (gas: 2081641) -RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2064, μ: 2093899, ~: 2093899) +RainterpreterReferenceExternIERC165Test:testRainterpreterReferenceExternIERC165(bytes4) (runs: 2061, μ: 2093899, ~: 2093899) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappySugared() (gas: 2184531) RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncHappyUnsugared() (gas: 2178094) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 116, μ: 3597, ~: 3597) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 116, μ: 764805, ~: 770064) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 116, μ: 2095518, ~: 2095759) -RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 103, μ: 2091856, ~: 2091662) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncIntegrity(bytes32,uint256,uint256) (runs: 113, μ: 3597, ~: 3597) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncRun(bytes32,bytes32[]) (runs: 113, μ: 739573, ~: 753647) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseKnownWord(uint16,bytes1) (runs: 113, μ: 2095508, ~: 2095759) +RainterpreterReferenceExternIntIncTest:testRainterpreterReferenceExternIntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 100, μ: 2091863, ~: 2091662) RainterpreterReferenceExternPointersTest:testIntegrityFunctionPointers() (gas: 2081736) RainterpreterReferenceExternPointersTest:testOpcodeFunctionPointers() (gas: 2081779) RainterpreterReferenceExternPointersTest:testSubParserFunctionPointers() (gas: 2082202) @@ -1048,13 +1071,13 @@ RainterpreterReferenceExternPointersTest:testSubParserLiteralParsers() (gas: 208 RainterpreterReferenceExternPointersTest:testSubParserOperandParsers() (gas: 2082229) RainterpreterReferenceExternPointersTest:testSubParserParseMeta() (gas: 22017) RainterpreterReferenceExternRepeatTest:testRainterpreterReferenceExternRepeatHappy() (gas: 2213082) -RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2064, μ: 2168232, ~: 2168321) +RainterpreterReferenceExternStackOperandTest:testRainterpreterReferenceExternStackOperandSingle(uint256) (runs: 2061, μ: 2168233, ~: 2168321) RainterpreterReferenceExternUnknownWordTest:testRainterpreterReferenceExternUnknownWord() (gas: 2129396) RainterpreterStateOverlayTest:testStateOverlayGet() (gas: 52416) RainterpreterStateOverlayTest:testStateOverlaySet() (gas: 83156) -RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2064, μ: 229923, ~: 229923) -RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 105, μ: 1602851, ~: 1605247) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 116, μ: 3388156, ~: 3286339) -RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 116, μ: 1922218, ~: 1924733) -RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 111, μ: 249445, ~: 249891) +RainterpreterStoreIERC165Test:testRainterpreterStoreIERC165(bytes4) (runs: 2061, μ: 229923, ~: 229923) +RainterpreterStoreTest:testRainterpreterStoreSetGetDupes((uint256,bytes32[11])[]) (runs: 104, μ: 1610777, ~: 1605278) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesMany((uint256,bytes32[])[]) (runs: 113, μ: 3450711, ~: 3306760) +RainterpreterStoreTest:testRainterpreterStoreSetGetNoDupesSingle(uint256,bytes32[]) (runs: 113, μ: 1872440, ~: 1898212) +RainterpreterStoreTest:testRainterpreterStoreSetOddLength(uint256,bytes32[]) (runs: 109, μ: 249454, ~: 250199) RainterpreterTest:testRainterpreterOddFunctionPointersLength() (gas: 3696) \ No newline at end of file diff --git a/src/generated/Rainterpreter.pointers.sol b/src/generated/Rainterpreter.pointers.sol index 8972ab717..e89580f68 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(0x7a6f6c2f96777e97914658d74fdcfd399e09f3c52625e9a29356c256f65e7ad1); +bytes32 constant BYTECODE_HASH = bytes32(0x9a2b0c327fc4c41a99ab23f8e3c53a561d1e036de4f3fdfd40101cd261d86cc5); /// @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"0851088308a70a330afc0b0e0b200b390b5d0b910ba20bb30c550c740d320de20e660fa810db0d3211d41286132813a013b113c213c213d3143e154915c815e115f51654166d168616bf16ea1703171c1765178c179f1801184f189d18eb19391947199519b81a061a371a451a531a611aaf1ae01b111b5f1b901bc11c0f1c3c1c5f1cad1da3"; + hex"085a088c08b00a3c0b050b170b290b420b660b9a0bab0bbc0c5e0c7d0d3b0deb0e6f0fb110e40d3b11dd128f133113a913ba13cb13cb13dc1447155215d115ea15fe165d1676168f16c816f3170c1725176e179517a8180a185818a618f419421950199e19c11a0f1a401a841a921aa01aae1afc1b2d1b5e1bac1bdd1c0e1c5c1c891cac1cfa1df0"; diff --git a/src/generated/RainterpreterExpressionDeployer.pointers.sol b/src/generated/RainterpreterExpressionDeployer.pointers.sol index f209660e3..bbfac0f6d 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(0x3a3a3679560a95636acc278e1222b00d4f9f6d8f5f9198f2be9d8d49597cb14d); +bytes32 constant BYTECODE_HASH = bytes32(0xb13338c000917efed437eb17269fc4ed086e147c98ad73ab3ce7ef90a97bbc70); /// @dev The hash of the meta that describes the contract. -bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xb7ce324b6101ee19a2d9653f7b31efe355ed0d8c4663a4e7cb9dc63b59b94bc7); +bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0x1856b55328ed5bd3f5e2390acf6d07222a82c5d0f834c320c0b7ce538c069c1e); /// @dev The function pointers for the integrity check fns. bytes constant INTEGRITY_FUNCTION_POINTERS = - hex"0ed00f4e0fb2112c11361136114011491164120a120a126612de12eb1136114012eb113611401136113611361140112c112c112c112c12f5131a13341136113612f51136113612eb11401136113612eb12eb112c133e133e133e133e133e1140133e11361358112c114011401140133e112c112c133e112c112c135811361140135811401334"; + hex"0ed80f560fba1134113e113e11481151116c12121212126e12e612f3113e114812f3113e1148113e113e113e1148113411341134113412fd1322133c113e113e12fd113e113e12f31148113e113e12f312f311341346134613461346134611481346113e1360113411481148114811481346113411341346113411341360113e114813601148133c"; diff --git a/src/generated/RainterpreterParser.pointers.sol b/src/generated/RainterpreterParser.pointers.sol index a911519f7..c5bfe66d6 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(0x00c53169f4e29f4b3b3db1358da530c2ca03a751b674b0ddc045437ac968cf1a); +bytes32 constant BYTECODE_HASH = bytes32(0x61765f108a4eafb7e39d931d12e91c4239dc9b5fd31d5dcd388366c10ed0d7bc); /// @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(0x00c53169f4e29f4b3b3db1358da530c2ca03a /// 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"027360018812c0058102300804a1a02000120192e89864d1586010788a0800310122000002000000000000000000000000000000000005000000000000000000000000253bfdf302d3ac012ac8268505b44edf34182f2a14690c630d83a7eb32c5853a08ccb48c3358350a1c21b6883f98a6e5262057e32f7e09af17b43369161b9cec2b5ab5e8243c910831738e091e8a3fa7150113a32e22720213c659b9225ac7c1285da1bd41cc18770aa63c19048eb6fa018179d300dfb6a91fde8a882cb772ea03596d3111fd7ab9427b42922d4396833e58726b1d2330703694005b21f438852081752c3cff19581ac1a49e30ffeff037e1eec73824bdfe2760978f232d6a9a09d520ad061480a0294c65fb0ecb8d4d0b8b587210e7c1b518e4b09907152b041261f729198ab90539f8942b1b45c1270f22a49a3ba6838c4060cc7c0c668e383a10da5035d6d3e33de7d2ff"; + hex"027360018812c0058112300804a1a02000120192e89864d1586010788a0800310122000002000000000000000000000000000000000005000000000000000000000000253bfdf302d3ac012ac8268505b44edf35182f2a14690c630d83a7eb32c5853a08ccb48c3358350a1c21b6884098a6e5262057e32f7e09af17b43369161b9cec2b5ab5e8243c910831738e091e8a3fa7150113a32e22720213c659b9225ac7c1285da1bd42cc18770aa63c19048eb6fa018179d300dfb6a91fde8a882cb772ea03596d3111fd7ab9437b42922d4396833f58726b1d2330703794005b21f438852081752c3dff19581ac1a49e30ffeff038e1eec73924bdfe2760978f232d6a9a09d520ad061480a0294c65fb344763440ecb8d4d0b8b587210e7c1b518e4b09907152b041261f729198ab9053af8942b1b45c1270f22a49a3ca6838c4160cc7c0c668e383b10da5036d6d3e33ee7d2ff"; /// @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"1ab51ab51ab51b8a1ca11ca11ca11b8a1b8a1ab51ab51ab51ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ca11ab51ca11ca1"; + hex"1abd1abd1abd1b921ca91ca91ca91b921b921abd1abd1abd1ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91ca91abd1ca91ca9"; /// @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"15fd182f18721910"; +bytes constant LITERAL_PARSER_FUNCTION_POINTERS = hex"16051837187a1918"; diff --git a/src/lib/op/LibAllStandardOps.sol b/src/lib/op/LibAllStandardOps.sol index 1679c6620..43fa7fda5 100644 --- a/src/lib/op/LibAllStandardOps.sol +++ b/src/lib/op/LibAllStandardOps.sol @@ -76,7 +76,7 @@ import {LibOpAvg} from "./math/LibOpAvg.sol"; import {LibOpMul} from "./math/LibOpMul.sol"; import {LibOpDiv} from "./math/LibOpDiv.sol"; import {LibOpE} from "./math/LibOpE.sol"; -// import {LibOpExp} from "./math/LibOpExp.sol"; +import {LibOpExp} from "./math/LibOpExp.sol"; // import {LibOpExp2} from "./math/LibOpExp2.sol"; import {LibOpFloor} from "./math/LibOpFloor.sol"; import {LibOpFrac} from "./math/LibOpFrac.sol"; @@ -112,7 +112,7 @@ import {LibParseLiteralHex} from "../parse/literal/LibParseLiteralHex.sol"; import {LibParseLiteralSubParseable} from "../parse/literal/LibParseLiteralSubParseable.sol"; /// @dev Number of ops currently provided by `AllStandardOps`. -uint256 constant ALL_STANDARD_OPS_LENGTH = 67; +uint256 constant ALL_STANDARD_OPS_LENGTH = 68; /// @title LibAllStandardOps /// @notice Every opcode available from the core repository laid out as a single @@ -273,7 +273,7 @@ library LibAllStandardOps { // AuthoringMetaV2("ceil", "Ceiling of a number."), AuthoringMetaV2("div", "Divides the first number by all other numbers. Errors if any divisor is zero."), AuthoringMetaV2("e", "The mathematical constant e."), - // AuthoringMetaV2("exp", "Natural exponential e^x. Errors if the exponentiation exceeds `max-value()`."), + AuthoringMetaV2("exp", "Natural exponential e^x."), // AuthoringMetaV2("exp2", "Binary exponential 2^x where x. Errors if the exponentiation exceeds `max-value()`."), AuthoringMetaV2("floor", "Floor of a number."), AuthoringMetaV2("frac", "Fractional part of a number."), @@ -472,8 +472,8 @@ library LibAllStandardOps { LibParseOperand.handleOperandDisallowed, // e LibParseOperand.handleOperandDisallowed, - // // exp - // LibParseOperand.handleOperandDisallowed, + // exp + LibParseOperand.handleOperandDisallowed, // // exp2 // LibParseOperand.handleOperandDisallowed, // floor @@ -604,7 +604,7 @@ library LibAllStandardOps { // LibOpCeil.integrity, LibOpDiv.integrity, LibOpE.integrity, - // LibOpExp.integrity, + LibOpExp.integrity, // LibOpExp2.integrity, LibOpFloor.integrity, LibOpFrac.integrity, @@ -715,7 +715,7 @@ library LibAllStandardOps { // LibOpCeil.run, LibOpDiv.run, LibOpE.run, - // LibOpExp.run, + LibOpExp.run, // LibOpExp2.run, LibOpFloor.run, LibOpFrac.run, diff --git a/src/lib/op/math/LibOpExp.sol b/src/lib/op/math/LibOpExp.sol index 845c17f8d..ec6b3e790 100644 --- a/src/lib/op/math/LibOpExp.sol +++ b/src/lib/op/math/LibOpExp.sol @@ -1,43 +1,49 @@ // SPDX-License-Identifier: CAL pragma solidity ^0.8.18; -// import {UD60x18, exp} from "prb-math/UD60x18.sol"; -// import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -// import {Pointer} from "rain.solmem/lib/LibPointer.sol"; -// import {InterpreterState} from "../../state/LibInterpreterState.sol"; -// import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; +import {OperandV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {Pointer} from "rain.solmem/lib/LibPointer.sol"; +import {InterpreterState} from "../../state/LibInterpreterState.sol"; +import {IntegrityCheckState} from "../../integrity/LibIntegrityCheck.sol"; +import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; -// /// @title LibOpExp -// /// @notice Opcode for the natural exponential e^x as decimal 18 fixed point. -// library LibOpExp { -// function integrity(IntegrityCheckState memory, Operand) internal pure returns (uint256, uint256) { -// // There must be one inputs and one output. -// return (1, 1); -// } +/// @title LibOpExp +/// @notice Opcode for the natural exponential e^x as decimal floating point. +library LibOpExp { + using LibDecimalFloat for Float; -// /// exp -// /// 18 decimal fixed point natural exponent of a number. -// function run(InterpreterState memory, Operand, Pointer stackTop) internal pure returns (Pointer) { -// uint256 a; -// assembly ("memory-safe") { -// a := mload(stackTop) -// } -// a = UD60x18.unwrap(exp(UD60x18.wrap(a))); + function integrity(IntegrityCheckState memory, OperandV2) internal pure returns (uint256, uint256) { + // There must be one inputs and one output. + return (1, 1); + } -// assembly ("memory-safe") { -// mstore(stackTop, a) -// } -// return stackTop; -// } + /// exp + /// decimal floating point natural exponent of a number. + function run(InterpreterState memory, OperandV2, Pointer stackTop) internal view returns (Pointer) { + Float a; + assembly ("memory-safe") { + a := mload(stackTop) + } + a = LibDecimalFloat.FLOAT_E.pow(a, LibDecimalFloat.LOG_TABLES_ADDRESS); -// /// Gas intensive reference implementation of exp for testing. -// function referenceFn(InterpreterState memory, Operand, uint256[] memory inputs) -// internal -// pure -// returns (uint256[] memory) -// { -// uint256[] memory outputs = new uint256[](1); -// outputs[0] = UD60x18.unwrap(exp(UD60x18.wrap(inputs[0]))); -// return outputs; -// } -// } + assembly ("memory-safe") { + mstore(stackTop, a) + } + return stackTop; + } + + /// Gas intensive reference implementation of exp for testing. + function referenceFn(InterpreterState memory, OperandV2, StackItem[] memory inputs) + internal + view + returns (StackItem[] memory) + { + Float a = Float.wrap(StackItem.unwrap(inputs[0])); + a = LibDecimalFloat.FLOAT_E.pow(a, LibDecimalFloat.LOG_TABLES_ADDRESS); + + StackItem[] memory outputs = new StackItem[](1); + outputs[0] = StackItem.wrap(Float.unwrap(a)); + return outputs; + } +} diff --git a/test/src/lib/op/math/LibOpExp.t.sol b/test/src/lib/op/math/LibOpExp.t.sol index 0e0d230fc..7529fc2ad 100644 --- a/test/src/lib/op/math/LibOpExp.t.sol +++ b/test/src/lib/op/math/LibOpExp.t.sol @@ -1,59 +1,85 @@ // SPDX-License-Identifier: CAL pragma solidity =0.8.25; -// import {OpTest, IntegrityCheckState, Operand, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; -// import {LibOpExp} from "src/lib/op/math/LibOpExp.sol"; -// import {LibOperand} from "test/lib/operand/LibOperand.sol"; - -// contract LibOpExpTest is OpTest { -// /// Directly test the integrity logic of LibOpExp. -// /// Inputs are always 1, outputs are always 1. -// function testOpExpIntegrity(IntegrityCheckState memory state, Operand operand) external pure { -// (uint256 calcInputs, uint256 calcOutputs) = LibOpExp.integrity(state, operand); -// assertEq(calcInputs, 1); -// assertEq(calcOutputs, 1); -// } - -// /// Directly test the runtime logic of LibOpExp. -// function testOpExpRun(uint256 a, uint16 operandData) public view { -// a = bound(a, 0, type(uint64).max - 1e18); -// InterpreterState memory state = opTestDefaultInterpreterState(); - -// Operand operand = LibOperand.build(1, 1, operandData); -// uint256[] memory inputs = new uint256[](1); -// inputs[0] = a; - -// opReferenceCheck(state, operand, LibOpExp.referenceFn, LibOpExp.integrity, LibOpExp.run, inputs); -// } - -// /// Test the eval of `exp`. -// function testOpExpEval() external view { -// checkHappy("_: exp(0);", 1e18, "e^0"); -// checkHappy("_: exp(1);", 2718281828459045234, "e^1"); -// checkHappy("_: exp(0.5);", 1648721270700128145, "e^0.5"); -// checkHappy("_: exp(2);", 7389056098930650223, "e^2"); -// checkHappy("_: exp(3);", 20085536923187667724, "e^3"); -// } - -// /// Test the eval of `exp` for bad inputs. -// function testOpExpEvalZeroInputs() external { -// checkBadInputs("_: exp();", 0, 1, 0); -// } - -// function testOpExpEvalTwoInputs() external { -// checkBadInputs("_: exp(1 1);", 2, 1, 2); -// } - -// function testOpExpZeroOutputs() external { -// checkBadOutputs(": exp(1);", 1, 1, 0); -// } - -// function testOpExpTwoOutputs() external { -// checkBadOutputs("_ _: exp(1);", 1, 1, 2); -// } - -// /// Test that operand is disallowed. -// function testOpExpEvalOperandDisallowed() external { -// checkUnhappyParse("_: exp<0>(1);", abi.encodeWithSelector(UnexpectedOperand.selector)); -// } -// } +import {OpTest, IntegrityCheckState, OperandV2, InterpreterState, UnexpectedOperand} from "test/abstract/OpTest.sol"; +import {LibOpExp} from "src/lib/op/math/LibOpExp.sol"; +import {LibOperand} from "test/lib/operand/LibOperand.sol"; +import {LibDecimalFloat, Float} from "rain.math.float/lib/LibDecimalFloat.sol"; +import {StackItem} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; + +contract LibOpExpTest is OpTest { + function beforeOpTestConstructor() internal virtual override { + vm.createSelectFork(vm.envString("ETH_RPC_URL")); + } + + /// Directly test the integrity logic of LibOpExp. + /// Inputs are always 1, outputs are always 1. + function testOpExpIntegrity(IntegrityCheckState memory state, OperandV2 operand) external pure { + (uint256 calcInputs, uint256 calcOutputs) = LibOpExp.integrity(state, operand); + assertEq(calcInputs, 1); + assertEq(calcOutputs, 1); + } + + /// Directly test the runtime logic of LibOpExp. + function testOpExpRun(int224 signedCoefficientA, int32 exponentA, uint16 operandData) public view { + signedCoefficientA = int224(bound(signedCoefficientA, 0, 10000)); + exponentA = int32(bound(exponentA, -10, 5)); + + InterpreterState memory state = opTestDefaultInterpreterState(); + OperandV2 operand = LibOperand.build(1, 1, operandData); + + Float a = LibDecimalFloat.packLossless(signedCoefficientA, exponentA); + + StackItem[] memory inputs = new StackItem[](1); + inputs[0] = StackItem.wrap(Float.unwrap(a)); + + opReferenceCheck(state, operand, LibOpExp.referenceFn, LibOpExp.integrity, LibOpExp.run, inputs); + } + + /// Test the eval of `exp`. + function testOpExpEval() external view { + checkHappy("_: exp(0);", Float.unwrap(LibDecimalFloat.packLossless(1, 0)), "e^0"); + checkHappy( + "_: exp(1);", + Float.unwrap(LibDecimalFloat.packLossless(271828182845904523536028747135266249770000, -41)), + "e^1" + ); + checkHappy( + "_: exp(0.5);", + Float.unwrap(LibDecimalFloat.packLossless(164864091422952261768014373567633124880000, -41)), + "e^0.5" + ); + checkHappy( + "_: exp(2);", + Float.unwrap(LibDecimalFloat.packLossless(73901273138361809414411498854106499908000, -40)), + "e^2" + ); + checkHappy( + "_: exp(3);", + Float.unwrap(LibDecimalFloat.packLossless(200884548537713570608086241405798749310000, -40)), + "e^3" + ); + } + + /// Test the eval of `exp` for bad inputs. + function testOpExpEvalZeroInputs() external { + checkBadInputs("_: exp();", 0, 1, 0); + } + + function testOpExpEvalTwoInputs() external { + checkBadInputs("_: exp(1 1);", 2, 1, 2); + } + + function testOpExpZeroOutputs() external { + checkBadOutputs(": exp(1);", 1, 1, 0); + } + + function testOpExpTwoOutputs() external { + checkBadOutputs("_ _: exp(1);", 1, 1, 2); + } + + /// Test that operand is disallowed. + function testOpExpEvalOperandDisallowed() external { + checkUnhappyParse("_: exp<0>(1);", abi.encodeWithSelector(UnexpectedOperand.selector)); + } +} diff --git a/test/src/lib/op/math/LibOpSqrt.t.sol b/test/src/lib/op/math/LibOpSqrt.t.sol index b447469a3..b618bb988 100644 --- a/test/src/lib/op/math/LibOpSqrt.t.sol +++ b/test/src/lib/op/math/LibOpSqrt.t.sol @@ -24,6 +24,7 @@ contract LibOpSqrtTest is OpTest { /// Directly test the runtime logic of LibOpSqrt. function testOpSqrtRun(Float a) public view { + vm.assume(!a.eq(LibDecimalFloat.FLOAT_MIN_NEGATIVE_VALUE)); a = a.abs(); InterpreterState memory state = opTestDefaultInterpreterState();