From 8cdebfb6acee028945f41d1e04db51abd15aa75d Mon Sep 17 00:00:00 2001 From: Vectorized Date: Sun, 19 Nov 2023 00:49:31 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Tighten=20lambertW0=20(#72?= =?UTF-8?q?0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gas-snapshot | 553 ++++++++++++++++---------------- src/utils/FixedPointMathLib.sol | 44 +-- test/FixedPointMathLib.t.sol | 239 +++++++++----- 3 files changed, 460 insertions(+), 376 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index dc68c1426..a951781e6 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,7 +1,7 @@ Base64Test:testBase64DecodeSentenceGas() (gas: 3663) Base64Test:testBase64DecodeShortStringGas() (gas: 919) Base64Test:testBase64EncodeDecode(bytes) (runs: 256, μ: 13919, ~: 10697) -Base64Test:testBase64EncodeDecodeAltModes(bytes) (runs: 256, μ: 852004, ~: 765266) +Base64Test:testBase64EncodeDecodeAltModes(bytes) (runs: 256, μ: 849001, ~: 764483) Base64Test:testBase64EncodeEmptyString() (gas: 953) Base64Test:testBase64EncodeFileSafeAndNoPadding(bytes,bool,bool) (runs: 256, μ: 16084, ~: 13634) Base64Test:testBase64EncodeSentence() (gas: 4757) @@ -12,12 +12,12 @@ Base64Test:testBase64EncodeToStringWithSinglePadding() (gas: 1636) Base64Test:testBase64WordBoundary() (gas: 12511) Base64Test:test__codesize() (gas: 7802) CREATE3Test:testDeployERC20() (gas: 761926) -CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 256, μ: 805675, ~: 808154) +CREATE3Test:testDeployERC20(bytes32,string,string,uint8) (runs: 256, μ: 805598, ~: 808154) CREATE3Test:testDeployedUpperBitsSafeForPlainSolidity() (gas: 657) CREATE3Test:testDoubleDeployDifferentBytecodeReverts() (gas: 96899279) -CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880119, ~: 96880005) +CREATE3Test:testDoubleDeployDifferentBytecodeReverts(bytes32,bytes,bytes) (runs: 256, μ: 96880132, ~: 96880005) CREATE3Test:testDoubleDeploySameBytecodeReverts() (gas: 96889159) -CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881050, ~: 96881007) +CREATE3Test:testDoubleDeploySameBytecodeReverts(bytes32,bytes) (runs: 256, μ: 96881054, ~: 96881007) CREATE3Test:test__codesize() (gas: 15337) DateTimeLibTest:testAddSubDiffDays(uint256,uint256) (runs: 256, μ: 4033, ~: 4074) DateTimeLibTest:testAddSubDiffHours(uint256,uint256) (runs: 256, μ: 3976, ~: 3932) @@ -28,12 +28,12 @@ DateTimeLibTest:testAddSubDiffYears(uint256,uint256) (runs: 256, μ: 6648, ~: 66 DateTimeLibTest:testDateTimeArithmeticReverts() (gas: 4597) DateTimeLibTest:testDateTimeMaxSupported() (gas: 2502) DateTimeLibTest:testDateTimeToAndFroTimestamp((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 3971, ~: 4050) -DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2465, ~: 2440) +DateTimeLibTest:testDateToAndFroEpochDay((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2466, ~: 2440) DateTimeLibTest:testDateToAndFroEpochDay() (gas: 865464) DateTimeLibTest:testDateToAndFroTimestamp() (gas: 909205) DateTimeLibTest:testDateToEpochDay() (gas: 1603) DateTimeLibTest:testDateToEpochDayDifferential((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2209, ~: 2178) -DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2130, ~: 2105) +DateTimeLibTest:testDateToEpochDayDifferential2((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2131, ~: 2105) DateTimeLibTest:testDateToEpochDayGas() (gas: 756479) DateTimeLibTest:testDateToEpochDayGas2() (gas: 759345) DateTimeLibTest:testDayOfWeek() (gas: 175297) @@ -48,7 +48,7 @@ DateTimeLibTest:testEpochDayToDateGas2() (gas: 357444) DateTimeLibTest:testIsLeapYear() (gas: 741) DateTimeLibTest:testIsLeapYear(uint256) (runs: 256, μ: 521, ~: 495) DateTimeLibTest:testIsSupportedDateFalse() (gas: 1651) -DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2828, ~: 2842) +DateTimeLibTest:testIsSupportedDateTime((uint256,uint256,uint256,uint256,uint256,uint256)) (runs: 256, μ: 2830, ~: 2842) DateTimeLibTest:testIsSupportedDateTrue() (gas: 670) DateTimeLibTest:testIsSupportedEpochDayFalse() (gas: 597) DateTimeLibTest:testIsSupportedEpochDayTrue() (gas: 305) @@ -61,13 +61,13 @@ DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp() (gas: 12031) DateTimeLibTest:testNthWeekdayInMonthOfYearTimestamp(uint256,uint256,uint256,uint256) (runs: 256, μ: 3462, ~: 3494) DateTimeLibTest:testWeekday() (gas: 705) DateTimeLibTest:test__codesize() (gas: 20051) -DynamicBufferLibTest:testClear(uint256) (runs: 256, μ: 170990, ~: 171109) -DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 256, μ: 1014502, ~: 906145) -DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 256, μ: 937430, ~: 730156) +DynamicBufferLibTest:testClear(uint256) (runs: 256, μ: 171012, ~: 171193) +DynamicBufferLibTest:testDynamicBuffer(bytes[],uint256) (runs: 256, μ: 1032333, ~: 903881) +DynamicBufferLibTest:testDynamicBuffer(uint256) (runs: 256, μ: 1036837, ~: 737806) DynamicBufferLibTest:testDynamicBufferChaining() (gas: 22178) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty() (gas: 2781) DynamicBufferLibTest:testDynamicBufferReserveFromEmpty2() (gas: 2423) -DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 256, μ: 4145, ~: 2068) +DynamicBufferLibTest:testDynamicBufferReserveFromEmpty3(bytes,uint256) (runs: 256, μ: 4205, ~: 2068) DynamicBufferLibTest:testJoinWithConcat() (gas: 31407) DynamicBufferLibTest:testJoinWithDynamicBuffer() (gas: 10764) DynamicBufferLibTest:test__codesize() (gas: 11003) @@ -131,40 +131,40 @@ ERC1155HooksTest:test__codesize() (gas: 12073) ERC1155Test:testApproveAll(address,bool) (runs: 256, μ: 50193, ~: 58576) ERC1155Test:testAuthorizedEquivalence(address,address,bool) (runs: 256, μ: 715, ~: 715) ERC1155Test:testBalanceOfBatchWithArrayMismatchReverts(uint256) (runs: 256, μ: 32318, ~: 34937) -ERC1155Test:testBatchBalanceOf(uint256) (runs: 256, μ: 114066, ~: 93582) -ERC1155Test:testBatchBurn(uint256) (runs: 256, μ: 176132, ~: 161888) -ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 168840, ~: 173551) +ERC1155Test:testBatchBalanceOf(uint256) (runs: 256, μ: 114503, ~: 93582) +ERC1155Test:testBatchBurn(uint256) (runs: 256, μ: 175450, ~: 161695) +ERC1155Test:testBatchBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 168826, ~: 173551) ERC1155Test:testBatchBurnWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 43075, ~: 42595) -ERC1155Test:testBatchMintToEOA(uint256) (runs: 256, μ: 125660, ~: 148474) -ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 256, μ: 778118, ~: 778208) -ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 171229, ~: 185825) +ERC1155Test:testBatchMintToEOA(uint256) (runs: 256, μ: 126044, ~: 148527) +ERC1155Test:testBatchMintToERC1155Recipient(uint256) (runs: 256, μ: 776209, ~: 776871) +ERC1155Test:testBatchMintToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 172369, ~: 185840) ERC1155Test:testBatchMintToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 321976, ~: 315851) ERC1155Test:testBatchMintToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 293927, ~: 318698) ERC1155Test:testBatchMintToZeroReverts(uint256) (runs: 256, μ: 73027, ~: 64999) ERC1155Test:testBatchMintWithArrayMismatchReverts(uint256) (runs: 256, μ: 33385, ~: 35512) -ERC1155Test:testBurn(uint256) (runs: 256, μ: 90990, ~: 82319) +ERC1155Test:testBurn(uint256) (runs: 256, μ: 91097, ~: 82321) ERC1155Test:testBurnInsufficientBalanceReverts(uint256) (runs: 256, μ: 97148, ~: 97538) ERC1155Test:testDirectSetApprovalForAll(address,address,bool) (runs: 256, μ: 24436, ~: 15497) -ERC1155Test:testMintToEOA(uint256) (runs: 256, μ: 72106, ~: 71717) -ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 256, μ: 671791, ~: 653345) +ERC1155Test:testMintToEOA(uint256) (runs: 256, μ: 72096, ~: 71717) +ERC1155Test:testMintToERC1155Recipient(uint256) (runs: 256, μ: 672296, ~: 653975) ERC1155Test:testMintToNonERC155RecipientReverts(uint256) (runs: 256, μ: 103261, ~: 103225) ERC1155Test:testMintToRevertingERC155RecipientReverts(uint256) (runs: 256, μ: 281517, ~: 281563) ERC1155Test:testMintToWrongReturnDataERC155RecipientReverts(uint256) (runs: 256, μ: 235945, ~: 235934) ERC1155Test:testMintToZeroReverts(uint256) (runs: 256, μ: 33088, ~: 33061) ERC1155Test:testSafeBatchTransfer() (gas: 8330001) -ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 256, μ: 205793, ~: 189068) -ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 862187, ~: 883472) -ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 255772, ~: 268265) -ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 433772, ~: 446638) -ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 348638, ~: 330367) -ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 256, μ: 140497, ~: 124791) +ERC1155Test:testSafeBatchTransferFromToEOA(uint256) (runs: 256, μ: 208325, ~: 189416) +ERC1155Test:testSafeBatchTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 883187, ~: 884928) +ERC1155Test:testSafeBatchTransferFromToNonERC1155RecipientReverts(uint256) (runs: 256, μ: 254320, ~: 268256) +ERC1155Test:testSafeBatchTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 432345, ~: 446565) +ERC1155Test:testSafeBatchTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 347280, ~: 330274) +ERC1155Test:testSafeBatchTransferFromToZeroReverts(uint256) (runs: 256, μ: 140880, ~: 124791) ERC1155Test:testSafeBatchTransferFromWithArrayLengthMismatchReverts(uint256) (runs: 256, μ: 51206, ~: 66621) -ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 256, μ: 171117, ~: 173686) +ERC1155Test:testSafeBatchTransferInsufficientBalanceReverts(uint256) (runs: 256, μ: 170775, ~: 173686) ERC1155Test:testSafeTransferFromInsufficientBalanceReverts(uint256) (runs: 256, μ: 99216, ~: 99806) -ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 256, μ: 106341, ~: 105869) +ERC1155Test:testSafeTransferFromSelf(uint256) (runs: 256, μ: 106266, ~: 105774) ERC1155Test:testSafeTransferFromSelfInsufficientBalanceReverts(uint256) (runs: 256, μ: 71408, ~: 72157) -ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 117505, ~: 111092) -ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 759686, ~: 779632) +ERC1155Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 117984, ~: 111719) +ERC1155Test:testSafeTransferFromToERC1155Recipient(uint256) (runs: 256, μ: 757271, ~: 777302) ERC1155Test:testSafeTransferFromToNonERC155RecipientReverts(uint256) (runs: 256, μ: 140466, ~: 139762) ERC1155Test:testSafeTransferFromToRevertingERC1155RecipientReverts(uint256) (runs: 256, μ: 317084, ~: 318526) ERC1155Test:testSafeTransferFromToWrongReturnDataERC1155RecipientReverts(uint256) (runs: 256, μ: 272852, ~: 272482) @@ -173,10 +173,10 @@ ERC1155Test:test__codesize() (gas: 43462) ERC1967FactoryTest:testChangeAdmin() (gas: 266356) ERC1967FactoryTest:testChangeAdminUnauthorized() (gas: 257236) ERC1967FactoryTest:testDeploy() (gas: 257363) -ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 256, μ: 339636, ~: 340881) +ERC1967FactoryTest:testDeployAndCall(uint256) (runs: 256, μ: 339688, ~: 340911) ERC1967FactoryTest:testDeployAndCallWithRevert() (gas: 211881) -ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 256, μ: 111154, ~: 44104) -ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 256, μ: 315540, ~: 350118) +ERC1967FactoryTest:testDeployBrutalized(uint256) (runs: 256, μ: 116015, ~: 44119) +ERC1967FactoryTest:testDeployDeterministicAndCall(uint256) (runs: 256, μ: 313913, ~: 350129) ERC1967FactoryTest:testFactoryDeployment() (gas: 856479) ERC1967FactoryTest:testProxyFails() (gas: 259019) ERC1967FactoryTest:testProxySucceeds() (gas: 255707) @@ -186,55 +186,55 @@ ERC1967FactoryTest:testUpgradeAndCallWithRevert() (gas: 265645) ERC1967FactoryTest:testUpgradeUnauthorized() (gas: 270260) ERC1967FactoryTest:testUpgradeWithCorruptedProxy() (gas: 263163) ERC1967FactoryTest:test__codesize() (gas: 33920) -ERC20Invariants:invariantBalanceSum() (runs: 256, calls: 3840, reverts: 2335) +ERC20Invariants:invariantBalanceSum() (runs: 256, calls: 3840, reverts: 2351) ERC20Invariants:test__codesize() (gas: 8050) ERC20Test:testApprove() (gas: 35730) ERC20Test:testApprove(address,uint256) (runs: 256, μ: 29937, ~: 31181) ERC20Test:testBurn() (gas: 61920) -ERC20Test:testBurn(address,uint256,uint256) (runs: 256, μ: 60245, ~: 62469) -ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 55229, ~: 56454) -ERC20Test:testDirectSpendAllowance(uint256) (runs: 256, μ: 61645, ~: 61902) -ERC20Test:testDirectTransfer(uint256) (runs: 256, μ: 100348, ~: 111908) +ERC20Test:testBurn(address,uint256,uint256) (runs: 256, μ: 60240, ~: 62469) +ERC20Test:testBurnInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 55227, ~: 56454) +ERC20Test:testDirectSpendAllowance(uint256) (runs: 256, μ: 61647, ~: 61904) +ERC20Test:testDirectTransfer(uint256) (runs: 256, μ: 100856, ~: 111918) ERC20Test:testInfiniteApproveTransferFrom() (gas: 89993) ERC20Test:testMetadata() (gas: 17598) ERC20Test:testMint() (gas: 58668) ERC20Test:testMint(address,uint256) (runs: 256, μ: 56402, ~: 58890) ERC20Test:testMintOverMaxUintReverts() (gas: 55753) ERC20Test:testPermit() (gas: 89727) -ERC20Test:testPermit(uint256) (runs: 256, μ: 89650, ~: 89660) -ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 256, μ: 41398, ~: 41419) -ERC20Test:testPermitBadNonceReverts(uint256) (runs: 256, μ: 41849, ~: 41795) +ERC20Test:testPermit(uint256) (runs: 256, μ: 89575, ~: 89659) +ERC20Test:testPermitBadDeadlineReverts(uint256) (runs: 256, μ: 41403, ~: 41421) +ERC20Test:testPermitBadNonceReverts(uint256) (runs: 256, μ: 41837, ~: 41787) ERC20Test:testPermitPastDeadlineReverts(uint256) (runs: 256, μ: 35995, ~: 35987) -ERC20Test:testPermitReplayReverts(uint256) (runs: 256, μ: 92292, ~: 92358) +ERC20Test:testPermitReplayReverts(uint256) (runs: 256, μ: 92277, ~: 92351) ERC20Test:testTransfer() (gas: 65298) ERC20Test:testTransfer(address,uint256) (runs: 256, μ: 63026, ~: 65514) ERC20Test:testTransferFrom() (gas: 85633) -ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 256, μ: 89462, ~: 94758) +ERC20Test:testTransferFrom(address,address,address,uint256,uint256) (runs: 256, μ: 89459, ~: 94758) ERC20Test:testTransferFromInsufficientAllowanceReverts() (gas: 81443) -ERC20Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256) (runs: 256, μ: 81383, ~: 81983) +ERC20Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256) (runs: 256, μ: 81380, ~: 81983) ERC20Test:testTransferFromInsufficientBalanceReverts() (gas: 61836) -ERC20Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 64836, ~: 62543) +ERC20Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 64833, ~: 62492) ERC20Test:testTransferInsufficientBalanceReverts() (gas: 55919) ERC20Test:testTransferInsufficientBalanceReverts(address,uint256,uint256) (runs: 256, μ: 55201, ~: 56424) ERC20Test:test__codesize() (gas: 24081) ERC2981Test:testRoyaltyOverflowCheckDifferential(uint256,uint256) (runs: 256, μ: 456, ~: 458) -ERC2981Test:testSetAndGetRoyaltyInfo(uint256) (runs: 256, μ: 107782, ~: 104817) +ERC2981Test:testSetAndGetRoyaltyInfo(uint256) (runs: 256, μ: 107958, ~: 104834) ERC2981Test:test__codesize() (gas: 8419) ERC4337FactoryTest:testCreateAccountRepeatedDeployment() (gas: 149757) -ERC4337FactoryTest:testCreateAccountRepeatedDeployment(uint256) (runs: 256, μ: 171763, ~: 171617) -ERC4337FactoryTest:testDeployDeterministic(uint256) (runs: 256, μ: 134429, ~: 139900) +ERC4337FactoryTest:testCreateAccountRepeatedDeployment(uint256) (runs: 256, μ: 171753, ~: 171617) +ERC4337FactoryTest:testDeployDeterministic(uint256) (runs: 256, μ: 134818, ~: 139900) ERC4337FactoryTest:test__codesize() (gas: 13197) ERC4337Test:testCdFallback() (gas: 443962) ERC4337Test:testCdFallback2() (gas: 1140793) ERC4337Test:testDelegateExecute() (gas: 369570) -ERC4337Test:testDelegateExecute(uint256) (runs: 256, μ: 357019, ~: 344533) +ERC4337Test:testDelegateExecute(uint256) (runs: 256, μ: 355672, ~: 344533) ERC4337Test:testDelegateExecuteRevertsIfOwnerSlotValueChanged() (gas: 319282) ERC4337Test:testDepositFunctions() (gas: 502928) ERC4337Test:testDirectStorage() (gas: 70391) ERC4337Test:testETHReceived() (gas: 16584) ERC4337Test:testExecute() (gas: 382774) ERC4337Test:testExecuteBatch() (gas: 692605) -ERC4337Test:testExecuteBatch(uint256) (runs: 256, μ: 532917, ~: 528111) +ERC4337Test:testExecuteBatch(uint256) (runs: 256, μ: 520873, ~: 368437) ERC4337Test:testInitializer() (gas: 285192) ERC4337Test:testIsValidSignature() (gas: 111663) ERC4337Test:testIsValidSignaturePersonalSign() (gas: 96270) @@ -247,15 +247,15 @@ ERC4337Test:testValidateUserOp() (gas: 491506) ERC4337Test:test__codesize() (gas: 54000) ERC4626Test:testDepositWithNoApprovalReverts() (gas: 16371) ERC4626Test:testDepositWithNotEnoughApprovalReverts() (gas: 89884) -ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 256, μ: 3340, ~: 3201) +ERC4626Test:testDifferentialFullMulDiv(uint256,uint256,uint256) (runs: 256, μ: 3335, ~: 3201) ERC4626Test:testMetadata() (gas: 15439) ERC4626Test:testMintWithNoApprovalReverts() (gas: 16345) ERC4626Test:testMintZero() (gas: 54317) ERC4626Test:testMultipleMintDepositRedeemWithdraw() (gas: 425667) ERC4626Test:testRedeemWithNoShareAmountReverts() (gas: 10918) ERC4626Test:testRedeemWithNotEnoughShareAmountReverts() (gas: 142915) -ERC4626Test:testSingleDepositWithdraw(uint128) (runs: 256, μ: 202683, ~: 202694) -ERC4626Test:testSingleMintRedeem(uint128) (runs: 256, μ: 201604, ~: 201615) +ERC4626Test:testSingleDepositWithdraw(uint128) (runs: 256, μ: 202684, ~: 202694) +ERC4626Test:testSingleMintRedeem(uint128) (runs: 256, μ: 201605, ~: 201615) ERC4626Test:testTryGetAssetDecimals() (gas: 30490416) ERC4626Test:testUseVirtualShares() (gas: 2442168) ERC4626Test:testVaultInteractionsForSomeoneElse() (gas: 296189) @@ -265,29 +265,29 @@ ERC4626Test:testWithdrawWithNotEnoughUnderlyingAmountReverts() (gas: 144082) ERC4626Test:testWithdrawZero() (gas: 52807) ERC4626Test:test__codesize() (gas: 41081) ERC6551Test:testCdFallback() (gas: 894557) -ERC6551Test:testDeployERC6551(uint256) (runs: 256, μ: 171025, ~: 168729) +ERC6551Test:testDeployERC6551(uint256) (runs: 256, μ: 171402, ~: 168738) ERC6551Test:testDeployERC6551Proxy() (gas: 102497) ERC6551Test:testExecute() (gas: 507843) ERC6551Test:testExecuteBatch() (gas: 816977) -ERC6551Test:testExecuteBatch(uint256) (runs: 256, μ: 612836, ~: 483186) +ERC6551Test:testExecuteBatch(uint256) (runs: 256, μ: 611217, ~: 483186) ERC6551Test:testInitializeERC6551ProxyImplementation() (gas: 189801) ERC6551Test:testIsValidSignature() (gas: 187612) ERC6551Test:testOnERC1155BatchReceived() (gas: 1526542) ERC6551Test:testOnERC1155Received() (gas: 1523898) ERC6551Test:testOnERC721Received() (gas: 1447973) ERC6551Test:testOnERC721ReceivedCycles() (gas: 1710837) -ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 256, μ: 448456, ~: 454127) +ERC6551Test:testOnERC721ReceivedCyclesWithDifferentChainIds(uint256) (runs: 256, μ: 448043, ~: 453896) ERC6551Test:testSupportsInterface() (gas: 169387) ERC6551Test:testUpgrade() (gas: 1154845) ERC6551Test:test__codesize() (gas: 47900) ERC6909Test:testApprove() (gas: 36639) -ERC6909Test:testApprove(address,uint256,uint256) (runs: 256, μ: 36259, ~: 37270) +ERC6909Test:testApprove(address,uint256,uint256) (runs: 256, μ: 36337, ~: 37270) ERC6909Test:testBurn() (gas: 64066) -ERC6909Test:testBurn(address,uint256,uint256,uint256) (runs: 256, μ: 62592, ~: 64666) -ERC6909Test:testBurnInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 55402, ~: 57255) +ERC6909Test:testBurn(address,uint256,uint256,uint256) (runs: 256, μ: 62589, ~: 64666) +ERC6909Test:testBurnInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 55405, ~: 57255) ERC6909Test:testDecimals() (gas: 5632) ERC6909Test:testDirectApprove() (gas: 36623) -ERC6909Test:testDirectFunctions(uint256) (runs: 256, μ: 251232, ~: 249701) +ERC6909Test:testDirectFunctions(uint256) (runs: 256, μ: 251283, ~: 249828) ERC6909Test:testDirectSetOperator() (gas: 35947) ERC6909Test:testDirectTransfer() (gas: 83569) ERC6909Test:testInfiniteApproveTransferFrom() (gas: 101047) @@ -295,7 +295,7 @@ ERC6909Test:testMetadata() (gas: 9266) ERC6909Test:testMint() (gas: 60099) ERC6909Test:testMint(address,uint256,uint256) (runs: 256, μ: 58466, ~: 60332) ERC6909Test:testMintOverMaxUintReverts() (gas: 56629) -ERC6909Test:testMintTotalSupplyOverFlowReverts(address,uint256,uint256,uint256) (runs: 256, μ: 53943, ~: 53926) +ERC6909Test:testMintTotalSupplyOverFlowReverts(address,uint256,uint256,uint256) (runs: 256, μ: 54050, ~: 53926) ERC6909Test:testOperatorTransferFrom() (gas: 96905) ERC6909Test:testSetOperator() (gas: 37141) ERC6909Test:testSetOperator(address,address,bool) (runs: 256, μ: 25684, ~: 16745) @@ -305,37 +305,37 @@ ERC6909Test:testTransfer(address,uint256,uint256) (runs: 256, μ: 65804, ~: 6767 ERC6909Test:testTransferFrom() (gas: 92668) ERC6909Test:testTransferFrom(address,address,address,uint256,uint256,uint256) (runs: 256, μ: 97280, ~: 103588) ERC6909Test:testTransferFromCallerIsNotOperator(address,uint256,uint256) (runs: 256, μ: 61501, ~: 61498) -ERC6909Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 87020, ~: 89440) +ERC6909Test:testTransferFromInsufficientAllowanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 87183, ~: 89440) ERC6909Test:testTransferFromInsufficientBalanceReverts() (gas: 69252) -ERC6909Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 71908, ~: 69844) +ERC6909Test:testTransferFromInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 71900, ~: 69780) ERC6909Test:testTransferFromInsufficientPermission() (gas: 88870) ERC6909Test:testTransferInsufficientBalanceReverts() (gas: 56716) -ERC6909Test:testTransferInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 56339, ~: 57203) +ERC6909Test:testTransferInsufficientBalanceReverts(address,uint256,uint256,uint256) (runs: 256, μ: 56341, ~: 57203) ERC6909Test:test__codesize() (gas: 24850) ERC721HooksTest:testERC721Hooks() (gas: 2877778) ERC721HooksTest:test__codesize() (gas: 9707) ERC721Test:testApprove(uint256) (runs: 256, μ: 108095, ~: 108087) -ERC721Test:testApproveAll(uint256) (runs: 256, μ: 47955, ~: 40312) +ERC721Test:testApproveAll(uint256) (runs: 256, μ: 48186, ~: 40312) ERC721Test:testApproveBurn(uint256) (runs: 256, μ: 86752, ~: 86771) ERC721Test:testApproveNonExistentReverts(uint256,address) (runs: 256, μ: 33660, ~: 33621) ERC721Test:testApproveUnauthorizedReverts(uint256) (runs: 256, μ: 83240, ~: 82408) ERC721Test:testAuthorizedEquivalence(address,bool,bool) (runs: 256, μ: 748, ~: 743) ERC721Test:testAux(uint256) (runs: 256, μ: 191873, ~: 193046) -ERC721Test:testBurn(uint256) (runs: 256, μ: 82489, ~: 93951) +ERC721Test:testBurn(uint256) (runs: 256, μ: 82059, ~: 69416) ERC721Test:testBurnNonExistentReverts(uint256) (runs: 256, μ: 10761, ~: 10761) ERC721Test:testCannotExceedMaxBalance() (gas: 149876) -ERC721Test:testDoubleBurnReverts(uint256) (runs: 256, μ: 63492, ~: 63485) +ERC721Test:testDoubleBurnReverts(uint256) (runs: 256, μ: 63485, ~: 63432) ERC721Test:testDoubleMintReverts(uint256) (runs: 256, μ: 79137, ~: 79166) -ERC721Test:testEverything(uint256) (runs: 256, μ: 308765, ~: 302496) +ERC721Test:testEverything(uint256) (runs: 256, μ: 308224, ~: 302446) ERC721Test:testExtraData(uint256) (runs: 256, μ: 99055, ~: 99102) ERC721Test:testExtraData2(uint256,uint256) (runs: 256, μ: 54254, ~: 53903) -ERC721Test:testIsApprovedOrOwner(uint256) (runs: 256, μ: 135451, ~: 135447) +ERC721Test:testIsApprovedOrOwner(uint256) (runs: 256, μ: 135443, ~: 135446) ERC721Test:testMint(uint256) (runs: 256, μ: 82874, ~: 82907) ERC721Test:testMintToZeroReverts(uint256) (runs: 256, μ: 8686, ~: 8686) ERC721Test:testOwnerOfNonExistent(uint256) (runs: 256, μ: 33391, ~: 33338) ERC721Test:testSafeMintToEOA(uint256) (runs: 256, μ: 83474, ~: 83504) -ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 256, μ: 409456, ~: 410571) -ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 470880, ~: 460156) +ERC721Test:testSafeMintToERC721Recipient(uint256) (runs: 256, μ: 409453, ~: 410571) +ERC721Test:testSafeMintToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 470883, ~: 460156) ERC721Test:testSafeMintToERC721RecipientWithWrongReturnData(uint256) (runs: 256, μ: 170008, ~: 170008) ERC721Test:testSafeMintToERC721RecipientWithWrongReturnDataWithData(uint256,bytes) (runs: 256, μ: 171224, ~: 171171) ERC721Test:testSafeMintToNonERC721RecipientReverts(uint256) (runs: 256, μ: 100470, ~: 100470) @@ -343,142 +343,143 @@ ERC721Test:testSafeMintToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: ERC721Test:testSafeMintToRevertingERC721RecipientReverts(uint256) (runs: 256, μ: 203127, ~: 203127) ERC721Test:testSafeMintToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 204364, ~: 204311) ERC721Test:testSafeTransferFromToEOA(uint256) (runs: 256, μ: 121922, ~: 122062) -ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 256, μ: 470947, ~: 472074) -ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 532390, ~: 521633) +ERC721Test:testSafeTransferFromToERC721Recipient(uint256) (runs: 256, μ: 470950, ~: 472074) +ERC721Test:testSafeTransferFromToERC721RecipientWithData(uint256,bytes) (runs: 256, μ: 532388, ~: 521626) ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataReverts(uint256) (runs: 256, μ: 200851, ~: 200908) -ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 256, μ: 202127, ~: 202120) -ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 256, μ: 131260, ~: 131198) -ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 132602, ~: 132590) +ERC721Test:testSafeTransferFromToERC721RecipientWithWrongReturnDataWithDataReverts(uint256,bytes) (runs: 256, μ: 202125, ~: 202117) +ERC721Test:testSafeTransferFromToNonERC721RecipientReverts(uint256) (runs: 256, μ: 131265, ~: 131198) +ERC721Test:testSafeTransferFromToNonERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 132604, ~: 132599) ERC721Test:testSafeTransferFromToRevertingERC721RecipientReverts(uint256) (runs: 256, μ: 233928, ~: 233981) ERC721Test:testSafeTransferFromToRevertingERC721RecipientWithDataReverts(uint256,bytes) (runs: 256, μ: 235263, ~: 235254) ERC721Test:testSafetyOfCustomStorage(uint256,uint256) (runs: 256, μ: 1063, ~: 713) ERC721Test:testTransferFrom() (gas: 85744) -ERC721Test:testTransferFrom(uint256) (runs: 256, μ: 114145, ~: 112511) -ERC721Test:testTransferFromApproveAll(uint256) (runs: 256, μ: 119325, ~: 119297) -ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 256, μ: 34019, ~: 33992) +ERC721Test:testTransferFrom(uint256) (runs: 256, μ: 113705, ~: 112511) +ERC721Test:testTransferFromApproveAll(uint256) (runs: 256, μ: 119317, ~: 119283) +ERC721Test:testTransferFromNotExistentReverts(address,address,uint256) (runs: 256, μ: 34017, ~: 33992) ERC721Test:testTransferFromNotOwner(uint256) (runs: 256, μ: 84715, ~: 84695) ERC721Test:testTransferFromSelf(uint256) (runs: 256, μ: 92772, ~: 92755) ERC721Test:testTransferFromToZeroReverts(uint256) (runs: 256, μ: 79047, ~: 79023) ERC721Test:testTransferFromWrongFromReverts(address,uint256) (runs: 256, μ: 80413, ~: 80414) ERC721Test:test__codesize() (gas: 41923) -FixedPointMathLibTest:testAbs() (gas: 556) -FixedPointMathLibTest:testAbs(int256) (runs: 256, μ: 494, ~: 463) +FixedPointMathLibTest:testAbs() (gas: 578) +FixedPointMathLibTest:testAbs(int256) (runs: 256, μ: 516, ~: 485) FixedPointMathLibTest:testAbsEdgeCases() (gas: 432) FixedPointMathLibTest:testAvg() (gas: 442) FixedPointMathLibTest:testAvgEdgeCase() (gas: 425) FixedPointMathLibTest:testAvgSigned() (gas: 897) FixedPointMathLibTest:testCbrt() (gas: 10261) -FixedPointMathLibTest:testCbrt(uint256) (runs: 256, μ: 1400, ~: 1491) -FixedPointMathLibTest:testCbrtBack(uint256) (runs: 256, μ: 29475, ~: 23970) +FixedPointMathLibTest:testCbrt(uint256) (runs: 256, μ: 1424, ~: 1513) +FixedPointMathLibTest:testCbrtBack(uint256) (runs: 256, μ: 29453, ~: 21103) FixedPointMathLibTest:testCbrtWad() (gas: 12006) -FixedPointMathLibTest:testCbrtWad(uint256) (runs: 256, μ: 1996, ~: 2005) +FixedPointMathLibTest:testCbrtWad(uint256) (runs: 256, μ: 1997, ~: 2005) FixedPointMathLibTest:testClamp(uint256,uint256,uint256) (runs: 256, μ: 546, ~: 546) FixedPointMathLibTest:testClampSigned(int256,int256,int256) (runs: 256, μ: 611, ~: 611) -FixedPointMathLibTest:testDist() (gas: 612) +FixedPointMathLibTest:testDist() (gas: 634) FixedPointMathLibTest:testDist(int256,int256) (runs: 256, μ: 541, ~: 546) -FixedPointMathLibTest:testDistEdgeCases() (gas: 570) +FixedPointMathLibTest:testDistEdgeCases() (gas: 505) FixedPointMathLibTest:testDivWad() (gas: 702) -FixedPointMathLibTest:testDivWad(uint256,uint256) (runs: 256, μ: 702, ~: 790) +FixedPointMathLibTest:testDivWad(uint256,uint256) (runs: 256, μ: 726, ~: 812) FixedPointMathLibTest:testDivWadEdgeCases() (gas: 458) -FixedPointMathLibTest:testDivWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3812, ~: 3812) +FixedPointMathLibTest:testDivWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3749, ~: 3749) FixedPointMathLibTest:testDivWadUp() (gas: 3084) -FixedPointMathLibTest:testDivWadUp(uint256,uint256) (runs: 256, μ: 793, ~: 942) -FixedPointMathLibTest:testDivWadUpEdgeCases() (gas: 461) -FixedPointMathLibTest:testDivWadUpOverflowReverts(uint256,uint256) (runs: 256, μ: 3814, ~: 3814) -FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts() (gas: 3217) -FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts(uint256) (runs: 256, μ: 3273, ~: 3273) +FixedPointMathLibTest:testDivWadUp(uint256,uint256) (runs: 256, μ: 797, ~: 942) +FixedPointMathLibTest:testDivWadUpEdgeCases() (gas: 483) +FixedPointMathLibTest:testDivWadUpOverflowReverts(uint256,uint256) (runs: 256, μ: 3748, ~: 3748) +FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts() (gas: 3239) +FixedPointMathLibTest:testDivWadUpZeroDenominatorReverts(uint256) (runs: 256, μ: 3295, ~: 3295) FixedPointMathLibTest:testDivWadZeroDenominatorReverts() (gas: 3240) FixedPointMathLibTest:testDivWadZeroDenominatorReverts(uint256) (runs: 256, μ: 3315, ~: 3315) FixedPointMathLibTest:testExpWad() (gas: 7544) -FixedPointMathLibTest:testFactorial() (gas: 98803) +FixedPointMathLibTest:testFactorial() (gas: 98825) FixedPointMathLibTest:testFactorialOriginal() (gas: 94187) -FixedPointMathLibTest:testFullMulDiv() (gas: 1189) -FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256) (runs: 256, μ: 1372, ~: 996) -FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 1735, ~: 1517) +FixedPointMathLibTest:testFullMulDiv() (gas: 1211) +FixedPointMathLibTest:testFullMulDiv(uint256,uint256,uint256) (runs: 256, μ: 1369, ~: 996) +FixedPointMathLibTest:testFullMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 1729, ~: 1539) FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase1() (gas: 3688) FixedPointMathLibTest:testFullMulDivUpRevertsIfRoundedUpResultOverflowsCase2() (gas: 3699) FixedPointMathLibTest:testGcd() (gas: 4206) -FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 256, μ: 4976, ~: 2223) -FixedPointMathLibTest:testLambertW0WadAccuracy() (gas: 7262) -FixedPointMathLibTest:testLambertW0WadAccuracy(uint184) (runs: 256, μ: 1571, ~: 453) -FixedPointMathLibTest:testLambertW0WadKnownValues() (gas: 321831) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing() (gas: 19905357) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing(int256,int256) (runs: 256, μ: 7295, ~: 7152) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing2() (gas: 3956314) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround(int256) (runs: 256, μ: 27597, ~: 18096) -FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround2(uint96) (runs: 256, μ: 24616, ~: 17916) -FixedPointMathLibTest:testLambertW0WadRevertsForOutOfDomain() (gas: 16614) -FixedPointMathLibTest:testLambertW0WadWithinBounds() (gas: 16306) -FixedPointMathLibTest:testLambertW0WadWithinBounds(int256) (runs: 256, μ: 3238, ~: 1318) -FixedPointMathLibTest:testLnWad() (gas: 2145) +FixedPointMathLibTest:testGcd(uint256,uint256) (runs: 256, μ: 4833, ~: 2130) +FixedPointMathLibTest:testLambertW0WadAccuracy() (gas: 7267) +FixedPointMathLibTest:testLambertW0WadAccuracy(uint184) (runs: 256, μ: 1534, ~: 386) +FixedPointMathLibTest:testLambertW0WadKnownValues() (gas: 483132) +FixedPointMathLibTest:testLambertW0WadMonoDebug() (gas: 1997379) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing() (gas: 20056028) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing(int256,int256) (runs: 256, μ: 7365, ~: 7541) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasing2() (gas: 6724013) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround(int256) (runs: 256, μ: 29387, ~: 18136) +FixedPointMathLibTest:testLambertW0WadMonotonicallyIncreasingAround2(uint96) (runs: 256, μ: 42153, ~: 17924) +FixedPointMathLibTest:testLambertW0WadRevertsForOutOfDomain() (gas: 16641) +FixedPointMathLibTest:testLambertW0WadWithinBounds() (gas: 16355) +FixedPointMathLibTest:testLambertW0WadWithinBounds(int256) (runs: 256, μ: 3309, ~: 1344) +FixedPointMathLibTest:testLnWad() (gas: 2167) FixedPointMathLibTest:testLnWadBig() (gas: 2178) -FixedPointMathLibTest:testLnWadNegativeReverts() (gas: 3176) -FixedPointMathLibTest:testLnWadOverflowReverts() (gas: 3239) -FixedPointMathLibTest:testLnWadSmall() (gas: 2758) -FixedPointMathLibTest:testLog10() (gas: 76167) -FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 256, μ: 2182, ~: 2244) -FixedPointMathLibTest:testLog10Up() (gas: 4391) +FixedPointMathLibTest:testLnWadNegativeReverts() (gas: 3198) +FixedPointMathLibTest:testLnWadOverflowReverts() (gas: 3173) +FixedPointMathLibTest:testLnWadSmall() (gas: 2780) +FixedPointMathLibTest:testLog10() (gas: 76189) +FixedPointMathLibTest:testLog10(uint256,uint256) (runs: 256, μ: 2170, ~: 2237) +FixedPointMathLibTest:testLog10Up() (gas: 4413) FixedPointMathLibTest:testLog2() (gas: 243209) -FixedPointMathLibTest:testLog256() (gas: 22853) -FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 256, μ: 2015, ~: 2107) +FixedPointMathLibTest:testLog256() (gas: 22786) +FixedPointMathLibTest:testLog256(uint256,uint256) (runs: 256, μ: 2031, ~: 2129) FixedPointMathLibTest:testLog256Up() (gas: 1249) FixedPointMathLibTest:testLog2Differential(uint256) (runs: 256, μ: 870, ~: 864) -FixedPointMathLibTest:testLog2Up() (gas: 297346) -FixedPointMathLibTest:testMax(uint256,uint256) (runs: 256, μ: 495, ~: 491) -FixedPointMathLibTest:testMaxCasted(uint32,uint32,uint256) (runs: 256, μ: 887, ~: 892) +FixedPointMathLibTest:testLog2Up() (gas: 297368) +FixedPointMathLibTest:testMax(uint256,uint256) (runs: 256, μ: 518, ~: 523) +FixedPointMathLibTest:testMaxCasted(uint32,uint32,uint256) (runs: 256, μ: 886, ~: 882) FixedPointMathLibTest:testMaxSigned(int256,int256) (runs: 256, μ: 475, ~: 471) -FixedPointMathLibTest:testMin(uint256,uint256) (runs: 256, μ: 499, ~: 504) -FixedPointMathLibTest:testMinBrutalized(uint256,uint256) (runs: 256, μ: 830, ~: 839) +FixedPointMathLibTest:testMin(uint256,uint256) (runs: 256, μ: 498, ~: 494) +FixedPointMathLibTest:testMinBrutalized(uint256,uint256) (runs: 256, μ: 829, ~: 839) FixedPointMathLibTest:testMinSigned(int256,int256) (runs: 256, μ: 475, ~: 480) -FixedPointMathLibTest:testMulDiv() (gas: 1868) -FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 256, μ: 696, ~: 794) -FixedPointMathLibTest:testMulDivEdgeCases() (gas: 718) +FixedPointMathLibTest:testMulDiv() (gas: 1890) +FixedPointMathLibTest:testMulDiv(uint256,uint256,uint256) (runs: 256, μ: 720, ~: 816) +FixedPointMathLibTest:testMulDivEdgeCases() (gas: 740) FixedPointMathLibTest:testMulDivOverflowReverts(uint256,uint256,uint256) (runs: 256, μ: 3854, ~: 3854) FixedPointMathLibTest:testMulDivUp() (gas: 2103) -FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 909, ~: 1121) -FixedPointMathLibTest:testMulDivUpEdgeCases() (gas: 839) -FixedPointMathLibTest:testMulDivUpOverflowReverts(uint256,uint256,uint256) (runs: 256, μ: 3855, ~: 3855) +FixedPointMathLibTest:testMulDivUp(uint256,uint256,uint256) (runs: 256, μ: 913, ~: 1121) +FixedPointMathLibTest:testMulDivUpEdgeCases() (gas: 861) +FixedPointMathLibTest:testMulDivUpOverflowReverts(uint256,uint256,uint256) (runs: 256, μ: 3877, ~: 3877) FixedPointMathLibTest:testMulDivUpZeroDenominator() (gas: 3253) -FixedPointMathLibTest:testMulDivUpZeroDenominatorReverts(uint256,uint256) (runs: 256, μ: 3355, ~: 3355) +FixedPointMathLibTest:testMulDivUpZeroDenominatorReverts(uint256,uint256) (runs: 256, μ: 3310, ~: 3310) FixedPointMathLibTest:testMulDivZeroDenominatorReverts() (gas: 3252) FixedPointMathLibTest:testMulDivZeroDenominatorReverts(uint256,uint256) (runs: 256, μ: 3310, ~: 3310) FixedPointMathLibTest:testMulWad() (gas: 714) -FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 256, μ: 656, ~: 756) -FixedPointMathLibTest:testMulWadEdgeCases() (gas: 759) -FixedPointMathLibTest:testMulWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3810, ~: 3810) +FixedPointMathLibTest:testMulWad(uint256,uint256) (runs: 256, μ: 659, ~: 756) +FixedPointMathLibTest:testMulWadEdgeCases() (gas: 692) +FixedPointMathLibTest:testMulWadOverflowReverts(uint256,uint256) (runs: 256, μ: 3832, ~: 3832) FixedPointMathLibTest:testMulWadUp() (gas: 815) -FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 256, μ: 853, ~: 1065) +FixedPointMathLibTest:testMulWadUp(uint256,uint256) (runs: 256, μ: 859, ~: 1065) FixedPointMathLibTest:testMulWadUpEdgeCases() (gas: 793) FixedPointMathLibTest:testMulWadUpOverflowReverts(uint256,uint256) (runs: 256, μ: 3769, ~: 3769) FixedPointMathLibTest:testPackUnpackSci() (gas: 129349) -FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 256, μ: 30113, ~: 30066) -FixedPointMathLibTest:testRPow() (gas: 3254) +FixedPointMathLibTest:testPackUnpackSci(uint256) (runs: 256, μ: 30131, ~: 30092) +FixedPointMathLibTest:testRPow() (gas: 3276) FixedPointMathLibTest:testRPowOverflowReverts() (gas: 4973) FixedPointMathLibTest:testRawAdd(int256,int256) (runs: 256, μ: 484, ~: 484) FixedPointMathLibTest:testRawAdd(uint256,uint256) (runs: 256, μ: 485, ~: 485) -FixedPointMathLibTest:testRawAddMod(uint256,uint256,uint256) (runs: 256, μ: 555, ~: 555) -FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 256, μ: 465, ~: 465) -FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 256, μ: 486, ~: 486) +FixedPointMathLibTest:testRawAddMod(uint256,uint256,uint256) (runs: 256, μ: 577, ~: 577) +FixedPointMathLibTest:testRawDiv(uint256,uint256) (runs: 256, μ: 487, ~: 487) +FixedPointMathLibTest:testRawMod(uint256,uint256) (runs: 256, μ: 422, ~: 422) FixedPointMathLibTest:testRawMul(int256,int256) (runs: 256, μ: 412, ~: 412) FixedPointMathLibTest:testRawMul(uint256,uint256) (runs: 256, μ: 442, ~: 442) FixedPointMathLibTest:testRawMulMod(uint256,uint256,uint256) (runs: 256, μ: 512, ~: 512) -FixedPointMathLibTest:testRawSDiv(int256,int256) (runs: 256, μ: 465, ~: 465) +FixedPointMathLibTest:testRawSDiv(int256,int256) (runs: 256, μ: 487, ~: 487) FixedPointMathLibTest:testRawSMod(int256,int256) (runs: 256, μ: 422, ~: 422) FixedPointMathLibTest:testRawSub(int256,int256) (runs: 256, μ: 485, ~: 485) FixedPointMathLibTest:testRawSub(uint256,uint256) (runs: 256, μ: 440, ~: 440) FixedPointMathLibTest:testSci() (gas: 1838635) -FixedPointMathLibTest:testSci(uint256) (runs: 256, μ: 32904, ~: 40744) -FixedPointMathLibTest:testSci2(uint256) (runs: 256, μ: 879, ~: 889) -FixedPointMathLibTest:testSqrt() (gas: 42641) -FixedPointMathLibTest:testSqrt(uint256) (runs: 256, μ: 1036, ~: 1086) -FixedPointMathLibTest:testSqrtBack(uint256) (runs: 256, μ: 14042, ~: 385) -FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 256, μ: 53156, ~: 53527) -FixedPointMathLibTest:testSqrtHashedSingle() (gas: 53108) -FixedPointMathLibTest:testSqrtWad() (gas: 7448) +FixedPointMathLibTest:testSci(uint256) (runs: 256, μ: 33336, ~: 40744) +FixedPointMathLibTest:testSci2(uint256) (runs: 256, μ: 902, ~: 911) +FixedPointMathLibTest:testSqrt() (gas: 42576) +FixedPointMathLibTest:testSqrt(uint256) (runs: 256, μ: 1037, ~: 1086) +FixedPointMathLibTest:testSqrtBack(uint256) (runs: 256, μ: 13422, ~: 385) +FixedPointMathLibTest:testSqrtHashed(uint256) (runs: 256, μ: 53159, ~: 53549) +FixedPointMathLibTest:testSqrtHashedSingle() (gas: 53041) +FixedPointMathLibTest:testSqrtWad() (gas: 7470) FixedPointMathLibTest:testSqrtWad(uint256) (runs: 256, μ: 1493, ~: 1498) -FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 256, μ: 504, ~: 534) -FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 256, μ: 926, ~: 886) -FixedPointMathLibTest:test__codesize() (gas: 31256) +FixedPointMathLibTest:testZeroFloorSub(uint256,uint256) (runs: 256, μ: 502, ~: 473) +FixedPointMathLibTest:testZeroFloorSubCasted(uint32,uint32,uint256) (runs: 256, μ: 929, ~: 967) +FixedPointMathLibTest:test__codesize() (gas: 33023) JSONParserLibTest:testDecodeEncodedStringDoesNotRevert(string) (runs: 256, μ: 58291, ~: 57099) JSONParserLibTest:testDecodeInvalidStringReverts() (gas: 174221) JSONParserLibTest:testDecodeString() (gas: 201120) @@ -502,7 +503,7 @@ JSONParserLibTest:testParseSimpleUintArray() (gas: 1227270) JSONParserLibTest:testParseSpecials() (gas: 295420) JSONParserLibTest:testParseString() (gas: 1435230) JSONParserLibTest:testParseUint() (gas: 96207) -JSONParserLibTest:testParseUint(uint256) (runs: 256, μ: 36100, ~: 29487) +JSONParserLibTest:testParseUint(uint256) (runs: 256, μ: 36531, ~: 30330) JSONParserLibTest:testParseUintFromHex() (gas: 1367554) JSONParserLibTest:testParseValidObjectDoesNotRevert(string,string) (runs: 256, μ: 49906, ~: 48850) JSONParserLibTest:test__codesize() (gas: 38289) @@ -528,11 +529,11 @@ LibBitTest:test__codesize() (gas: 6067) LibBitmapTest:testBitmapClaimWithGetSet() (gas: 27089) LibBitmapTest:testBitmapClaimWithToggle() (gas: 17479) LibBitmapTest:testBitmapFindLastSet() (gas: 1300541) -LibBitmapTest:testBitmapFindLastSet(uint256,uint256) (runs: 256, μ: 76011, ~: 76115) +LibBitmapTest:testBitmapFindLastSet(uint256,uint256) (runs: 256, μ: 75758, ~: 76072) LibBitmapTest:testBitmapGet() (gas: 2565) LibBitmapTest:testBitmapGet(uint256) (runs: 256, μ: 2593, ~: 2593) LibBitmapTest:testBitmapPopCount() (gas: 750426) -LibBitmapTest:testBitmapPopCount(uint256,uint256,uint256) (runs: 256, μ: 206037, ~: 175241) +LibBitmapTest:testBitmapPopCount(uint256,uint256,uint256) (runs: 256, μ: 201971, ~: 171380) LibBitmapTest:testBitmapPopCountAcrossMultipleBuckets() (gas: 73611) LibBitmapTest:testBitmapPopCountWithinSingleBucket() (gas: 34032) LibBitmapTest:testBitmapSet() (gas: 22527) @@ -543,11 +544,11 @@ LibBitmapTest:testBitmapSetBatchAcrossMultipleBuckets() (gas: 452545) LibBitmapTest:testBitmapSetBatchWithinSingleBucket() (gas: 417119) LibBitmapTest:testBitmapSetTo() (gas: 14275) LibBitmapTest:testBitmapSetTo(uint256,bool,uint256) (runs: 256, μ: 13050, ~: 22774) -LibBitmapTest:testBitmapSetTo(uint256,uint256) (runs: 256, μ: 44962, ~: 49943) +LibBitmapTest:testBitmapSetTo(uint256,uint256) (runs: 256, μ: 45097, ~: 50098) LibBitmapTest:testBitmapToggle() (gas: 30810) -LibBitmapTest:testBitmapToggle(uint256,bool) (runs: 256, μ: 17742, ~: 14247) +LibBitmapTest:testBitmapToggle(uint256,bool) (runs: 256, μ: 17743, ~: 14247) LibBitmapTest:testBitmapUnset() (gas: 22572) -LibBitmapTest:testBitmapUnset(uint256) (runs: 256, μ: 14341, ~: 14363) +LibBitmapTest:testBitmapUnset(uint256) (runs: 256, μ: 14342, ~: 14363) LibBitmapTest:testBitmapUnsetBatch() (gas: 3086142) LibBitmapTest:testBitmapUnsetBatchAcrossMultipleBuckets() (gas: 453362) LibBitmapTest:testBitmapUnsetBatchWithinSingleBucket() (gas: 446762) @@ -573,36 +574,36 @@ LibMapTest:testFoundStatementDifferential(uint256,uint256,uint256) (runs: 256, LibMapTest:testGeneralMapFunctionsGas() (gas: 3304775) LibMapTest:testGeneralMapFunctionsWithSmallBitWidths(uint256) (runs: 256, μ: 79345, ~: 85415) LibMapTest:testGeneralMapFunctionsWithZeroBitWidth() (gas: 12521) -LibMapTest:testGeneralMapSearchSorted(uint256) (runs: 256, μ: 194936, ~: 127091) +LibMapTest:testGeneralMapSearchSorted(uint256) (runs: 256, μ: 191920, ~: 127091) LibMapTest:testMapGetFromBigArray() (gas: 3308) LibMapTest:testMapGetUint8() (gas: 3335) LibMapTest:testMapSetUint8() (gas: 23321) LibMapTest:testMapSetUint8FromBigArray() (gas: 23264) -LibMapTest:testUint128MapSearchSorted(uint256) (runs: 256, μ: 185642, ~: 131590) +LibMapTest:testUint128MapSearchSorted(uint256) (runs: 256, μ: 188304, ~: 131590) LibMapTest:testUint128MapSetAndGet() (gas: 1607245) -LibMapTest:testUint128MapSetAndGet(uint256) (runs: 256, μ: 173866, ~: 169385) +LibMapTest:testUint128MapSetAndGet(uint256) (runs: 256, μ: 172303, ~: 169095) LibMapTest:testUint128MapSetAndGet2(uint256) (runs: 256, μ: 68640, ~: 69275) -LibMapTest:testUint16MapSearchSorted(uint256) (runs: 256, μ: 93549, ~: 86851) +LibMapTest:testUint16MapSearchSorted(uint256) (runs: 256, μ: 92917, ~: 86851) LibMapTest:testUint16MapSetAndGet() (gas: 958193) -LibMapTest:testUint16MapSetAndGet(uint256) (runs: 256, μ: 81197, ~: 81188) -LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 256, μ: 67171, ~: 69193) -LibMapTest:testUint32MapSearchSorted(uint256) (runs: 256, μ: 102383, ~: 86079) +LibMapTest:testUint16MapSetAndGet(uint256) (runs: 256, μ: 81211, ~: 81195) +LibMapTest:testUint16MapSetAndGet2(uint256) (runs: 256, μ: 66936, ~: 69189) +LibMapTest:testUint32MapSearchSorted(uint256) (runs: 256, μ: 100991, ~: 86096) LibMapTest:testUint32MapSetAndGet() (gas: 1067093) -LibMapTest:testUint32MapSetAndGet(uint256) (runs: 256, μ: 113951, ~: 124336) -LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 256, μ: 67344, ~: 69139) -LibMapTest:testUint32Maps(uint256) (runs: 256, μ: 64182, ~: 72239) -LibMapTest:testUint40MapSearchSorted(uint256) (runs: 256, μ: 137705, ~: 106702) +LibMapTest:testUint32MapSetAndGet(uint256) (runs: 256, μ: 114350, ~: 124336) +LibMapTest:testUint32MapSetAndGet2(uint256) (runs: 256, μ: 67417, ~: 69139) +LibMapTest:testUint32Maps(uint256) (runs: 256, μ: 64099, ~: 72236) +LibMapTest:testUint40MapSearchSorted(uint256) (runs: 256, μ: 134900, ~: 106702) LibMapTest:testUint40MapSetAndGet() (gas: 1127344) -LibMapTest:testUint40MapSetAndGet(uint256) (runs: 256, μ: 135931, ~: 145996) -LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 256, μ: 67100, ~: 69213) -LibMapTest:testUint64MapSearchSorted(uint256) (runs: 256, μ: 130943, ~: 108449) +LibMapTest:testUint40MapSetAndGet(uint256) (runs: 256, μ: 136972, ~: 145996) +LibMapTest:testUint40MapSetAndGet2(uint256) (runs: 256, μ: 67025, ~: 69222) +LibMapTest:testUint64MapSearchSorted(uint256) (runs: 256, μ: 126533, ~: 108400) LibMapTest:testUint64MapSetAndGet() (gas: 1220437) -LibMapTest:testUint64MapSetAndGet(uint256) (runs: 256, μ: 141646, ~: 146722) -LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 256, μ: 65159, ~: 69189) -LibMapTest:testUint8MapSearchSorted(uint256) (runs: 256, μ: 97720, ~: 85875) +LibMapTest:testUint64MapSetAndGet(uint256) (runs: 256, μ: 141134, ~: 146540) +LibMapTest:testUint64MapSetAndGet2(uint256) (runs: 256, μ: 65001, ~: 69181) +LibMapTest:testUint8MapSearchSorted(uint256) (runs: 256, μ: 98669, ~: 86281) LibMapTest:testUint8MapSetAndGet() (gas: 883454) LibMapTest:testUint8MapSetAndGet(uint256) (runs: 256, μ: 59148, ~: 59100) -LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 256, μ: 67534, ~: 69100) +LibMapTest:testUint8MapSetAndGet2(uint256) (runs: 256, μ: 67769, ~: 69101) LibMapTest:test__codesize() (gas: 13187) LibPRNGTest:testLCGGas() (gas: 20736) LibPRNGTest:testPRNGGas() (gas: 25645) @@ -613,7 +614,7 @@ LibPRNGTest:testPRNGShuffleBytesGas() (gas: 1322452) LibPRNGTest:testPRNGShuffleGas() (gas: 1610949) LibPRNGTest:testPRNGUniform() (gas: 559341) LibPRNGTest:test__codesize() (gas: 4526) -LibRLPTest:testComputeAddressDifferential(address,uint256) (runs: 256, μ: 1956, ~: 1831) +LibRLPTest:testComputeAddressDifferential(address,uint256) (runs: 256, μ: 1948, ~: 1831) LibRLPTest:testComputeAddressForLargeNonces() (gas: 1771) LibRLPTest:testComputeAddressForSmallNonces() (gas: 967) LibRLPTest:testComputeAddressOriginalForLargeNonces() (gas: 1887) @@ -622,35 +623,35 @@ LibRLPTest:test__codesize() (gas: 8108) LibSortTest:testInsertionSortAddressesDifferential(uint256) (runs: 256, μ: 35967, ~: 25750) LibSortTest:testInsertionSortInts() (gas: 112135) LibSortTest:testInsertionSortPsuedorandom() (gas: 62806) -LibSortTest:testInsertionSortPsuedorandom(uint256) (runs: 256, μ: 62017, ~: 61704) -LibSortTest:testIsSortedAddressesDifferential(uint256) (runs: 256, μ: 41276, ~: 29500) -LibSortTest:testIsSortedAndUniquifiedAddressesDifferential(uint256) (runs: 256, μ: 31127, ~: 29193) -LibSortTest:testIsSortedAndUniquifiedDifferential(uint256) (runs: 256, μ: 33409, ~: 26806) -LibSortTest:testIsSortedAndUniquifiedIntsDifferential(uint256) (runs: 256, μ: 88605, ~: 32035) -LibSortTest:testIsSortedDifferential(uint256) (runs: 256, μ: 35000, ~: 27521) -LibSortTest:testIsSortedIntsDifferential(uint256) (runs: 256, μ: 41409, ~: 30495) +LibSortTest:testInsertionSortPsuedorandom(uint256) (runs: 256, μ: 61996, ~: 61637) +LibSortTest:testIsSortedAddressesDifferential(uint256) (runs: 256, μ: 37530, ~: 29367) +LibSortTest:testIsSortedAndUniquifiedAddressesDifferential(uint256) (runs: 256, μ: 33725, ~: 29154) +LibSortTest:testIsSortedAndUniquifiedDifferential(uint256) (runs: 256, μ: 33577, ~: 26806) +LibSortTest:testIsSortedAndUniquifiedIntsDifferential(uint256) (runs: 256, μ: 89821, ~: 32035) +LibSortTest:testIsSortedDifferential(uint256) (runs: 256, μ: 34398, ~: 27521) +LibSortTest:testIsSortedIntsDifferential(uint256) (runs: 256, μ: 43804, ~: 30264) LibSortTest:testReverse() (gas: 114573) LibSortTest:testSearchSorted() (gas: 118972) LibSortTest:testSearchSortedAddresses() (gas: 254850) LibSortTest:testSearchSortedBasicCases() (gas: 2244) -LibSortTest:testSearchSortedDifferential(uint256) (runs: 256, μ: 45888, ~: 29238) +LibSortTest:testSearchSortedDifferential(uint256) (runs: 256, μ: 46869, ~: 29238) LibSortTest:testSearchSortedEdgeCases() (gas: 1675) -LibSortTest:testSearchSortedElementInArray(uint256) (runs: 256, μ: 58223, ~: 31626) +LibSortTest:testSearchSortedElementInArray(uint256) (runs: 256, μ: 52908, ~: 31626) LibSortTest:testSearchSortedElementNotInArray() (gas: 6338) LibSortTest:testSearchSortedElementNotInArray(uint256) (runs: 256, μ: 67613, ~: 35422) LibSortTest:testSearchSortedInts() (gas: 120794) -LibSortTest:testSearchSortedInts(int256[],int256) (runs: 256, μ: 11888, ~: 12059) +LibSortTest:testSearchSortedInts(int256[],int256) (runs: 256, μ: 11887, ~: 12059) LibSortTest:testSearchSortedWithEmptyArray() (gas: 738) -LibSortTest:testSort(uint256) (runs: 256, μ: 49996, ~: 29774) -LibSortTest:testSortAddressesDifferential(uint256) (runs: 256, μ: 107948, ~: 29625) +LibSortTest:testSort(uint256) (runs: 256, μ: 46941, ~: 29774) +LibSortTest:testSortAddressesDifferential(uint256) (runs: 256, μ: 106312, ~: 29625) LibSortTest:testSortAddressesPsuedorandom() (gas: 144831) -LibSortTest:testSortAddressesPsuedorandom(uint256) (runs: 256, μ: 146515, ~: 146583) +LibSortTest:testSortAddressesPsuedorandom(uint256) (runs: 256, μ: 146511, ~: 146653) LibSortTest:testSortAddressesPsuedorandomBrutalizeUpperBits() (gas: 195855) LibSortTest:testSortAddressesReversed() (gas: 45400) LibSortTest:testSortAddressesSorted() (gas: 42376) LibSortTest:testSortBasicCase() (gas: 1210) -LibSortTest:testSortChecksumed(uint256) (runs: 256, μ: 43882, ~: 28414) -LibSortTest:testSortDifferential(uint256) (runs: 256, μ: 44344, ~: 27065) +LibSortTest:testSortChecksumed(uint256) (runs: 256, μ: 41765, ~: 28194) +LibSortTest:testSortDifferential(uint256) (runs: 256, μ: 50383, ~: 27194) LibSortTest:testSortInts() (gas: 612197) LibSortTest:testSortMostlySame() (gas: 67374) LibSortTest:testSortOriginalMostlySame() (gas: 207985) @@ -659,7 +660,7 @@ LibSortTest:testSortOriginalPsuedorandom(uint256) (runs: 256, μ: 285134, ~: 285 LibSortTest:testSortOriginalReversed() (gas: 156282) LibSortTest:testSortOriginalSorted() (gas: 142263) LibSortTest:testSortPsuedorandom() (gas: 138551) -LibSortTest:testSortPsuedorandom(uint256) (runs: 256, μ: 139984, ~: 140197) +LibSortTest:testSortPsuedorandom(uint256) (runs: 256, μ: 139957, ~: 140097) LibSortTest:testSortPsuedorandomNonuniform() (gas: 145689) LibSortTest:testSortPsuedorandomNonuniform(uint256) (runs: 256, μ: 145242, ~: 145503) LibSortTest:testSortReversed() (gas: 38827) @@ -667,53 +668,53 @@ LibSortTest:testSortSorted() (gas: 35785) LibSortTest:testSortTestOverhead() (gas: 102190) LibSortTest:testSortedDifferenceDifferential() (gas: 174014) LibSortTest:testSortedDifferenceDifferential(uint256) (runs: 256, μ: 35743, ~: 35595) -LibSortTest:testSortedDifferenceDifferentialInt(uint256) (runs: 256, μ: 34908, ~: 33756) -LibSortTest:testSortedDifferenceUnionIntersection(uint256) (runs: 256, μ: 58271, ~: 52783) +LibSortTest:testSortedDifferenceDifferentialInt(uint256) (runs: 256, μ: 35099, ~: 34485) +LibSortTest:testSortedDifferenceUnionIntersection(uint256) (runs: 256, μ: 58456, ~: 53535) LibSortTest:testSortedIntersectionDifferential() (gas: 208149) LibSortTest:testSortedIntersectionDifferential(uint256) (runs: 256, μ: 32268, ~: 31481) -LibSortTest:testSortedIntersectionDifferentialInt(uint256) (runs: 256, μ: 36078, ~: 35363) +LibSortTest:testSortedIntersectionDifferentialInt(uint256) (runs: 256, μ: 35871, ~: 35215) LibSortTest:testSortedUnionDifferential() (gas: 212603) -LibSortTest:testSortedUnionDifferential(uint256) (runs: 256, μ: 34493, ~: 34262) +LibSortTest:testSortedUnionDifferential(uint256) (runs: 256, μ: 34338, ~: 34163) LibSortTest:testSortedUnionDifferentialInt(uint256) (runs: 256, μ: 38745, ~: 39202) LibSortTest:testTwoComplementConversionSort(int256,int256) (runs: 256, μ: 515, ~: 514) LibSortTest:testUniquifySorted() (gas: 1710) LibSortTest:testUniquifySorted(uint256) (runs: 256, μ: 42329, ~: 24996) LibSortTest:testUniquifySortedAddress() (gas: 4039) -LibSortTest:testUniquifySortedAddress(uint256) (runs: 256, μ: 66242, ~: 30065) -LibSortTest:testUniquifySortedDifferential(uint256) (runs: 256, μ: 66091, ~: 33106) +LibSortTest:testUniquifySortedAddress(uint256) (runs: 256, μ: 67632, ~: 30265) +LibSortTest:testUniquifySortedDifferential(uint256) (runs: 256, μ: 67605, ~: 33106) LibSortTest:testUniquifySortedWithEmptyArray() (gas: 506) LibSortTest:test__codesize() (gas: 23230) LibStringTest:testAddressToHexStringZeroRightPadded(address) (runs: 256, μ: 3370, ~: 3370) LibStringTest:testBytesToHexString() (gas: 6446) -LibStringTest:testBytesToHexString(bytes) (runs: 256, μ: 772918, ~: 637119) +LibStringTest:testBytesToHexString(bytes) (runs: 256, μ: 763717, ~: 637119) LibStringTest:testBytesToHexStringNoPrefix() (gas: 6064) -LibStringTest:testBytesToHexStringNoPrefix(bytes) (runs: 256, μ: 837443, ~: 636873) +LibStringTest:testBytesToHexStringNoPrefix(bytes) (runs: 256, μ: 803341, ~: 636740) LibStringTest:testFromAddressToHexString() (gas: 3774) LibStringTest:testFromAddressToHexStringChecksummed() (gas: 40448) -LibStringTest:testFromAddressToHexStringChecksummedDifferential(uint256) (runs: 256, μ: 774351, ~: 626326) +LibStringTest:testFromAddressToHexStringChecksummedDifferential(uint256) (runs: 256, μ: 797778, ~: 626327) LibStringTest:testFromAddressToHexStringWithLeadingZeros() (gas: 3795) -LibStringTest:testHexStringNoPrefixVariants(uint256,uint256) (runs: 256, μ: 739859, ~: 637160) +LibStringTest:testHexStringNoPrefixVariants(uint256,uint256) (runs: 256, μ: 740033, ~: 637507) LibStringTest:testStringConcat() (gas: 7385) LibStringTest:testStringConcat(string,string) (runs: 256, μ: 694579, ~: 618041) LibStringTest:testStringConcatOriginal() (gas: 8045) LibStringTest:testStringDirectReturn() (gas: 8213) LibStringTest:testStringDirectReturn(string) (runs: 256, μ: 3614, ~: 3455) LibStringTest:testStringEndsWith() (gas: 2852) -LibStringTest:testStringEndsWith(uint256) (runs: 256, μ: 931238, ~: 646741) +LibStringTest:testStringEndsWith(uint256) (runs: 256, μ: 924497, ~: 648653) LibStringTest:testStringEq(string,string) (runs: 256, μ: 1586, ~: 1587) LibStringTest:testStringEqs() (gas: 1861) LibStringTest:testStringEscapeHTML() (gas: 11903) -LibStringTest:testStringEscapeHTML(uint256) (runs: 256, μ: 813327, ~: 665820) +LibStringTest:testStringEscapeHTML(uint256) (runs: 256, μ: 810017, ~: 665483) LibStringTest:testStringEscapeJSON() (gas: 53305) LibStringTest:testStringEscapeJSONHexEncode() (gas: 754092) LibStringTest:testStringIndexOf() (gas: 17420) -LibStringTest:testStringIndexOf(uint256) (runs: 256, μ: 866676, ~: 661873) +LibStringTest:testStringIndexOf(uint256) (runs: 256, μ: 865008, ~: 661873) LibStringTest:testStringIndicesOf() (gas: 11658) -LibStringTest:testStringIndicesOf(uint256) (runs: 256, μ: 827181, ~: 663380) +LibStringTest:testStringIndicesOf(uint256) (runs: 256, μ: 806875, ~: 663717) LibStringTest:testStringIs7BitASCII() (gas: 205190) -LibStringTest:testStringIs7BitASCIIDifferential(bytes) (runs: 256, μ: 710329, ~: 616710) +LibStringTest:testStringIs7BitASCIIDifferential(bytes) (runs: 256, μ: 717405, ~: 616710) LibStringTest:testStringLastIndexOf() (gas: 24020) -LibStringTest:testStringLastIndexOf(uint256) (runs: 256, μ: 733459, ~: 657679) +LibStringTest:testStringLastIndexOf(uint256) (runs: 256, μ: 743761, ~: 657679) LibStringTest:testStringLowerDifferential() (gas: 3947004) LibStringTest:testStringLowerDifferential(string) (runs: 256, μ: 8885, ~: 8516) LibStringTest:testStringLowerOriginal() (gas: 1783) @@ -724,20 +725,20 @@ LibStringTest:testStringPackAndUnpackTwo() (gas: 940006) LibStringTest:testStringPackAndUnpackTwo(string,string) (runs: 256, μ: 701565, ~: 618228) LibStringTest:testStringPackAndUnpackTwoDifferential(string,string) (runs: 256, μ: 727798, ~: 616866) LibStringTest:testStringRepeat() (gas: 8998) -LibStringTest:testStringRepeat(string,uint256) (runs: 256, μ: 726697, ~: 619474) +LibStringTest:testStringRepeat(string,uint256) (runs: 256, μ: 734075, ~: 619423) LibStringTest:testStringRepeatOriginal() (gas: 13671) -LibStringTest:testStringReplace(uint256) (runs: 256, μ: 738186, ~: 665063) +LibStringTest:testStringReplace(uint256) (runs: 256, μ: 753020, ~: 665016) LibStringTest:testStringReplaceLong() (gas: 9754) LibStringTest:testStringReplaceMedium() (gas: 8541) LibStringTest:testStringReplaceShort() (gas: 17434) LibStringTest:testStringRuneCount() (gas: 2972587) LibStringTest:testStringRuneCountDifferential(string) (runs: 256, μ: 6107, ~: 5884) LibStringTest:testStringSlice() (gas: 17767) -LibStringTest:testStringSlice(uint256) (runs: 256, μ: 721025, ~: 662801) +LibStringTest:testStringSlice(uint256) (runs: 256, μ: 716628, ~: 662393) LibStringTest:testStringSplit() (gas: 20265) -LibStringTest:testStringSplit(uint256) (runs: 256, μ: 788213, ~: 660602) +LibStringTest:testStringSplit(uint256) (runs: 256, μ: 778059, ~: 660602) LibStringTest:testStringStartsWith() (gas: 2589) -LibStringTest:testStringStartsWith(uint256) (runs: 256, μ: 746428, ~: 649048) +LibStringTest:testStringStartsWith(uint256) (runs: 256, μ: 719066, ~: 649048) LibStringTest:testStringUpperDifferential() (gas: 3492145) LibStringTest:testStringUpperDifferential(string) (runs: 256, μ: 8884, ~: 8515) LibStringTest:testStringUpperOriginal() (gas: 1759) @@ -745,80 +746,80 @@ LibStringTest:testToHexStringFixedLengthInsufficientLength() (gas: 3344) LibStringTest:testToHexStringFixedLengthPositiveNumberLong() (gas: 4454) LibStringTest:testToHexStringFixedLengthPositiveNumberShort() (gas: 1459) LibStringTest:testToHexStringFixedLengthUint256Max() (gas: 4478) -LibStringTest:testToHexStringFixedLengthZeroRightPadded(uint256,uint256) (runs: 256, μ: 8160, ~: 5112) +LibStringTest:testToHexStringFixedLengthZeroRightPadded(uint256,uint256) (runs: 256, μ: 8270, ~: 5219) LibStringTest:testToHexStringPositiveNumber() (gas: 1407) LibStringTest:testToHexStringUint256Max() (gas: 4219) LibStringTest:testToHexStringZero() (gas: 1302) -LibStringTest:testToHexStringZeroRightPadded(uint256) (runs: 256, μ: 1989, ~: 1280) +LibStringTest:testToHexStringZeroRightPadded(uint256) (runs: 256, μ: 2022, ~: 1322) LibStringTest:testToMinimalHexStringNoPrefixPositiveNumber() (gas: 6022) LibStringTest:testToMinimalHexStringNoPrefixUint256Max() (gas: 4064) LibStringTest:testToMinimalHexStringNoPrefixZero() (gas: 1372) -LibStringTest:testToMinimalHexStringNoPrefixZeroRightPadded(uint256) (runs: 256, μ: 2025, ~: 1323) +LibStringTest:testToMinimalHexStringNoPrefixZeroRightPadded(uint256) (runs: 256, μ: 2058, ~: 1365) LibStringTest:testToMinimalHexStringPositiveNumber() (gas: 6111) LibStringTest:testToMinimalHexStringUint256Max() (gas: 4247) LibStringTest:testToMinimalHexStringZero() (gas: 1393) -LibStringTest:testToMinimalHexStringZeroRightPadded(uint256) (runs: 256, μ: 2036, ~: 1327) +LibStringTest:testToMinimalHexStringZeroRightPadded(uint256) (runs: 256, μ: 2069, ~: 1369) LibStringTest:testToStringPositiveNumber() (gas: 1448) LibStringTest:testToStringPositiveNumberBrutalized() (gas: 844519) -LibStringTest:testToStringSignedDifferential(int256) (runs: 256, μ: 684881, ~: 616956) +LibStringTest:testToStringSignedDifferential(int256) (runs: 256, μ: 688334, ~: 617152) LibStringTest:testToStringSignedGas() (gas: 7253) -LibStringTest:testToStringSignedMemory(int256) (runs: 256, μ: 747745, ~: 615969) +LibStringTest:testToStringSignedMemory(int256) (runs: 256, μ: 752405, ~: 616047) LibStringTest:testToStringSignedOriginalGas() (gas: 9861) LibStringTest:testToStringUint256Max() (gas: 7464) LibStringTest:testToStringUint256MaxBrutalized() (gas: 629141) LibStringTest:testToStringZero() (gas: 1196) LibStringTest:testToStringZeroBrutalized() (gas: 616508) -LibStringTest:testToStringZeroRightPadded(uint256) (runs: 256, μ: 754706, ~: 616331) +LibStringTest:testToStringZeroRightPadded(uint256) (runs: 256, μ: 758441, ~: 616655) LibStringTest:test__codesize() (gas: 40333) LibZipTest:testCdCompress() (gas: 156007) -LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 737804, ~: 646622) -LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 781635, ~: 692744) +LibZipTest:testCdCompressDecompress(bytes) (runs: 256, μ: 746749, ~: 645628) +LibZipTest:testCdCompressDecompress(uint256) (runs: 256, μ: 809536, ~: 692744) LibZipTest:testCdDecompressOnInvalidInput() (gas: 26080) LibZipTest:testCdFallback() (gas: 5674556) -LibZipTest:testCdFallback(bytes,uint256) (runs: 256, μ: 1192980, ~: 1050197) +LibZipTest:testCdFallback(bytes,uint256) (runs: 256, μ: 1208573, ~: 1050197) LibZipTest:testCdFallbackDecompressor(bytes) (runs: 256, μ: 121261, ~: 117358) -LibZipTest:testCdFallbackDecompressor(uint256) (runs: 256, μ: 166745, ~: 157895) +LibZipTest:testCdFallbackDecompressor(uint256) (runs: 256, μ: 167688, ~: 157689) LibZipTest:testCdFallbackMaskTrick(uint256,uint256) (runs: 256, μ: 689, ~: 663) LibZipTest:testDecompressWontRevert(bytes) (runs: 256, μ: 738983, ~: 625946) LibZipTest:testFlzCompressDecompress() (gas: 1920321) -LibZipTest:testFlzCompressDecompress(bytes) (runs: 256, μ: 877428, ~: 677432) +LibZipTest:testFlzCompressDecompress(bytes) (runs: 256, μ: 883619, ~: 677865) LibZipTest:testFlzCompressDecompress2() (gas: 942068) LibZipTest:test__codesize() (gas: 21712) MerkleProofLibTest:testEmptyCalldataHelpers() (gas: 1086) -MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 256, μ: 735848, ~: 629082) +MerkleProofLibTest:testVerifyMultiProof(bool,bool,bool,bool,bytes32) (runs: 256, μ: 747917, ~: 629032) MerkleProofLibTest:testVerifyMultiProofForHeightOneTree(bool,bool,bool,bool,bool,bool[]) (runs: 256, μ: 37116, ~: 37668) MerkleProofLibTest:testVerifyMultiProofForHeightTwoTree(bool,bool,bool,bool,bool,bytes32) (runs: 256, μ: 6520, ~: 6489) -MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 256, μ: 896629, ~: 782839) +MerkleProofLibTest:testVerifyMultiProofForSingleLeaf(bytes32[],uint256) (runs: 256, μ: 896338, ~: 787447) MerkleProofLibTest:testVerifyMultiProofIsInvalid() (gas: 627912) MerkleProofLibTest:testVerifyMultiProofIsValid() (gas: 629253) MerkleProofLibTest:testVerifyMultiProofMalicious() (gas: 7998) -MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 256, μ: 865714, ~: 772446) +MerkleProofLibTest:testVerifyProof(bytes32[],uint256) (runs: 256, μ: 893335, ~: 774180) MerkleProofLibTest:testVerifyProofBasicCase(bool,bool,bool,bytes32) (runs: 256, μ: 4077, ~: 4222) MerkleProofLibTest:testVerifyProofBasicCaseIsInvalid() (gas: 3581) MerkleProofLibTest:testVerifyProofBasicCaseIsValid() (gas: 3590) MerkleProofLibTest:testVerifyProofForHeightOneTree(bool,bool,bool,bool) (runs: 256, μ: 2697, ~: 2971) MerkleProofLibTest:test__codesize() (gas: 12117) -MetadataReaderLibTest:testBoundsCheckDifferential(uint256) (runs: 256, μ: 25571, ~: 25536) +MetadataReaderLibTest:testBoundsCheckDifferential(uint256) (runs: 256, μ: 25558, ~: 25536) MetadataReaderLibTest:testReadBytes32String() (gas: 641910) MetadataReaderLibTest:testReadBytes32StringTruncated() (gas: 752829) -MetadataReaderLibTest:testReadString(uint256) (runs: 256, μ: 840531, ~: 722894) +MetadataReaderLibTest:testReadString(uint256) (runs: 256, μ: 842310, ~: 722894) MetadataReaderLibTest:testReadStringChopped() (gas: 223238) -MetadataReaderLibTest:testReadStringTruncated(uint256) (runs: 256, μ: 795728, ~: 710083) +MetadataReaderLibTest:testReadStringTruncated(uint256) (runs: 256, μ: 814741, ~: 710316) MetadataReaderLibTest:testReadUint() (gas: 542217) MetadataReaderLibTest:testReadUint(uint256) (runs: 256, μ: 22765, ~: 23854) MetadataReaderLibTest:test__codesize() (gas: 8645) -MinHeapLibTest:testHeapEnqueue(uint256) (runs: 256, μ: 189697, ~: 191079) -MinHeapLibTest:testHeapEnqueueGas(uint256) (runs: 256, μ: 293332, ~: 293389) -MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 256, μ: 105751, ~: 99702) +MinHeapLibTest:testHeapEnqueue(uint256) (runs: 256, μ: 184437, ~: 184485) +MinHeapLibTest:testHeapEnqueueGas(uint256) (runs: 256, μ: 293352, ~: 293395) +MinHeapLibTest:testHeapPushAndPop(uint256) (runs: 256, μ: 108526, ~: 99702) MinHeapLibTest:testHeapPushPop(uint256) (runs: 256, μ: 246549, ~: 254170) -MinHeapLibTest:testHeapReplace(uint256) (runs: 256, μ: 304676, ~: 293862) +MinHeapLibTest:testHeapReplace(uint256) (runs: 256, μ: 306102, ~: 314615) MinHeapLibTest:testHeapRoot(uint256) (runs: 256, μ: 5232, ~: 5232) MinHeapLibTest:test__codesize() (gas: 5404) MulticallableTest:testMulticallableBenchmark() (gas: 29588) MulticallableTest:testMulticallableOriginalBenchmark() (gas: 38849) MulticallableTest:testMulticallablePreservesMsgSender() (gas: 11193) MulticallableTest:testMulticallableReturnDataIsProperlyEncoded() (gas: 11667) -MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(string,string,uint256) (runs: 256, μ: 9892, ~: 11494) +MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(string,string,uint256) (runs: 256, μ: 9874, ~: 9484) MulticallableTest:testMulticallableReturnDataIsProperlyEncoded(uint256,uint256,uint256,uint256) (runs: 256, μ: 11813, ~: 11813) MulticallableTest:testMulticallableRevertWithCustomError() (gas: 11841) MulticallableTest:testMulticallableRevertWithMessage() (gas: 13513) @@ -827,11 +828,11 @@ MulticallableTest:testMulticallableRevertWithNothing() (gas: 11730) MulticallableTest:testMulticallableWithNoData() (gas: 6322) MulticallableTest:test__codesize() (gas: 9796) OwnableRolesTest:testBytecodeSize() (gas: 350635) -OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 256, μ: 38488, ~: 40582) -OwnableRolesTest:testGrantAndRevokeOrRenounceRoles(address,bool,bool,bool,uint256,uint256) (runs: 256, μ: 27653, ~: 28129) +OwnableRolesTest:testGrantAndRemoveRolesDirect(address,uint256,uint256) (runs: 256, μ: 38391, ~: 40582) +OwnableRolesTest:testGrantAndRevokeOrRenounceRoles(address,bool,bool,bool,uint256,uint256) (runs: 256, μ: 27601, ~: 28129) OwnableRolesTest:testGrantRoles() (gas: 36122) OwnableRolesTest:testHandoverOwnership() (gas: 32342) -OwnableRolesTest:testHandoverOwnership(address) (runs: 256, μ: 32401, ~: 32386) +OwnableRolesTest:testHandoverOwnership(address) (runs: 256, μ: 32400, ~: 32386) OwnableRolesTest:testHandoverOwnershipAfterExpiration() (gas: 36930) OwnableRolesTest:testHandoverOwnershipBeforeExpiration() (gas: 28667) OwnableRolesTest:testHandoverOwnershipRevertsIfCompleteIsNotOwner() (gas: 35585) @@ -841,24 +842,24 @@ OwnableRolesTest:testHasAnyRole(address,uint256,uint256) (runs: 256, μ: 32710, OwnableRolesTest:testInitializeOwnerDirect() (gas: 16724) OwnableRolesTest:testOnlyOwnerModifier(address,bool) (runs: 256, μ: 23708, ~: 32884) OwnableRolesTest:testOnlyOwnerOrRolesModifier() (gas: 36582) -OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 256, μ: 55535, ~: 57924) -OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 256, μ: 53891, ~: 57912) +OwnableRolesTest:testOnlyOwnerOrRolesModifier(address,bool,uint256,uint256) (runs: 256, μ: 55705, ~: 57924) +OwnableRolesTest:testOnlyRolesModifier(address,uint256,uint256) (runs: 256, μ: 53721, ~: 57912) OwnableRolesTest:testOnlyRolesOrOwnerModifier(address,bool,uint256,uint256) (runs: 256, μ: 56866, ~: 58382) OwnableRolesTest:testOrdinalsFromRoles() (gas: 3610415) -OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 256, μ: 69796, ~: 34212) +OwnableRolesTest:testOrdinalsFromRoles(uint256) (runs: 256, μ: 69762, ~: 33845) OwnableRolesTest:testOwnershipHandoverValidForDefaultValue() (gas: 5825) OwnableRolesTest:testRenounceOwnership() (gas: 12899) OwnableRolesTest:testRolesFromOrdinals() (gas: 651259) OwnableRolesTest:testRolesFromOrdinals(uint8[]) (runs: 256, μ: 78088, ~: 74221) OwnableRolesTest:testSetOwnerDirect() (gas: 17776) OwnableRolesTest:testSetOwnerDirect(address) (runs: 256, μ: 17901, ~: 17901) -OwnableRolesTest:testSetRolesDirect(uint256) (runs: 256, μ: 99844, ~: 99819) +OwnableRolesTest:testSetRolesDirect(uint256) (runs: 256, μ: 99847, ~: 99819) OwnableRolesTest:testTransferOwnership() (gas: 19657) OwnableRolesTest:testTransferOwnership(address,bool,bool) (runs: 256, μ: 14470, ~: 12721) OwnableRolesTest:test__codesize() (gas: 23704) OwnableTest:testBytecodeSize() (gas: 235158) OwnableTest:testHandoverOwnership() (gas: 32072) -OwnableTest:testHandoverOwnership(address) (runs: 256, μ: 32095, ~: 32081) +OwnableTest:testHandoverOwnership(address) (runs: 256, μ: 32094, ~: 32081) OwnableTest:testHandoverOwnershipAfterExpiration() (gas: 36642) OwnableTest:testHandoverOwnershipBeforeExpiration() (gas: 28516) OwnableTest:testHandoverOwnershipRevertsIfCompleteIsNotOwner() (gas: 35341) @@ -868,9 +869,9 @@ OwnableTest:testOnlyOwnerModifier(address,bool) (runs: 256, μ: 23624, ~: 32828) OwnableTest:testOwnershipHandoverValidForDefaultValue() (gas: 5737) OwnableTest:testRenounceOwnership() (gas: 12755) OwnableTest:testSetOwnerDirect() (gas: 17686) -OwnableTest:testSetOwnerDirect(address) (runs: 256, μ: 17793, ~: 17812) +OwnableTest:testSetOwnerDirect(address) (runs: 256, μ: 17812, ~: 17812) OwnableTest:testTransferOwnership() (gas: 19467) -OwnableTest:testTransferOwnership(address,bool,bool) (runs: 256, μ: 14219, ~: 12487) +OwnableTest:testTransferOwnership(address,bool,bool) (runs: 256, μ: 14191, ~: 12487) OwnableTest:test__codesize() (gas: 12233) ReceiverTest:testETHReceived() (gas: 9621) ReceiverTest:testOnERC1155BatchReceived() (gas: 48975) @@ -880,16 +881,16 @@ ReceiverTest:test__codesize() (gas: 3310) RedBlackTreeLibTest:testRedBlackTreeBenchUint160() (gas: 3438446) RedBlackTreeLibTest:testRedBlackTreeBenchUint256() (gas: 5850739) RedBlackTreeLibTest:testRedBlackTreeClear() (gas: 57543) -RedBlackTreeLibTest:testRedBlackTreeClear(uint256) (runs: 256, μ: 285448, ~: 214270) -RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove(uint256) (runs: 256, μ: 722287, ~: 525248) -RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove2(uint256) (runs: 256, μ: 418578, ~: 388876) +RedBlackTreeLibTest:testRedBlackTreeClear(uint256) (runs: 256, μ: 289199, ~: 214826) +RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove(uint256) (runs: 256, μ: 698454, ~: 525248) +RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove2(uint256) (runs: 256, μ: 420135, ~: 388876) RedBlackTreeLibTest:testRedBlackTreeInsertAndRemove3() (gas: 21537948) RedBlackTreeLibTest:testRedBlackTreeInsertBenchStep() (gas: 3711319) RedBlackTreeLibTest:testRedBlackTreeInsertBenchUint160() (gas: 3476937) RedBlackTreeLibTest:testRedBlackTreeInsertBenchUint256() (gas: 6376001) -RedBlackTreeLibTest:testRedBlackTreeNearest(uint256) (runs: 256, μ: 238608, ~: 223532) -RedBlackTreeLibTest:testRedBlackTreeNearestAfter(uint256) (runs: 256, μ: 261807, ~: 246502) -RedBlackTreeLibTest:testRedBlackTreeNearestBefore(uint256) (runs: 256, μ: 229214, ~: 192904) +RedBlackTreeLibTest:testRedBlackTreeNearest(uint256) (runs: 256, μ: 227576, ~: 222624) +RedBlackTreeLibTest:testRedBlackTreeNearestAfter(uint256) (runs: 256, μ: 254293, ~: 246502) +RedBlackTreeLibTest:testRedBlackTreeNearestBefore(uint256) (runs: 256, μ: 235352, ~: 220313) RedBlackTreeLibTest:testRedBlackTreePointers() (gas: 91901) RedBlackTreeLibTest:testRedBlackTreeRejectsEmptyValue() (gas: 3194) RedBlackTreeLibTest:testRedBlackTreeRemoveViaPointer() (gas: 58199) @@ -897,20 +898,20 @@ RedBlackTreeLibTest:testRedBlackTreeTreeFullReverts() (gas: 50293) RedBlackTreeLibTest:testRedBlackTreeTryInsertAndRemove() (gas: 56127) RedBlackTreeLibTest:test__codesize() (gas: 13237) SSTORE2Test:testReadInvalidPointerCustomBoundsReverts() (gas: 3242) -SSTORE2Test:testReadInvalidPointerCustomBoundsReverts(address,uint256,uint256) (runs: 256, μ: 751366, ~: 632300) +SSTORE2Test:testReadInvalidPointerCustomBoundsReverts(address,uint256,uint256) (runs: 256, μ: 765666, ~: 632367) SSTORE2Test:testReadInvalidPointerCustomStartBoundReverts() (gas: 3241) -SSTORE2Test:testReadInvalidPointerCustomStartBoundReverts(address,uint256) (runs: 256, μ: 702855, ~: 632453) -SSTORE2Test:testReadInvalidPointerRevert(address) (runs: 256, μ: 729577, ~: 632130) +SSTORE2Test:testReadInvalidPointerCustomStartBoundReverts(address,uint256) (runs: 256, μ: 702843, ~: 632453) +SSTORE2Test:testReadInvalidPointerRevert(address) (runs: 256, μ: 729579, ~: 632130) SSTORE2Test:testReadInvalidPointerReverts() (gas: 3215) SSTORE2Test:testWriteRead() (gas: 69590) -SSTORE2Test:testWriteRead(bytes) (runs: 256, μ: 808361, ~: 673919) +SSTORE2Test:testWriteRead(bytes) (runs: 256, μ: 805883, ~: 673902) SSTORE2Test:testWriteReadCustomBounds() (gas: 34463) -SSTORE2Test:testWriteReadCustomBounds(bytes,uint256,uint256) (runs: 256, μ: 743760, ~: 665990) -SSTORE2Test:testWriteReadCustomBoundsOutOfRangeReverts(bytes,uint256,uint256) (runs: 256, μ: 823024, ~: 669861) +SSTORE2Test:testWriteReadCustomBounds(bytes,uint256,uint256) (runs: 256, μ: 761817, ~: 666288) +SSTORE2Test:testWriteReadCustomBoundsOutOfRangeReverts(bytes,uint256,uint256) (runs: 256, μ: 835843, ~: 669947) SSTORE2Test:testWriteReadCustomStartBound() (gas: 34651) -SSTORE2Test:testWriteReadCustomStartBound(bytes,uint256) (runs: 256, μ: 759205, ~: 671851) -SSTORE2Test:testWriteReadCustomStartBoundOutOfRangeReverts(bytes,uint256) (runs: 256, μ: 798060, ~: 670116) -SSTORE2Test:testWriteReadDeterministic(bytes) (runs: 256, μ: 879553, ~: 745850) +SSTORE2Test:testWriteReadCustomStartBound(bytes,uint256) (runs: 256, μ: 776405, ~: 671909) +SSTORE2Test:testWriteReadCustomStartBoundOutOfRangeReverts(bytes,uint256) (runs: 256, μ: 798063, ~: 670044) +SSTORE2Test:testWriteReadDeterministic(bytes) (runs: 256, μ: 875920, ~: 746015) SSTORE2Test:testWriteReadEmptyBound() (gas: 33825) SSTORE2Test:testWriteReadEmptyOutOfBoundsReverts() (gas: 36485) SSTORE2Test:testWriteReadFullBoundedRead() (gas: 69630) @@ -927,12 +928,12 @@ SafeCastLibTest:testSafeCastToUint(uint256) (runs: 256, μ: 4150, ~: 3351) SafeCastLibTest:testSafeCastToUint256(int256) (runs: 256, μ: 1297, ~: 432) SafeCastLibTest:testSafeCastToUintBench() (gas: 326306) SafeCastLibTest:test__codesize() (gas: 16001) -SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 256, μ: 110807, ~: 125884) +SafeTransferLibTest:testApproveWithGarbageReverts(address,uint256) (runs: 256, μ: 110649, ~: 125884) SafeTransferLibTest:testApproveWithMissingReturn() (gas: 31945) SafeTransferLibTest:testApproveWithMissingReturn(address,uint256) (runs: 256, μ: 30860, ~: 32104) SafeTransferLibTest:testApproveWithNonContract() (gas: 2989) SafeTransferLibTest:testApproveWithNonContract(address,address,uint256) (runs: 256, μ: 3513, ~: 3536) -SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 256, μ: 77269, ~: 59183) +SafeTransferLibTest:testApproveWithNonGarbage(address,uint256) (runs: 256, μ: 77932, ~: 59187) SafeTransferLibTest:testApproveWithRetry() (gas: 768579) SafeTransferLibTest:testApproveWithRetry(address,uint256,uint256) (runs: 256, μ: 767124, ~: 768723) SafeTransferLibTest:testApproveWithRetryWithNonContract() (gas: 2990) @@ -964,47 +965,47 @@ SafeTransferLibTest:testTransferETH() (gas: 34600) SafeTransferLibTest:testTransferETH(address,uint256) (runs: 256, μ: 32952, ~: 35250) SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts() (gas: 10846) SafeTransferLibTest:testTransferETHToContractWithoutFallbackReverts(uint256) (runs: 256, μ: 10545, ~: 10928) -SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 256, μ: 983776, ~: 784853) +SafeTransferLibTest:testTransferFromWithGarbageReverts(address,address,uint256) (runs: 256, μ: 984465, ~: 786287) SafeTransferLibTest:testTransferFromWithMissingReturn() (gas: 670140) -SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 256, μ: 762093, ~: 669726) +SafeTransferLibTest:testTransferFromWithMissingReturn(address,address,uint256) (runs: 256, μ: 748670, ~: 669734) SafeTransferLibTest:testTransferFromWithNonContract() (gas: 3022) SafeTransferLibTest:testTransferFromWithNonContract(address,address,address,uint256) (runs: 256, μ: 3635, ~: 3694) -SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 256, μ: 875043, ~: 719750) +SafeTransferLibTest:testTransferFromWithNonGarbage(address,address,uint256) (runs: 256, μ: 893726, ~: 719729) SafeTransferLibTest:testTransferFromWithReturnsFalseReverts() (gas: 635037) SafeTransferLibTest:testTransferFromWithReturnsFalseReverts(address,address,uint256) (runs: 256, μ: 699133, ~: 635457) SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts() (gas: 635204) SafeTransferLibTest:testTransferFromWithReturnsTooLittleReverts(address,address,uint256) (runs: 256, μ: 724923, ~: 635291) SafeTransferLibTest:testTransferFromWithReturnsTooMuch() (gas: 669975) -SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 256, μ: 785306, ~: 670486) +SafeTransferLibTest:testTransferFromWithReturnsTooMuch(address,address,uint256) (runs: 256, μ: 754128, ~: 670469) SafeTransferLibTest:testTransferFromWithReturnsTwoReverts(address,address,uint256) (runs: 256, μ: 733108, ~: 635396) SafeTransferLibTest:testTransferFromWithRevertingReverts() (gas: 628748) SafeTransferLibTest:testTransferFromWithRevertingReverts(address,address,uint256) (runs: 256, μ: 734431, ~: 628831) SafeTransferLibTest:testTransferFromWithStandardERC20() (gas: 667720) -SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 256, μ: 721031, ~: 667271) -SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 256, μ: 852181, ~: 747849) +SafeTransferLibTest:testTransferFromWithStandardERC20(address,address,uint256) (runs: 256, μ: 715461, ~: 667300) +SafeTransferLibTest:testTransferWithGarbageReverts(address,uint256) (runs: 256, μ: 849643, ~: 747655) SafeTransferLibTest:testTransferWithMissingReturn() (gas: 655554) -SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 256, μ: 765495, ~: 656170) +SafeTransferLibTest:testTransferWithMissingReturn(address,uint256) (runs: 256, μ: 765497, ~: 656170) SafeTransferLibTest:testTransferWithNonContract() (gas: 2988) SafeTransferLibTest:testTransferWithNonContract(address,address,uint256) (runs: 256, μ: 3534, ~: 3557) -SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 256, μ: 792057, ~: 725150) +SafeTransferLibTest:testTransferWithNonGarbage(address,uint256) (runs: 256, μ: 816012, ~: 723827) SafeTransferLibTest:testTransferWithReturnsFalseReverts() (gas: 632101) SafeTransferLibTest:testTransferWithReturnsFalseReverts(address,uint256) (runs: 256, μ: 787756, ~: 632598) SafeTransferLibTest:testTransferWithReturnsTooLittleReverts() (gas: 632737) SafeTransferLibTest:testTransferWithReturnsTooLittleReverts(address,uint256) (runs: 256, μ: 766198, ~: 632456) SafeTransferLibTest:testTransferWithReturnsTooMuch() (gas: 656022) -SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 256, μ: 788158, ~: 656583) +SafeTransferLibTest:testTransferWithReturnsTooMuch(address,uint256) (runs: 256, μ: 801430, ~: 656583) SafeTransferLibTest:testTransferWithReturnsTwoReverts(address,uint256) (runs: 256, μ: 743827, ~: 632574) SafeTransferLibTest:testTransferWithRevertingReverts() (gas: 631994) SafeTransferLibTest:testTransferWithRevertingReverts(address,uint256) (runs: 256, μ: 792882, ~: 632490) SafeTransferLibTest:testTransferWithStandardERC20() (gas: 656603) -SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 256, μ: 750837, ~: 656344) +SafeTransferLibTest:testTransferWithStandardERC20(address,uint256) (runs: 256, μ: 787015, ~: 656344) SafeTransferLibTest:testTryTransferAllETH() (gas: 148698) SafeTransferLibTest:testTryTransferETH() (gas: 148745) SafeTransferLibTest:testTryTransferETHWithNoGrief() (gas: 537083) SafeTransferLibTest:testTryTransferETHWithNoStorageWrites() (gas: 192518) SafeTransferLibTest:test__codesize() (gas: 37521) SignatureCheckerLibTest:testEmptyCalldataHelpers() (gas: 3972) -SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 256, μ: 57313, ~: 46824) +SignatureCheckerLibTest:testSignatureChecker(bytes32) (runs: 256, μ: 57309, ~: 46802) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSignature() (gas: 21228) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithInvalidSigner() (gas: 30728) SignatureCheckerLibTest:testSignatureCheckerOnEOAWithMatchingSignerAndSignature() (gas: 17670) @@ -1030,7 +1031,7 @@ UUPSUpgradeableTest:testUpgradeToAndCallRevertWithUpgradeFailed() (gas: 18264) UUPSUpgradeableTest:testUpgradeToRevertWithUnauthorized() (gas: 16143) UUPSUpgradeableTest:testUpgradeToRevertWithUpgradeFailed() (gas: 18464) UUPSUpgradeableTest:test__codesize() (gas: 7195) -WETHInvariants:invariantTotalSupplyEqualsBalance() (runs: 256, calls: 3840, reverts: 1811) +WETHInvariants:invariantTotalSupplyEqualsBalance() (runs: 256, calls: 3840, reverts: 1737) WETHInvariants:test__codesize() (gas: 6008) WETHTest:testDeposit() (gas: 68090) WETHTest:testDeposit(uint256) (runs: 256, μ: 65899, ~: 68384) @@ -1039,6 +1040,6 @@ WETHTest:testFallbackDeposit(uint256) (runs: 256, μ: 65560, ~: 68045) WETHTest:testMetadata() (gas: 10098) WETHTest:testPartialWithdraw() (gas: 79566) WETHTest:testWithdraw() (gas: 59332) -WETHTest:testWithdraw(uint256,uint256) (runs: 256, μ: 76696, ~: 80326) +WETHTest:testWithdraw(uint256,uint256) (runs: 256, μ: 76778, ~: 80326) WETHTest:testWithdrawToContractWithoutReceiveReverts() (gas: 93923) WETHTest:test__codesize() (gas: 11080) \ No newline at end of file diff --git a/src/utils/FixedPointMathLib.sol b/src/utils/FixedPointMathLib.sol index 9f56711da..59f052974 100644 --- a/src/utils/FixedPointMathLib.sol +++ b/src/utils/FixedPointMathLib.sol @@ -283,28 +283,30 @@ library FixedPointMathLib { c := gt(l, 60) } } else { - // Approximate with `ln(x) - ln(ln(x)) + b * ln(ln(x)) / ln(x)`. - // Where `b` is chosen for a good starting point. - w = lnWad(w); - if (x >> 72 == 0) { - unchecked { - w = (w * 7169921902066644360) >> 63; - } - c = 2; - } else { - int256 ll = lnWad(w); - /// @solidity memory-safe-assembly - assembly { - w := add(sub(w, ll), sdiv(mul(ll, 1023715086476318099), w)) - } - if (x >> 143 != 0) return _w0Newton(x, w, i); - } + w = _w0Start(w); + if (x >> 80 == 0) c = 10; + else if (x >> 143 != 0) return _w0Newton(x, w, i); + } + return _w0Halley(x, w, i, c, x); + } + + /// @dev Approximates the starting point of `lambertW0Wad` for medium to big inputs. + function _w0Start(int256 w) private pure returns (int256 r) { + // `ln(x) - ln(ln(x)) + b * ln(ln(x)) / ln(x)`. + r = lnWad(w = lnWad(w)); + /// @solidity memory-safe-assembly + assembly { + r := add(sdiv(mul(r, 1023715080943999999), w), sub(w, r)) } - return _w0Halley(x, w, i, c); } /// @dev Halley's method workflow for `lambertW0Wad`. - function _w0Halley(int256 x, int256 w, uint256 i, uint256 c) private pure returns (int256 r) { + function _w0Halley(int256 x, int256 w, uint256 i, uint256 c, int256 q) + private + pure + returns (int256 r) + { + // forgefmt: disable-next-item unchecked { r = w; int256 s; @@ -317,7 +319,6 @@ library FixedPointMathLib { assembly { let t := add(r, wad) s := sub(mul(r, e), mul(x, wad)) - // forgefmt: disable-next-item r := sub(r, sdiv(mul(s, wad), sub(mul(e, t), sdiv(mul(add(t, wad), s), add(t, t))))) } if (p <= r) break; @@ -327,7 +328,10 @@ library FixedPointMathLib { assembly { r := sub(r, sgt(r, 2)) } - if (c != 0) if (r >= s) if ((w = _w0Halley(x - 1, w, i, c - 1)) >= r) r = w; + if (c != 0) if (r >= s) if (r <= q) { + if (x-- >> 63 != 0) w = _w0Start(x); + r = _w0Halley(x, w, i, c - 1, r); + } } } diff --git a/test/FixedPointMathLib.t.sol b/test/FixedPointMathLib.t.sol index a9a479e8c..63258228c 100644 --- a/test/FixedPointMathLib.t.sol +++ b/test/FixedPointMathLib.t.sol @@ -84,6 +84,29 @@ contract FixedPointMathLibTest is SoladyTest { _checkLambertW0Wad(2 ** 143 - 1, 53690283108733387465); _checkLambertW0Wad(2 ** 140 - 1, 51649591321425477661); _checkLambertW0Wad(2 ** 128 - 1, 43503466806167642613); + _checkLambertW0Wad(2 ** 127 - 1, 42826014523312541917); + _checkLambertW0Wad(2 ** 126 - 1, 42148806703328979292); + _checkLambertW0Wad(2 ** 125 - 1, 41471850988441194251); + _checkLambertW0Wad(2 ** 124 - 1, 40795155381822122767); + _checkLambertW0Wad(2 ** 123 - 1, 40118728270531400808); + _checkLambertW0Wad(2 ** 122 - 1, 39442578450294263667); + _checkLambertW0Wad(2 ** 121 - 1, 38766715152300604375); + _checkLambertW0Wad(2 ** 120 - 1, 38091148072224059569); + _checkLambertW0Wad(2 ** 119 - 1, 37415887401684336100); + _checkLambertW0Wad(2 ** 118 - 1, 36740943862402491609); + _checkLambertW0Wad(2 ** 117 - 1, 36066328743329022902); + _checkLambertW0Wad(2 ** 116 - 1, 35392053941058967434); + _checkLambertW0Wad(2 ** 115 - 1, 34718132003887455986); + _checkLambertW0Wad(2 ** 114 - 1, 34044576179904059477); + _checkLambertW0Wad(2 ** 113 - 1, 33371400469575784902); + _checkLambertW0Wad(2 ** 112 - 1, 32698619683327803297); + _checkLambertW0Wad(2 ** 111 - 1, 32026249504699254799); + _checkLambertW0Wad(2 ** 110 - 1, 31354306559730344521); + _checkLambertW0Wad(2 ** 109 - 1, 30682808493328298780); + _checkLambertW0Wad(2 ** 108 - 1, 30011774053465850808); + _checkLambertW0Wad(2 ** 107 - 1, 29341223184189485097); + _checkLambertW0Wad(2 ** 106 - 1, 28671177128558970924); + _checkLambertW0Wad(2 ** 105 - 1, 28001658542808735364); _checkLambertW0Wad(2 ** 104 - 1, 27332691623220201135); _checkLambertW0Wad(2 ** 100 - 1, 24662886826087826761); _checkLambertW0Wad(2 ** 71 - 1, 5978712844468804878); @@ -120,7 +143,6 @@ contract FixedPointMathLibTest is SoladyTest { // These expected values are 1 less than the ground truth. // Could be due to approximation limitations. _checkLambertW0Wad(2 ** 80 - 1, 11557875688514566228 - 1); - _checkLambertW0Wad(2 ** 72 - 1, 6576554370186862926 - 1); } function testLambertW0WadRevertsForOutOfDomain() public { @@ -208,88 +230,145 @@ contract FixedPointMathLibTest is SoladyTest { function testLambertW0WadMonotonicallyIncreasing2() public { // These are some problematic values gathered over the attempts. // Some might not be problematic now. - testLambertW0WadMonotonicallyIncreasingAround(0x598cdf77327d789dc); - testLambertW0WadMonotonicallyIncreasingAround(0x3c8d97dfe4afb1b05); - testLambertW0WadMonotonicallyIncreasingAround(0x56a147b480c03cc22); - testLambertW0WadMonotonicallyIncreasingAround(0x3136f439c231d0bb9); - testLambertW0WadMonotonicallyIncreasingAround(0x2ae7cff17ef2469a1); - testLambertW0WadMonotonicallyIncreasingAround(0x1de668fd7afcf61cc); - testLambertW0WadMonotonicallyIncreasingAround(0x15024b2a35f2cdd95); - testLambertW0WadMonotonicallyIncreasingAround(0x11a65ae94b59590f9); - testLambertW0WadMonotonicallyIncreasingAround(0xf0c2c82174dffb7e); - testLambertW0WadMonotonicallyIncreasingAround(0xed3e56938cb11626); - testLambertW0WadMonotonicallyIncreasingAround(0xecf5c4e511142439); - testLambertW0WadMonotonicallyIncreasingAround(0xc0755fa2b4033cb0); - testLambertW0WadMonotonicallyIncreasingAround(0xa235db282ea4edc6); - testLambertW0WadMonotonicallyIncreasingAround(0x9ff2ec5c26eec112); - testLambertW0WadMonotonicallyIncreasingAround(0xa0c3c4e36f4415f1); - testLambertW0WadMonotonicallyIncreasingAround(0x9b9f0e8d61287782); - testLambertW0WadMonotonicallyIncreasingAround(0x7df719d1a4a7b8ad); - testLambertW0WadMonotonicallyIncreasingAround(0x7c881679a1464d25); - testLambertW0WadMonotonicallyIncreasingAround(0x7bec47487071495a); - testLambertW0WadMonotonicallyIncreasingAround(0x7be31c75fc717f9f); - testLambertW0WadMonotonicallyIncreasingAround(0x7bbb4e0716eeca53); - testLambertW0WadMonotonicallyIncreasingAround(0x78e59d40a92b443b); - testLambertW0WadMonotonicallyIncreasingAround(0x77658c4ad3af717d); - testLambertW0WadMonotonicallyIncreasingAround(0x75ae9afa425919fe); - testLambertW0WadMonotonicallyIncreasingAround(0x7526092d05bef41f); - testLambertW0WadMonotonicallyIncreasingAround(0x52896fe82be03dfe); - testLambertW0WadMonotonicallyIncreasingAround(0x4f05b0ddf3b71a19); - testLambertW0WadMonotonicallyIncreasingAround(0x3094b0feb93943fd); - testLambertW0WadMonotonicallyIncreasingAround(0x2ef215ae6701c40e); - testLambertW0WadMonotonicallyIncreasingAround(0x2ebd1c82095d6a92); - testLambertW0WadMonotonicallyIncreasingAround(0x2e520a4e670d52bb); - testLambertW0WadMonotonicallyIncreasingAround(0xfc2f004412e5ce69); - testLambertW0WadMonotonicallyIncreasingAround(0x158bc0b201103a7fc); - testLambertW0WadMonotonicallyIncreasingAround(0x39280df60945c436b); - testLambertW0WadMonotonicallyIncreasingAround(0x47256e5d374b35f74); - testLambertW0WadMonotonicallyIncreasingAround(0x2b9568ffb08c155a4); - testLambertW0WadMonotonicallyIncreasingAround(0x1b60b07806956f34d); - testLambertW0WadMonotonicallyIncreasingAround(0x21902755d1eee824c); - testLambertW0WadMonotonicallyIncreasingAround(0x6e15c8a6ee6e4fca4); - testLambertW0WadMonotonicallyIncreasingAround(0x5b13067d92d8e49c6); - testLambertW0WadMonotonicallyIncreasingAround(0x2826ebc1fce90cf6e); - testLambertW0WadMonotonicallyIncreasingAround(0x215eb5aa1041510a4); - testLambertW0WadMonotonicallyIncreasingAround(0x47b20347b57504c32); - testLambertW0WadMonotonicallyIncreasingAround(0x75e8fd53f8c90f95a); - testLambertW0WadMonotonicallyIncreasingAround(0x43e8d80f9af282627); - testLambertW0WadMonotonicallyIncreasingAround(0x3cf555b5fd4f20615); - testLambertW0WadMonotonicallyIncreasingAround(0xaff4b8b52f8355e6e); - testLambertW0WadMonotonicallyIncreasingAround(0x529e89e77ae046255); - testLambertW0WadMonotonicallyIncreasingAround(0x1f0289433f07cbf53b); - testLambertW0WadMonotonicallyIncreasingAround(0xc1f6e56c2001d9432); - testLambertW0WadMonotonicallyIncreasingAround(0x5e4117305c6e33ebc); - testLambertW0WadMonotonicallyIncreasingAround(0x2b416472dce2ea26d); - testLambertW0WadMonotonicallyIncreasingAround(0x71f55956ef3326067); - testLambertW0WadMonotonicallyIncreasingAround(0x35d9d57c965eb82c6); - testLambertW0WadMonotonicallyIncreasingAround(0x184f520f19335f25d); - testLambertW0WadMonotonicallyIncreasingAround(0x3c4bb8f445abe21a7); - testLambertW0WadMonotonicallyIncreasingAround(0x573e3b3e06e208201); - testLambertW0WadMonotonicallyIncreasingAround(0x184f520f19335f25d); - testLambertW0WadMonotonicallyIncreasingAround(0x573e3b3e06e208201); - testLambertW0WadMonotonicallyIncreasingAround(0x61e511ba00db632a4); - testLambertW0WadMonotonicallyIncreasingAround(0x12731b97bde57933d); - testLambertW0WadMonotonicallyIncreasingAround(0x79c29b05cf39be374); - testLambertW0WadMonotonicallyIncreasingAround(0x390fcd4186ac250b3); - testLambertW0WadMonotonicallyIncreasingAround(0x69c74b5975fd4832a); - testLambertW0WadMonotonicallyIncreasingAround(0x59db219a7048121bd); - testLambertW0WadMonotonicallyIncreasingAround(0x28f2adc4fab331d251); - testLambertW0WadMonotonicallyIncreasingAround(0x7be91527cc31769c); - testLambertW0WadMonotonicallyIncreasingAround(0x7bea796d633b386a); - testLambertW0WadMonotonicallyIncreasingAround(0x2ef215ae6701c40f); - testLambertW0WadMonotonicallyIncreasingAround(0x1240541334cfadd81); - testLambertW0WadMonotonicallyIncreasingAround(0x2a79eccb3d5f4faaed); - testLambertW0WadMonotonicallyIncreasingAround(0x7470d50c23bfd30e0); - testLambertW0WadMonotonicallyIncreasingAround(0x313386f14a7f95af9); - testLambertW0WadMonotonicallyIncreasingAround(0x2a60f3b64c57088e9); - testLambertW0WadMonotonicallyIncreasingAround(0x381298f7aa53edfe0); - testLambertW0WadMonotonicallyIncreasingAround(0x5cbfac5d7a1770806); - testLambertW0WadMonotonicallyIncreasingAround(0x19e46d1b5e6aba57e); - testLambertW0WadMonotonicallyIncreasingAround(0x19ff86906ae47c70a); + _testLambertW0WadMonoAround(0x598cdf77327d789dc); + _testLambertW0WadMonoAround(0x3c8d97dfe4afb1b05); + _testLambertW0WadMonoAround(0x56a147b480c03cc22); + _testLambertW0WadMonoAround(0x3136f439c231d0bb9); + _testLambertW0WadMonoAround(0x2ae7cff17ef2469a1); + _testLambertW0WadMonoAround(0x1de668fd7afcf61cc); + _testLambertW0WadMonoAround(0x15024b2a35f2cdd95); + _testLambertW0WadMonoAround(0x11a65ae94b59590f9); + _testLambertW0WadMonoAround(0xf0c2c82174dffb7e); + _testLambertW0WadMonoAround(0xed3e56938cb11626); + _testLambertW0WadMonoAround(0xecf5c4e511142439); + _testLambertW0WadMonoAround(0xc0755fa2b4033cb0); + _testLambertW0WadMonoAround(0xa235db282ea4edc6); + _testLambertW0WadMonoAround(0x9ff2ec5c26eec112); + _testLambertW0WadMonoAround(0xa0c3c4e36f4415f1); + _testLambertW0WadMonoAround(0x9b9f0e8d61287782); + _testLambertW0WadMonoAround(0x7df719d1a4a7b8ad); + _testLambertW0WadMonoAround(0x7c881679a1464d25); + _testLambertW0WadMonoAround(0x7bec47487071495a); + _testLambertW0WadMonoAround(0x7be31c75fc717f9f); + _testLambertW0WadMonoAround(0x7bbb4e0716eeca53); + _testLambertW0WadMonoAround(0x78e59d40a92b443b); + _testLambertW0WadMonoAround(0x77658c4ad3af717d); + _testLambertW0WadMonoAround(0x75ae9afa425919fe); + _testLambertW0WadMonoAround(0x7526092d05bef41f); + _testLambertW0WadMonoAround(0x52896fe82be03dfe); + _testLambertW0WadMonoAround(0x4f05b0ddf3b71a19); + _testLambertW0WadMonoAround(0x3094b0feb93943fd); + _testLambertW0WadMonoAround(0x2ef215ae6701c40e); + _testLambertW0WadMonoAround(0x2ebd1c82095d6a92); + _testLambertW0WadMonoAround(0x2e520a4e670d52bb); + _testLambertW0WadMonoAround(0xfc2f004412e5ce69); + _testLambertW0WadMonoAround(0x158bc0b201103a7fc); + _testLambertW0WadMonoAround(0x39280df60945c436b); + _testLambertW0WadMonoAround(0x47256e5d374b35f74); + _testLambertW0WadMonoAround(0x2b9568ffb08c155a4); + _testLambertW0WadMonoAround(0x1b60b07806956f34d); + _testLambertW0WadMonoAround(0x21902755d1eee824c); + _testLambertW0WadMonoAround(0x6e15c8a6ee6e4fca4); + _testLambertW0WadMonoAround(0x5b13067d92d8e49c6); + _testLambertW0WadMonoAround(0x2826ebc1fce90cf6e); + _testLambertW0WadMonoAround(0x215eb5aa1041510a4); + _testLambertW0WadMonoAround(0x47b20347b57504c32); + _testLambertW0WadMonoAround(0x75e8fd53f8c90f95a); + _testLambertW0WadMonoAround(0x43e8d80f9af282627); + _testLambertW0WadMonoAround(0x3cf555b5fd4f20615); + _testLambertW0WadMonoAround(0xaff4b8b52f8355e6e); + _testLambertW0WadMonoAround(0x529e89e77ae046255); + _testLambertW0WadMonoAround(0x1f0289433f07cbf53b); + _testLambertW0WadMonoAround(0xc1f6e56c2001d9432); + _testLambertW0WadMonoAround(0x5e4117305c6e33ebc); + _testLambertW0WadMonoAround(0x2b416472dce2ea26d); + _testLambertW0WadMonoAround(0x71f55956ef3326067); + _testLambertW0WadMonoAround(0x35d9d57c965eb82c6); + _testLambertW0WadMonoAround(0x184f520f19335f25d); + _testLambertW0WadMonoAround(0x3c4bb8f445abe21a7); + _testLambertW0WadMonoAround(0x573e3b3e06e208201); + _testLambertW0WadMonoAround(0x184f520f19335f25d); + _testLambertW0WadMonoAround(0x573e3b3e06e208201); + _testLambertW0WadMonoAround(0x61e511ba00db632a4); + _testLambertW0WadMonoAround(0x12731b97bde57933d); + _testLambertW0WadMonoAround(0x79c29b05cf39be374); + _testLambertW0WadMonoAround(0x390fcd4186ac250b3); + _testLambertW0WadMonoAround(0x69c74b5975fd4832a); + _testLambertW0WadMonoAround(0x59db219a7048121bd); + _testLambertW0WadMonoAround(0x28f2adc4fab331d251); + _testLambertW0WadMonoAround(0x7be91527cc31769c); + _testLambertW0WadMonoAround(0x2ef215ae6701c40f); + _testLambertW0WadMonoAround(0x1240541334cfadd81); + _testLambertW0WadMonoAround(0x2a79eccb3d5f4faaed); + _testLambertW0WadMonoAround(0x7470d50c23bfd30e0); + _testLambertW0WadMonoAround(0x313386f14a7f95af9); + _testLambertW0WadMonoAround(0x2a60f3b64c57088e9); + _testLambertW0WadMonoAround(0x381298f7aa53edfe0); + _testLambertW0WadMonoAround(0x5cbfac5d7a1770806); + _testLambertW0WadMonoAround(0x19e46d1b5e6aba57e); + _testLambertW0WadMonoAround(0x19ff86906ae47c70a); + _testLambertW0WadMonoAround(0x164684654d9ca54ea1); + _testLambertW0WadMonoAround(0x99337fa75e803139); + _testLambertW0WadMonoAround(0x6fa0a50fcb8a95b97e); + _testLambertW0WadMonoAround(0xa117a195e06c3fd531); + _testLambertW0WadMonoAround(0x305da7073093bd8a07); + _testLambertW0WadMonoAround(0x98582b07fd3c6b64); + _testLambertW0WadMonoAround(0x1e824d2a367d9ce65); + _testLambertW0WadMonoAround(0x7bea796d633b386a); + _testLambertW0WadMonoAround(0x2fff5c38c6b2a2cd); + _testLambertW0WadMonoAround(0x198af4e7ffee1df7627); + _testLambertW0WadMonoAround(0x8ea8a7b6f7c7424d8d); + _testLambertW0WadMonoAround(0x11e504fa805e54e2ed8); + _testLambertW0WadMonoAround(0x3e5f2a7801badcdabd); + _testLambertW0WadMonoAround(0x1b7aaad69ac8770a3be); + _testLambertW0WadMonoAround(0x658acb00d525f3d345); + _testLambertW0WadMonoAround(0xd994d6447146880183f); + _testLambertW0WadMonoAround(0x2e07a342d7b1bc1a5ae); + } + + function testLambertW0WadMonoDebug() public { + unchecked { + for (int256 i = -9; i <= 9; ++i) { + _testLambertW0WadMonoAround(0x2e07a342d7b1bc1a5ae + i); + } + } + } + + function _testLambertW0WadMonoAround(int256 x) internal { + emit LogInt("x", x); + emit LogUint("log2(x)", FixedPointMathLib.log2(uint256(x))); + testLambertW0WadMonotonicallyIncreasingAround(x); } function testLambertW0WadMonotonicallyIncreasingAround2(uint96 t) public { - testLambertW0WadMonotonicallyIncreasingAround(int256(uint256(t))); + int256 x = int256(uint256(t)); + testLambertW0WadMonotonicallyIncreasingAround(x); + if (t & 0xff == 0xab) { + _testLambertW0WadMonoFocus(x, 0, 0x1ffffffffffff, 0xffffffffffffffffff); + _testLambertW0WadMonoFocus(x, 1, 0x1fffffffffffff, 0xffffffffffffffffff); + _testLambertW0WadMonoFocus(x, 2, 0xfffffffffffffff, 0xffffffffffffffffff); + _testLambertW0WadMonoFocus(x, 3, 0xffffffffffffffff, 0xfffffffffffffffff); + _testLambertW0WadMonoFocus(x, 4, 0xffffffffffffffff, 0xfffffffffffffffff); + _testLambertW0WadMonoFocus(x, 5, 0xffffffffffffffff, 0xffffffffffffffffff); + _testLambertW0WadMonoFocus(x, 6, 0xffffffffffffffff, 0xffffffffffffffffff); + _testLambertW0WadMonoFocus(x, 7, 0xffffffffffffffff, 0xfffffffffffffffffff); + _testLambertW0WadMonoFocus(x, 8, 0xffffffffffffffff, 0xfffffffffffffffffff); + _testLambertW0WadMonoFocus(x, 9, 0xffffffffffffffff, 0xffffffffffffffffffff); + } + } + + function _testLambertW0WadMonoFocus(int256 t, int256 i, int256 low, int256 mask) internal { + int256 x; + /// @solidity memory-safe-assembly + assembly { + mstore(0x00, t) + mstore(0x20, i) + x := and(keccak256(0x00, 0x40), mask) + } + do { + testLambertW0WadMonotonicallyIncreasingAround(x); + x >>= 1; + } while (x >= low); } function testLambertW0WadMonotonicallyIncreasingAround(int256 t) public {