Skip to content

Commit 99eeb16

Browse files
authored
♻️ Add equivalence test for _wrapNFTId (#142)
1 parent 80b38f3 commit 99eeb16

File tree

2 files changed

+51
-14
lines changed

2 files changed

+51
-14
lines changed

.gas-snapshot

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,27 +145,28 @@ DN404Test:test__codesize() (gas: 61620)
145145
DN404ZeroIndexedTest:testBatchNFTLog() (gas: 326053)
146146
DN404ZeroIndexedTest:testBurnOnTransfer(uint32,address) (runs: 270, μ: 255124, ~: 255124)
147147
DN404ZeroIndexedTest:testFnSelectorNotRecognized() (gas: 6268)
148-
DN404ZeroIndexedTest:testInitialize(uint32,address) (runs: 272, μ: 109068, ~: 113108)
148+
DN404ZeroIndexedTest:testInitialize(uint32,address) (runs: 272, μ: 109048, ~: 113108)
149149
DN404ZeroIndexedTest:testMintAndBurn() (gas: 343030)
150-
DN404ZeroIndexedTest:testMintAndBurn2() (gas: 280268)
150+
DN404ZeroIndexedTest:testMintAndBurn2() (gas: 280290)
151151
DN404ZeroIndexedTest:testMintNext() (gas: 701766)
152-
DN404ZeroIndexedTest:testMintNextContiguous(uint256) (runs: 272, μ: 559796, ~: 516666)
153-
DN404ZeroIndexedTest:testMintOnTransfer(uint32,address) (runs: 270, μ: 269705, ~: 269705)
154-
DN404ZeroIndexedTest:testMixed(bytes32) (runs: 272, μ: 577183, ~: 498226)
155-
DN404ZeroIndexedTest:testNameAndSymbol(string,string) (runs: 272, μ: 205773, ~: 206176)
152+
DN404ZeroIndexedTest:testMintNextContiguous(uint256) (runs: 272, μ: 568584, ~: 524801)
153+
DN404ZeroIndexedTest:testMintOnTransfer(uint32,address) (runs: 270, μ: 269727, ~: 269727)
154+
DN404ZeroIndexedTest:testMixed(bytes32) (runs: 272, μ: 564213, ~: 505534)
155+
DN404ZeroIndexedTest:testNameAndSymbol(string,string) (runs: 272, μ: 205728, ~: 206131)
156156
DN404ZeroIndexedTest:testNumAliasesOverflowReverts() (gas: 40944)
157157
DN404ZeroIndexedTest:testOwnedIds() (gas: 347336)
158-
DN404ZeroIndexedTest:testOwnedIds(uint256) (runs: 272, μ: 261162, ~: 284431)
159-
DN404ZeroIndexedTest:testPermit2() (gas: 455270)
160-
DN404ZeroIndexedTest:testRegisterAndResolveAlias(address,address) (runs: 272, μ: 120044, ~: 120191)
161-
DN404ZeroIndexedTest:testSetAndGetAux(address,uint88) (runs: 272, μ: 21987, ~: 22272)
158+
DN404ZeroIndexedTest:testOwnedIds(uint256) (runs: 272, μ: 263381, ~: 286216)
159+
DN404ZeroIndexedTest:testPermit2() (gas: 455292)
160+
DN404ZeroIndexedTest:testRegisterAndResolveAlias(address,address) (runs: 272, μ: 120191, ~: 120191)
161+
DN404ZeroIndexedTest:testSetAndGetAux(address,uint88) (runs: 272, μ: 22004, ~: 22289)
162162
DN404ZeroIndexedTest:testSetAndGetOperatorApprovals(address,address,bool) (runs: 272, μ: 129643, ~: 119840)
163-
DN404ZeroIndexedTest:testSetAndGetSkipNFT() (gas: 708368)
164-
DN404ZeroIndexedTest:testTokenURI(string,uint256) (runs: 272, μ: 156264, ~: 156411)
163+
DN404ZeroIndexedTest:testSetAndGetSkipNFT() (gas: 708390)
164+
DN404ZeroIndexedTest:testTokenURI(string,uint256) (runs: 272, μ: 156286, ~: 156433)
165165
DN404ZeroIndexedTest:testTransferWithMirrorEvent() (gas: 409821)
166166
DN404ZeroIndexedTest:testTransfersAndBurns() (gas: 485767)
167-
DN404ZeroIndexedTest:testWrapAround(uint32,uint256) (runs: 272, μ: 380944, ~: 388042)
168-
DN404ZeroIndexedTest:test__codesize() (gas: 61169)
167+
DN404ZeroIndexedTest:testWrapAround(uint32,uint256) (runs: 272, μ: 380053, ~: 387951)
168+
DN404ZeroIndexedTest:testWrapNFTIdEquivalence(uint256,uint256,bool) (runs: 272, μ: 1379, ~: 1418)
169+
DN404ZeroIndexedTest:test__codesize() (gas: 61415)
169170
DN420OnlyERC20Test:testApprove() (gas: 35770)
170171
DN420OnlyERC20Test:testApprove(address,uint256) (runs: 272, μ: 30882, ~: 31321)
171172
DN420OnlyERC20Test:testBurn() (gas: 49034)

test/DN404ZeroIndexed.t.sol

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,4 +809,40 @@ contract DN404ZeroIndexedTest is SoladyTest {
809809
}
810810
}
811811
}
812+
813+
function testWrapNFTIdEquivalence(uint256 id, uint256 idLimit, bool useOneIndexed) public {
814+
id = _bound(id, 0, 0xffff);
815+
idLimit = _bound(idLimit, 0, 0xff);
816+
// if (useOneIndexed) while (id == 0) id = _random();
817+
uint256 original = _wrapNFTIdOrigina(id, idLimit, useOneIndexed);
818+
assertEq(_wrapNFTId(id, idLimit, useOneIndexed), original);
819+
}
820+
821+
function _wrapNFTIdOrigina(uint256 id, uint256 idLimit, bool useOneIndexed)
822+
internal
823+
pure
824+
returns (uint256)
825+
{
826+
if (useOneIndexed) {
827+
return id <= idLimit ? id : 1;
828+
} else {
829+
return id < idLimit ? id : 0;
830+
}
831+
}
832+
833+
function _wrapNFTId(uint256 id, uint256 idLimit, bool useOneIndexed)
834+
internal
835+
pure
836+
returns (uint256 result)
837+
{
838+
result = useOneIndexed ? 1 : 0;
839+
/// @solidity memory-safe-assembly
840+
assembly {
841+
result :=
842+
or(
843+
mul(or(mul(iszero(gt(id, idLimit)), id), gt(id, idLimit)), result),
844+
mul(mul(lt(id, idLimit), id), iszero(result))
845+
)
846+
}
847+
}
812848
}

0 commit comments

Comments
 (0)