mirror of
https://github.com/lux-amm/v4-periphery.git
synced 2026-10-30 20:54:39 +00:00
102 lines
5.9 KiB
Solidity
102 lines
5.9 KiB
Solidity
// SPDX-License-Identifier: UNLICENSED
|
|
pragma solidity ^0.8.24;
|
|
|
|
import {Test} from "forge-std/Test.sol";
|
|
import {VanityAddressLib} from "../../src/libraries/VanityAddressLib.sol";
|
|
|
|
contract VanityAddressLibTest is Test {
|
|
function test_fuzz_reasonableScoreNeverReverts(address test) public pure {
|
|
uint256 score = VanityAddressLib.score(address(test));
|
|
assertGe(score, 0);
|
|
assertLe(score, 444);
|
|
}
|
|
|
|
function test_scoreAllFours() public pure {
|
|
address addr = address(0x4444444444444444444444444444444444444444);
|
|
uint256 score = VanityAddressLib.score(addr);
|
|
uint256 expected = 100; // 40 + 40 + 20 = 100
|
|
assertEq(score, expected);
|
|
}
|
|
|
|
function test_scoreLaterFours() public pure {
|
|
address addr = address(0x1444444444444444444444444444444444444444);
|
|
uint256 score = VanityAddressLib.score(addr);
|
|
uint256 expected = 0; // no leading 4
|
|
assertEq(score, expected);
|
|
}
|
|
|
|
function test_scoreMixed_4() public pure {
|
|
address addr = address(0x0044001111111111111111111111111111114114);
|
|
// counts first null byte
|
|
// counts first leading 4s after that
|
|
// does not count future null bytes
|
|
// counts 4 nibbles after that
|
|
uint256 score = VanityAddressLib.score(addr);
|
|
uint256 expected = 24; // 10 * 2 + 2 + 2 = 24
|
|
assertEq(score, expected);
|
|
}
|
|
|
|
function test_scoreMixed_44() public pure {
|
|
address addr = address(0x0044001111111111111111111111111111114444);
|
|
// counts first null byte
|
|
// counts first leading 4s after that
|
|
// does not count future null bytes
|
|
// counts 4 nibbles after that
|
|
uint256 score = VanityAddressLib.score(addr);
|
|
uint256 expected = 46; // 10 * 2 + 6 + 20 = 46
|
|
assertEq(score, expected);
|
|
}
|
|
|
|
function test_scoreMixed_halfZeroHalf4() public pure {
|
|
address addr = address(0x0004111111111111111111111111111111111111);
|
|
// counts first null byte
|
|
// counts first leading 4s after that
|
|
uint256 score = VanityAddressLib.score(addr);
|
|
uint256 expected = 31; // 10 * 3 + 1 = 31
|
|
assertEq(score, expected);
|
|
}
|
|
|
|
function test_scores_succeed() public pure {
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000000082)), 0); // 0
|
|
assertEq(VanityAddressLib.score(address(0x0400000000000000000000000000000000000000)), 11); // 10 * 1 + 1 = 11
|
|
assertEq(VanityAddressLib.score(address(0x0044000000000000000000000000000000004444)), 46); // 10 * 2 + 6 + 20 = 46
|
|
assertEq(VanityAddressLib.score(address(0x4444000000000000000000000000000000004444)), 88); // 40 + 20 + 20 + 8 = 88
|
|
assertEq(VanityAddressLib.score(address(0x0044440000000000000000000000000000000044)), 86); // 10 * 2 + 40 + 20 + 6 = 86
|
|
assertEq(VanityAddressLib.score(address(0x0000444400000000000000000000000000004444)), 128); // 10 * 4 + 40 + 20 + 20 + 8 = 128
|
|
assertEq(VanityAddressLib.score(address(0x0040444444444444444444444444444444444444)), 77); // 10 * 2 + 37 + 20 = 77
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000000444)), 373); // 10 * 37 + 3 = 373
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000044444444)), 388); // 10 * 32 + 40 + 20 + 8 = 388
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000454444)), 365); // 10 * 34 + 20 + 5 = 365
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000000044)), 382); // 10 * 38 + 2 = 382
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000000004)), 391); // 10 * 39 + 1 = 391
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000444444)), 406); // 10 * 34 + 40 + 20 + 6 = 406
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000044444)), 415); // 10 * 35 + 40 + 20 + 5 = 415
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000444455)), 404); // 10 * 34 + 40 + 20 + 4 = 404
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000044445)), 414); // 10 * 35 + 40 + 20 + 4 = 414
|
|
assertEq(VanityAddressLib.score(address(0x0000000000000000000000000000000000004444)), 444); // 10 * 36 + 40 + 20 + 20 + 4 = 444
|
|
}
|
|
|
|
function test_betterThan() public pure {
|
|
address addr1 = address(0x0011111111111111111111111111111111111111); // 0 points
|
|
address addr2 = address(0x4000111111111111111111111111111111111111); // 1 points
|
|
address addr3 = address(0x0000411111111111111111111111111111111111); // 10 * 4 + 1 = 41 points
|
|
address addr4 = address(0x0000441111111111111111111111111111111111); // 10 * 4 + 2 = 42 points
|
|
address addr5 = address(0x0000440011111111111111111111111111111111); // 10 * 4 + 2 = 42 points
|
|
assertTrue(VanityAddressLib.betterThan(addr2, addr1)); // 1 > 0
|
|
assertTrue(VanityAddressLib.betterThan(addr3, addr2)); // 41 > 1
|
|
assertTrue(VanityAddressLib.betterThan(addr3, addr1)); // 41 > 0
|
|
assertTrue(VanityAddressLib.betterThan(addr4, addr3)); // 42 > 41
|
|
assertTrue(VanityAddressLib.betterThan(addr4, addr2)); // 42 > 1
|
|
assertTrue(VanityAddressLib.betterThan(addr4, addr1)); // 42 > 0
|
|
assertFalse(VanityAddressLib.betterThan(addr5, addr4)); // 42 == 42
|
|
assertEq(VanityAddressLib.score(addr5), VanityAddressLib.score(addr4)); // 42 == 42
|
|
assertTrue(VanityAddressLib.betterThan(addr5, addr3)); // 42 > 41
|
|
assertTrue(VanityAddressLib.betterThan(addr5, addr2)); // 42 > 1
|
|
assertTrue(VanityAddressLib.betterThan(addr5, addr1)); // 42 > 0
|
|
|
|
address addr6 = address(0x0000000000000000000000000000000000004444);
|
|
address addr7 = address(0x0000000000000000000000000000000000000082);
|
|
assertTrue(VanityAddressLib.betterThan(addr6, addr7)); // 10 * 36 + 40 + 20 + 20 + 4 = 444 > 0
|
|
}
|
|
}
|