diff --git a/.gas-snapshot b/.gas-snapshot index 36acc768..be4d1fd7 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -60,8 +60,8 @@ BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess() (gas: 616202) BatchDistributorTest:testDistributeTokenOneAddressSuccess() (gas: 578527) BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance() (gas: 574268) BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance() (gas: 575054) -BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1859281, ~: 1874845) -BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1349043, ~: 1344886) +BatchDistributorTest:testFuzzDistributeEtherMultipleAddressesSuccess(((address,uint256)[]),uint256) (runs: 256, μ: 1836246, ~: 1861320) +BatchDistributorTest:testFuzzDistributeTokenMultipleAddressesSuccess(((address,uint256)[]),address,uint256) (runs: 256, μ: 1334065, ~: 1317255) Create2AddressTest:testComputeAddress() (gas: 550599) Create2AddressTest:testComputeAddressSelf() (gas: 558922) Create2AddressTest:testFuzzComputeAddress(bytes32,address) (runs: 256, μ: 551194, ~: 551194) @@ -87,26 +87,26 @@ CreateAddressTest:testComputeAddressSelfNonceUint56() (gas: 539228) CreateAddressTest:testComputeAddressSelfNonceUint64() (gas: 539345) CreateAddressTest:testComputeAddressSelfNonceUint8() (gas: 538951) CreateAddressTest:testComputeAddressSelfRevertTooHighNonce() (gas: 8836) -CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 538435, ~: 538549) -CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537878, ~: 538014) -CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 538017, ~: 538140) -CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 538032, ~: 538147) -CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 538140, ~: 538239) -CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 538124, ~: 538223) -CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 538170, ~: 538252) -CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 538151, ~: 538356) -CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537935, ~: 538014) -CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 13398, ~: 13340) -CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 544262, ~: 544388) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543521, ~: 543424) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 543781, ~: 543878) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 543878, ~: 543974) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 543874, ~: 543958) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 543918, ~: 544032) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 544011, ~: 544102) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 544053, ~: 544232) -CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543587, ~: 543669) -CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 13216, ~: 13179) +CreateAddressTest:testFuzzComputeAddressNonce0x7f(uint64,address) (runs: 256, μ: 537943, ~: 538066) +CreateAddressTest:testFuzzComputeAddressNonceUint16(uint64,address) (runs: 256, μ: 537412, ~: 537680) +CreateAddressTest:testFuzzComputeAddressNonceUint24(uint64,address) (runs: 256, μ: 537539, ~: 537657) +CreateAddressTest:testFuzzComputeAddressNonceUint32(uint64,address) (runs: 256, μ: 537558, ~: 537664) +CreateAddressTest:testFuzzComputeAddressNonceUint40(uint64,address) (runs: 256, μ: 537664, ~: 537756) +CreateAddressTest:testFuzzComputeAddressNonceUint48(uint64,address) (runs: 256, μ: 537642, ~: 537740) +CreateAddressTest:testFuzzComputeAddressNonceUint56(uint64,address) (runs: 256, μ: 537685, ~: 537769) +CreateAddressTest:testFuzzComputeAddressNonceUint64(uint64,address) (runs: 256, μ: 537687, ~: 537873) +CreateAddressTest:testFuzzComputeAddressNonceUint8(uint64,address) (runs: 256, μ: 537460, ~: 537531) +CreateAddressTest:testFuzzComputeAddressRevertTooHighNonce(uint256,address) (runs: 256, μ: 12917, ~: 12857) +CreateAddressTest:testFuzzComputeAddressSelfNonce0x7f(uint64) (runs: 256, μ: 543796, ~: 543905) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint16(uint64) (runs: 256, μ: 543047, ~: 543194) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint24(uint64) (runs: 256, μ: 543303, ~: 543395) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint32(uint64) (runs: 256, μ: 543380, ~: 543491) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint40(uint64) (runs: 256, μ: 543394, ~: 543475) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint48(uint64) (runs: 256, μ: 543436, ~: 543549) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint56(uint64) (runs: 256, μ: 543527, ~: 543619) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint64(uint64) (runs: 256, μ: 543595, ~: 543749) +CreateAddressTest:testFuzzComputeAddressSelfNonceUint8(uint64) (runs: 256, μ: 543110, ~: 543186) +CreateAddressTest:testFuzzComputeAddressSelfRevertTooHighNonce(uint256) (runs: 256, μ: 12717, ~: 12696) ECDSATest:testEthSignedMessageHash() (gas: 5846) ECDSATest:testFuzzEthSignedMessageHash(string) (runs: 256, μ: 6432, ~: 6426) ECDSATest:testFuzzRecoverWithInvalidSignature(bytes,string) (runs: 256, μ: 15159, ~: 15161) @@ -170,19 +170,19 @@ ERC1155Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48433, ~: ERC1155Test:testFuzzSafeBatchTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 225230, ~: 225191) ERC1155Test:testFuzzSafeBatchTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 190337, ~: 190304) ERC1155Test:testFuzzSafeBatchTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 564164, ~: 564164) -ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 564771, ~: 564771) +ERC1155Test:testFuzzSafeBatchTransferFromWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 564767, ~: 564321) ERC1155Test:testFuzzSafeMintBatchEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 152234, ~: 152222) -ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 519941, ~: 519951) +ERC1155Test:testFuzzSafeMintBatchNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 519951, ~: 519951) ERC1155Test:testFuzzSafeMintBatchNonMinter(address) (runs: 256, μ: 40926, ~: 40926) -ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 520279, ~: 520066) +ERC1155Test:testFuzzSafeMintBatchWithData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 520304, ~: 520066) ERC1155Test:testFuzzSafeMintEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 151284, ~: 151259) -ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 520108, ~: 520118) +ERC1155Test:testFuzzSafeMintNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 520118, ~: 520118) ERC1155Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 33132, ~: 33132) ERC1155Test:testFuzzSafeMintWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 521416, ~: 521009) ERC1155Test:testFuzzSafeTransferFromByApprovedOperator(address,address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 204239, ~: 204191) ERC1155Test:testFuzzSafeTransferFromEOAReceiver(address,address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 169433, ~: 169391) ERC1155Test:testFuzzSafeTransferFromNoData(address,uint256,uint256,uint256,uint256) (runs: 256, μ: 606383, ~: 606383) -ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 608375, ~: 607645) +ERC1155Test:testFuzzSafeTransferFromWithData(address,uint256,uint256,uint256,uint256,bytes) (runs: 256, μ: 608355, ~: 607645) ERC1155Test:testFuzzSetApprovalForAllRevoke(address,address) (runs: 256, μ: 31052, ~: 31022) ERC1155Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 44181, ~: 44181) ERC1155Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15772, ~: 15699) @@ -266,8 +266,8 @@ ERC1155Test:testUriBaseAndTokenUriNotSet() (gas: 2768301) ERC1155Test:testUriBaseAndTokenUriSet() (gas: 65517) ERC1155Test:testUriNoBaseURI() (gas: 2818373) ERC1155Test:testUriNoTokenUri() (gas: 17407) -ERC20Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3392) -ERC20Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3392) +ERC20Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3391) +ERC20Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3391) ERC20Test:testApproveExceedingBalanceCase1() (gas: 40223) ERC20Test:testApproveExceedingBalanceCase2() (gas: 46478) ERC20Test:testApproveFromZeroAddress() (gas: 13220) @@ -290,26 +290,26 @@ ERC20Test:testCachedDomainSeparator() (gas: 7699) ERC20Test:testDomainSeparator() (gas: 11449) ERC20Test:testEIP712Domain() (gas: 13739) ERC20Test:testFuzzApproveSuccess(address,uint256) (runs: 256, μ: 39193, ~: 40437) -ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 175535, ~: 175651) -ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 280545, ~: 281346) +ERC20Test:testFuzzBurnFromInsufficientAllowance(address,uint256,uint8) (runs: 256, μ: 175168, ~: 175283) +ERC20Test:testFuzzBurnFromSuccess(address,uint256) (runs: 256, μ: 280158, ~: 281323) ERC20Test:testFuzzBurnInvalidAmount(address,uint256) (runs: 256, μ: 16454, ~: 16454) -ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 256368, ~: 256160) +ERC20Test:testFuzzBurnSuccessCase(uint256) (runs: 256, μ: 256009, ~: 255800) ERC20Test:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11664, ~: 11685) -ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19448, ~: 19409) +ERC20Test:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19442, ~: 19409) ERC20Test:testFuzzMintNonMinter(string,uint256) (runs: 256, μ: 13152, ~: 13080) -ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 54354, ~: 55666) +ERC20Test:testFuzzMintSuccess(string,uint256) (runs: 256, μ: 53951, ~: 55192) ERC20Test:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45279, ~: 45277) ERC20Test:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70299, ~: 70295) ERC20Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13979, ~: 13979) -ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48360, ~: 48345) +ERC20Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48361, ~: 48345) ERC20Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15777, ~: 15704) ERC20Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33196, ~: 33196) -ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 173777, ~: 174131) -ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 200575, ~: 202670) +ERC20Test:testFuzzTransferFromInsufficientAllowance(address,address,uint256,uint8) (runs: 256, μ: 173368, ~: 173761) +ERC20Test:testFuzzTransferFromSuccess(address,address,uint256) (runs: 256, μ: 200214, ~: 202446) ERC20Test:testFuzzTransferInvalidAmount(address,address,uint256) (runs: 256, μ: 16849, ~: 16849) ERC20Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14068, ~: 14068) ERC20Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 73901, ~: 73874) -ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 172876, ~: 173865) +ERC20Test:testFuzzTransferSuccess(address,uint256) (runs: 256, μ: 172886, ~: 173876) ERC20Test:testHasOwner() (gas: 9758) ERC20Test:testInitialSetup() (gas: 1467701) ERC20Test:testMintNonMinter() (gas: 12639) @@ -349,18 +349,18 @@ ERC2981Test:testDeleteDefaultRoyaltyNonOwner() (gas: 10537) ERC2981Test:testFuzzDeleteDefaultRoyaltyNonOwner(address) (runs: 256, μ: 13271, ~: 13271) ERC2981Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13972, ~: 13972) ERC2981Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 24598, ~: 24598) -ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 94029, ~: 95493) +ERC2981Test:testFuzzResetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 93495, ~: 94727) ERC2981Test:testFuzzResetTokenRoyaltyNonOwner(address) (runs: 256, μ: 13246, ~: 13246) -ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 79194, ~: 80155) -ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 62358, ~: 63357) -ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 120043, ~: 122002) -ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 164083, ~: 166503) -ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 84938, ~: 85650) +ERC2981Test:testFuzzRoyaltyInfoDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 77889, ~: 79183) +ERC2981Test:testFuzzRoyaltyInfoDeleteDefaultRoyalty(address,uint256,uint256,uint96,uint256) (runs: 256, μ: 61591, ~: 62578) +ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 119541, ~: 121030) +ERC2981Test:testFuzzRoyaltyInfoSetTokenRoyaltyUpdate(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 163342, ~: 165531) +ERC2981Test:testFuzzRoyaltyInfoUpdateDefaultRoyalty(address,address,uint256,uint256,uint96,uint256) (runs: 256, μ: 83800, ~: 84678) ERC2981Test:testFuzzSetDefaultRoyaltyNonOwner(address) (runs: 256, μ: 15525, ~: 15525) -ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21817, ~: 21611) +ERC2981Test:testFuzzSetDefaultRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21328, ~: 21125) ERC2981Test:testFuzzSetTokenRoyaltyInvalidReceiver(address) (runs: 256, μ: 18626, ~: 18626) ERC2981Test:testFuzzSetTokenRoyaltyNonOwner(address) (runs: 256, μ: 15565, ~: 15565) -ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21858, ~: 21652) +ERC2981Test:testFuzzSetTokenRoyaltyTooHighFeeNumerator(uint96) (runs: 256, μ: 21369, ~: 21166) ERC2981Test:testFuzzTransferOwnershipNonOwner(address,address) (runs: 256, μ: 14039, ~: 14039) ERC2981Test:testFuzzTransferOwnershipSuccess(address,address) (runs: 256, μ: 29577, ~: 29577) ERC2981Test:testHasOwner() (gas: 9688) @@ -388,8 +388,8 @@ ERC2981Test:testSupportsInterfaceSuccessGasCost() (gas: 6345) ERC2981Test:testTransferOwnershipNonOwner() (gas: 12649) ERC2981Test:testTransferOwnershipSuccess() (gas: 22091) ERC2981Test:testTransferOwnershipToZeroAddress() (gas: 15557) -ERC4626VaultInvariants:invariantTotalAssets() (runs: 256, calls: 3840, reverts: 3243) -ERC4626VaultInvariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3243) +ERC4626VaultInvariants:invariantTotalAssets() (runs: 256, calls: 3840, reverts: 3244) +ERC4626VaultInvariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3244) ERC4626VaultTest:testCachedDomainSeparator() (gas: 7676) ERC4626VaultTest:testDepositInsufficientAllowance() (gas: 82425) ERC4626VaultTest:testDepositWithNoApproval() (gas: 24740) @@ -400,10 +400,10 @@ ERC4626VaultTest:testEmptyVaultDeposit() (gas: 556789) ERC4626VaultTest:testEmptyVaultMint() (gas: 557600) ERC4626VaultTest:testEmptyVaultRedeem() (gas: 191988) ERC4626VaultTest:testEmptyVaultwithdraw() (gas: 204833) -ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 554731, ~: 557599) -ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 556593, ~: 560574) +ERC4626VaultTest:testFail_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 554295, ~: 558247) +ERC4626VaultTest:testFail_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 556085, ~: 560088) ERC4626VaultTest:testFuzzDomainSeparator(uint8) (runs: 256, μ: 11557, ~: 11577) -ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19367, ~: 19328) +ERC4626VaultTest:testFuzzEIP712Domain(bytes1,uint8,bytes32,uint256[]) (runs: 256, μ: 19365, ~: 19328) ERC4626VaultTest:testFuzzPermitInvalid(string,string,uint16) (runs: 256, μ: 45211, ~: 45209) ERC4626VaultTest:testFuzzPermitSuccess(string,string,uint16) (runs: 256, μ: 70194, ~: 70190) ERC4626VaultTest:testInitialSetup() (gas: 5784605) @@ -424,30 +424,30 @@ ERC4626VaultTest:testVaultInteractionsForSomeoneElse() (gas: 221714) ERC4626VaultTest:testWithdrawInsufficientAllowance() (gas: 122543) ERC4626VaultTest:testWithdrawInsufficientAssets() (gas: 117830) ERC4626VaultTest:testWithdrawWithNoAssets() (gas: 21327) -ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473848, ~: 476603) -ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475843, ~: 478064) -ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474986, ~: 476997) -ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476757, ~: 478609) -ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474053, ~: 477061) -ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474324, ~: 477065) -ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475513, ~: 478332) -ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476750, ~: 478800) -ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422927, ~: 427714) -ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429131, ~: 432526) -ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429008, ~: 432518) -ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 468962, ~: 472735) -ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422940, ~: 427727) -ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 422965, ~: 427752) -ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423079, ~: 427866) -ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424626, ~: 429498) -ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 470063, ~: 473233) -ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 466693, ~: 469071) -ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467706, ~: 469651) -ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468487, ~: 471013) -ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 471021, ~: 472418) -ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472308, ~: 475265) -ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423529, ~: 428316) -ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 473901, ~: 476796) +ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473595, ~: 475834) +ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 475476, ~: 477871) +ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474796, ~: 476529) +ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476628, ~: 478043) +ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 473719, ~: 476753) +ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474004, ~: 476619) +ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 474953, ~: 478007) +ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 476488, ~: 478299) +ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423295, ~: 427730) +ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 429499, ~: 432675) +ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 428555, ~: 432452) +ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 468430, ~: 472462) +ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423308, ~: 427742) +ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423333, ~: 427767) +ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423447, ~: 427882) +ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 424999, ~: 429540) +ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 469649, ~: 472872) +ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 465851, ~: 468303) +ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 467178, ~: 468993) +ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 468075, ~: 470568) +ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256) (runs: 256, μ: 470320, ~: 472083) +ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 472106, ~: 474863) +ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256)) (runs: 256, μ: 423897, ~: 428331) +ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256) (runs: 256, μ: 473286, ~: 476306) ERC721Invariants:invariantOwner() (runs: 256, calls: 3840, reverts: 3469) ERC721Invariants:invariantTotalSupply() (runs: 256, calls: 3840, reverts: 3469) ERC721Test:testApproveClearingApprovalWithNoPriorApproval() (gas: 177294) @@ -485,7 +485,7 @@ ERC721Test:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13938, ~: ERC721Test:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 48380, ~: 48364) ERC721Test:testFuzzSafeMintNonMinter(address) (runs: 256, μ: 15894, ~: 15894) ERC721Test:testFuzzSafeMintSuccess(address[]) (runs: 256, μ: 21329561, ~: 20702624) -ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1429053, ~: 1429893) +ERC721Test:testFuzzSafeTransferFromWithData(address,address,address,bytes) (runs: 256, μ: 1429057, ~: 1429893) ERC721Test:testFuzzSetApprovalForAllSuccess(address,address) (runs: 256, μ: 188481, ~: 188481) ERC721Test:testFuzzSetMinterNonOwner(address,string) (runs: 256, μ: 15822, ~: 15749) ERC721Test:testFuzzSetMinterSuccess(string) (runs: 256, μ: 33217, ~: 33216) @@ -553,44 +553,44 @@ ERC721Test:testTransferFrom() (gas: 569632) ERC721Test:testTransferOwnershipNonOwner() (gas: 12612) ERC721Test:testTransferOwnershipSuccess() (gas: 52972) ERC721Test:testTransferOwnershipToZeroAddress() (gas: 15608) -MathTest:testCbrtRoundDown() (gas: 41439) -MathTest:testCbrtRoundUp() (gas: 42219) -MathTest:testCeilDiv() (gas: 12525) -MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 19460, ~: 19236) -MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 8984, ~: 9001) -MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 5572, ~: 5572) -MathTest:testFuzzIsNegative(int256) (runs: 256, μ: 5646, ~: 5646) -MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 6972, ~: 6961) -MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 6846, ~: 6823) -MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 6871, ~: 6844) -MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 12924, ~: 12671) -MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10509, ~: 10592) +MathTest:testCbrtRoundDown() (gas: 41550) +MathTest:testCbrtRoundUp() (gas: 42197) +MathTest:testCeilDiv() (gas: 12481) +MathTest:testFuzzCbrt(uint256,bool) (runs: 256, μ: 19435, ~: 19190) +MathTest:testFuzzCeilDiv(uint256,uint256) (runs: 256, μ: 8962, ~: 8979) +MathTest:testFuzzInt256Average(int256,int256) (runs: 256, μ: 5683, ~: 5683) +MathTest:testFuzzLog10(uint256,bool) (runs: 256, μ: 6967, ~: 6961) +MathTest:testFuzzLog2(uint256,bool) (runs: 256, μ: 6845, ~: 6821) +MathTest:testFuzzLog256(uint256,bool) (runs: 256, μ: 6848, ~: 6818) +MathTest:testFuzzMulDiv(uint256,uint256,uint256) (runs: 256, μ: 13038, ~: 12781) +MathTest:testFuzzMulDivDomain(uint256,uint256,uint256) (runs: 256, μ: 10487, ~: 10570) +MathTest:testFuzzSign(int256) (runs: 256, μ: 5527, ~: 5516) MathTest:testFuzzUint256Average(uint256,uint256) (runs: 256, μ: 5785, ~: 5785) -MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 18995, ~: 18663) -MathTest:testFuzzWadExp(int256) (runs: 256, μ: 15196, ~: 15267) -MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16715, ~: 16506) -MathTest:testInt256Average() (gas: 11898) -MathTest:testIsNegative() (gas: 10280) -MathTest:testLog10RoundDown() (gas: 17707) -MathTest:testLog10RoundUp() (gas: 18778) -MathTest:testLog256RoundDown() (gas: 14452) -MathTest:testLog256RoundUp() (gas: 14716) -MathTest:testLog2RoundDown() (gas: 17373) +MathTest:testFuzzWadCbrt(uint256) (runs: 256, μ: 18977, ~: 18663) +MathTest:testFuzzWadExp(int256) (runs: 256, μ: 14493, ~: 14597) +MathTest:testFuzzWadLn(int256) (runs: 256, μ: 16002, ~: 15725) +MathTest:testInt256Average() (gas: 12010) +MathTest:testLog10RoundDown() (gas: 17685) +MathTest:testLog10RoundUp() (gas: 18866) +MathTest:testLog256RoundDown() (gas: 14561) +MathTest:testLog256RoundUp() (gas: 14694) +MathTest:testLog2RoundDown() (gas: 17351) MathTest:testLog2RoundUp() (gas: 17536) -MathTest:testMulDivDivisionByZero() (gas: 11248) -MathTest:testMulDivOverflow() (gas: 11622) +MathTest:testMulDivDivisionByZero() (gas: 11226) +MathTest:testMulDivOverflow() (gas: 11600) MathTest:testMulDivRoundDownLargeValues() (gas: 12763) MathTest:testMulDivRoundDownSmallValues() (gas: 7724) MathTest:testMulDivRoundUpLargeValues() (gas: 13096) -MathTest:testMulDivRoundUpSmallValues() (gas: 7991) -MathTest:testUint256Average() (gas: 8320) -MathTest:testWadCbrt() (gas: 39386) -MathTest:testWadExp() (gas: 23617) -MathTest:testWadExpOverflow() (gas: 11149) +MathTest:testMulDivRoundUpSmallValues() (gas: 7947) +MathTest:testSign() (gas: 11385) +MathTest:testUint256Average() (gas: 8298) +MathTest:testWadCbrt() (gas: 39342) +MathTest:testWadExp() (gas: 23595) +MathTest:testWadExpOverflow() (gas: 11127) MathTest:testWadLn() (gas: 24196) MathTest:testWadLnNegativeValues() (gas: 11130) -MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 1649976156, ~: 1649972704) -MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 135974868, ~: 135971492) +MerkleProofVerificationTest:testFuzzMultiProofVerifySingleLeaf(bytes32[],uint256) (runs: 256, μ: 1649976160, ~: 1649972684) +MerkleProofVerificationTest:testFuzzVerify(bytes32[],uint256) (runs: 256, μ: 135974872, ~: 135971472) MerkleProofVerificationTest:testFuzzVerifyMultiProofMultipleLeaves(bool,bool,bool) (runs: 256, μ: 412472467, ~: 412472462) MerkleProofVerificationTest:testInvalidMerkleMultiProof() (gas: 412478415) MerkleProofVerificationTest:testInvalidMerkleProof() (gas: 33970390) @@ -615,7 +615,7 @@ Ownable2StepInvariants:invariantPendingOwner() (runs: 256, calls: 3840, reverts: Ownable2StepTest:testAcceptOwnershipNonPendingOwner() (gas: 46604) Ownable2StepTest:testAcceptOwnershipSuccess() (gas: 39404) Ownable2StepTest:testFuzzAcceptOwnershipNonPendingOwner(address) (runs: 256, μ: 45814, ~: 45814) -Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 65110, ~: 65084) +Ownable2StepTest:testFuzzAcceptOwnershipSuccess(address,address) (runs: 256, μ: 65113, ~: 65084) Ownable2StepTest:testFuzzPendingOwnerResetAfterRenounceOwnership(address) (runs: 256, μ: 38751, ~: 38735) Ownable2StepTest:testFuzzRenounceOwnershipNonOwner(address) (runs: 256, μ: 13954, ~: 13954) Ownable2StepTest:testFuzzRenounceOwnershipSuccess(address) (runs: 256, μ: 43684, ~: 43668) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcada626..908abe7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## [`0.0.5`](https://github.com/pcaversaccio/snekmate/releases/tag/v0.0.5) (Unreleased) +### ♻️ Refactoring + +- **Utility Functions** + - [`Math`](https://github.com/pcaversaccio/snekmate/blob/v0.0.5/src/utils/Math.vy): Refactor the `is_negative` function into a proper `sign` function that returns the indication of the sign of a 32-byte signed integer. ([#187](https://github.com/pcaversaccio/snekmate/pull/187)) + ### 👀 Full Changelog - [`v0.0.4...v0.0.5`](https://github.com/pcaversaccio/snekmate/compare/v0.0.4...v0.0.5) diff --git a/src/utils/Math.vy b/src/utils/Math.vy index 9dbb8083..c0e28918 100644 --- a/src/utils/Math.vy +++ b/src/utils/Math.vy @@ -13,7 +13,7 @@ - `uint256_average` (`external` `pure` function), - `int256_average` (`external` `pure` function), - `ceil_div` (`external` `pure` function), - - `is_negative` (`external` `pure` function), + - `sign` (`external` `pure` function), - `mul_div` (`external` `pure` function), - `log_2` (`external` `pure` function), - `log_10` (`external` `pure` function), @@ -92,14 +92,17 @@ def ceil_div(x: uint256, y: uint256) -> uint256: @external @pure -def is_negative(x: int256) -> bool: +def sign(x: int256) -> int256: """ - @dev Returns `True` if a 32-byte signed integer is negative. - @notice Note that this function returns `False` for 0. + @dev Returns the indication of the sign of a 32-byte signed integer. + @notice The function returns `-1` if `x < 0`, `0` if `x==0`, and + `1` if `x > 0`. For more details on finding the sign of a signed + integer, please refer to: + https://graphics.stanford.edu/~seander/bithacks.html#CopyIntegerSign. @param x The 32-byte signed integer variable. - @return bool The verification whether `x` is negative or not. + @return int256 The 32-byte sign indication (`1`, `0`, or `-1`) of `x`. """ - return (x ^ 1 < empty(int256)) + return unsafe_sub(convert((x > 0), int256), convert((x < 0), int256)) @external diff --git a/test/utils/Math.t.sol b/test/utils/Math.t.sol index 0e9b1499..3ee5f145 100644 --- a/test/utils/Math.t.sol +++ b/test/utils/Math.t.sol @@ -154,14 +154,16 @@ contract MathTest is Test { math.ceil_div(1, 0); } - function testIsNegative() public { - assertEq(math.is_negative(0), false); - assertEq(math.is_negative(-1), true); - assertEq(math.is_negative(-1 * -1), false); - assertEq(math.is_negative(-1 * 100), true); - assertEq(math.is_negative(0 * -1), false); - assertEq(math.is_negative(int256(type(int16).min) * 2), true); - assertEq(math.is_negative(type(int256).min + type(int16).max), true); + function testSign() public { + assertEq(math.sign(0), 0); + assertEq(math.sign(-1), -1); + assertEq(math.sign(-1 * -1), 1); + assertEq(math.sign(-1 * 100), -1); + assertEq(math.sign(0 * -1), 0); + assertEq(math.sign(int256(type(int16).min) * 2), -1); + assertEq(math.sign(int256(type(int16).max) * 2), 1); + assertEq(math.sign(type(int256).min + type(int16).max), -1); + assertEq(math.sign(type(int256).max - type(int16).max), 1); } function testMulDivDivisionByZero() public { @@ -482,11 +484,13 @@ contract MathTest is Test { } } - function testFuzzIsNegative(int256 x) public { - if (x >= 0) { - assertEq(math.is_negative(x), false); + function testFuzzSign(int256 x) public { + if (x > 0) { + assertEq(math.sign(x), 1); + } else if (x == 0) { + assertEq(math.sign(x), 0); } else { - assertEq(math.is_negative(x), true); + assertEq(math.sign(x), -1); } } diff --git a/test/utils/interfaces/IMath.sol b/test/utils/interfaces/IMath.sol index e2fa72e2..a3adda4f 100644 --- a/test/utils/interfaces/IMath.sol +++ b/test/utils/interfaces/IMath.sol @@ -11,7 +11,7 @@ interface IMath { function ceil_div(uint256 x, uint256 y) external pure returns (uint256); - function is_negative(int256 x) external pure returns (bool); + function sign(int256 x) external pure returns (int256); function mul_div( uint256 x,