mirror of
https://github.com/lux-amm/v4-periphery.git
synced 2026-10-30 20:54:39 +00:00
156 lines
8.8 KiB
Solidity
156 lines
8.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.24;
|
|
|
|
import {Descriptor} from "../../src/libraries/Descriptor.sol";
|
|
import {Test} from "forge-std/Test.sol";
|
|
import {TickMath} from "@luxamm/v4-core/src/libraries/TickMath.sol";
|
|
|
|
contract DescriptorTest is Test {
|
|
function test_feeToPercentString_succeeds() public pure {
|
|
assertEq(Descriptor.feeToPercentString(0x800000), "Dynamic");
|
|
assertEq(Descriptor.feeToPercentString(0), "0%");
|
|
assertEq(Descriptor.feeToPercentString(1), "0.0001%");
|
|
assertEq(Descriptor.feeToPercentString(30), "0.003%");
|
|
assertEq(Descriptor.feeToPercentString(33), "0.0033%");
|
|
assertEq(Descriptor.feeToPercentString(500), "0.05%");
|
|
assertEq(Descriptor.feeToPercentString(2500), "0.25%");
|
|
assertEq(Descriptor.feeToPercentString(3000), "0.3%");
|
|
assertEq(Descriptor.feeToPercentString(10000), "1%");
|
|
assertEq(Descriptor.feeToPercentString(17000), "1.7%");
|
|
assertEq(Descriptor.feeToPercentString(100000), "10%");
|
|
assertEq(Descriptor.feeToPercentString(150000), "15%");
|
|
assertEq(Descriptor.feeToPercentString(102000), "10.2%");
|
|
assertEq(Descriptor.feeToPercentString(1000000), "100%");
|
|
assertEq(Descriptor.feeToPercentString(1005000), "100.5%");
|
|
assertEq(Descriptor.feeToPercentString(10000000), "1000%");
|
|
assertEq(Descriptor.feeToPercentString(12300000), "1230%");
|
|
}
|
|
|
|
function test_addressToString_succeeds() public pure {
|
|
assertEq(Descriptor.addressToString(address(0)), "0x0000000000000000000000000000000000000000");
|
|
assertEq(Descriptor.addressToString(address(1)), "0x0000000000000000000000000000000000000001");
|
|
assertEq(
|
|
Descriptor.addressToString(0x1111111111111111111111111111111111111111),
|
|
"0x1111111111111111111111111111111111111111"
|
|
);
|
|
assertEq(
|
|
Descriptor.addressToString(0x1234AbcdEf1234abcDef1234aBCdEF1234ABCDEF),
|
|
"0x1234abcdef1234abcdef1234abcdef1234abcdef"
|
|
);
|
|
}
|
|
|
|
function test_escapeSpecialCharacters_succeeds() public pure {
|
|
assertEq(Descriptor.escapeSpecialCharacters(""), "");
|
|
assertEq(Descriptor.escapeSpecialCharacters("a"), "a");
|
|
assertEq(Descriptor.escapeSpecialCharacters("abc"), "abc");
|
|
assertEq(Descriptor.escapeSpecialCharacters("a\"bc"), "a\\\"bc");
|
|
assertEq(Descriptor.escapeSpecialCharacters("a\"b\"c"), "a\\\"b\\\"c");
|
|
assertEq(Descriptor.escapeSpecialCharacters("a\"b\"c\""), "a\\\"b\\\"c\\\"");
|
|
assertEq(Descriptor.escapeSpecialCharacters("\"a\"b\"c\""), "\\\"a\\\"b\\\"c\\\"");
|
|
assertEq(Descriptor.escapeSpecialCharacters("\"a\"b\"c\"\""), "\\\"a\\\"b\\\"c\\\"\\\"");
|
|
|
|
assertEq(Descriptor.escapeSpecialCharacters("a\rbc"), "a\\\rbc");
|
|
assertEq(Descriptor.escapeSpecialCharacters("a\nbc"), "a\\\nbc");
|
|
assertEq(Descriptor.escapeSpecialCharacters("a\tbc"), "a\\\tbc");
|
|
assertEq(Descriptor.escapeSpecialCharacters("a\u000cbc"), "a\\\u000cbc");
|
|
}
|
|
|
|
function test_tickToDecimalString_withTickSpacing10() public pure {
|
|
int24 tickSpacing = 10;
|
|
int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing;
|
|
int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing;
|
|
assertEq(Descriptor.tickToDecimalString(minTick, tickSpacing, 18, 18, false), "MIN");
|
|
assertEq(Descriptor.tickToDecimalString(maxTick, tickSpacing, 18, 18, false), "MAX");
|
|
assertEq(Descriptor.tickToDecimalString(1, tickSpacing, 18, 18, false), "1.0001");
|
|
int24 otherMinTick = (TickMath.MIN_TICK / 60) * 60;
|
|
assertEq(
|
|
Descriptor.tickToDecimalString(otherMinTick, tickSpacing, 18, 18, false),
|
|
"0.0000000000000000000000000000000000000029387"
|
|
);
|
|
}
|
|
|
|
function test_tickToDecimalString_withTickSpacing60() public pure {
|
|
int24 tickSpacing = 60;
|
|
int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing;
|
|
int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing;
|
|
assertEq(Descriptor.tickToDecimalString(minTick, tickSpacing, 18, 18, false), "MIN");
|
|
assertEq(Descriptor.tickToDecimalString(maxTick, tickSpacing, 18, 18, false), "MAX");
|
|
assertEq(Descriptor.tickToDecimalString(-1, tickSpacing, 18, 18, false), "0.99990");
|
|
int24 otherMinTick = (TickMath.MIN_TICK / 200) * 200;
|
|
assertEq(
|
|
Descriptor.tickToDecimalString(otherMinTick, tickSpacing, 18, 18, false),
|
|
"0.0000000000000000000000000000000000000029387"
|
|
);
|
|
}
|
|
|
|
function test_tickToDecimalString_withTickSpacing200() public pure {
|
|
int24 tickSpacing = 200;
|
|
int24 minTick = (TickMath.MIN_TICK / tickSpacing) * tickSpacing;
|
|
int24 maxTick = (TickMath.MAX_TICK / tickSpacing) * tickSpacing;
|
|
assertEq(Descriptor.tickToDecimalString(minTick, tickSpacing, 18, 18, false), "MIN");
|
|
assertEq(Descriptor.tickToDecimalString(maxTick, tickSpacing, 18, 18, false), "MAX");
|
|
assertEq(Descriptor.tickToDecimalString(0, tickSpacing, 18, 18, false), "1.0000");
|
|
int24 otherMinTick = (TickMath.MIN_TICK / 60) * 60;
|
|
assertEq(
|
|
Descriptor.tickToDecimalString(otherMinTick, tickSpacing, 18, 18, false),
|
|
"0.0000000000000000000000000000000000000029387"
|
|
);
|
|
}
|
|
|
|
function test_tickToDecimalString_ratio_returnsInverseMediumNumbers() public pure {
|
|
int24 tickSpacing = 200;
|
|
assertEq(Descriptor.tickToDecimalString(10, tickSpacing, 18, 18, false), "1.0010");
|
|
assertEq(Descriptor.tickToDecimalString(10, tickSpacing, 18, 18, true), "0.99900");
|
|
}
|
|
|
|
function test_tickToDecimalString_ratio_returnsInverseLargeNumbers() public pure {
|
|
int24 tickSpacing = 200;
|
|
assertEq(Descriptor.tickToDecimalString(487272, tickSpacing, 18, 18, false), "1448400000000000000000");
|
|
assertEq(Descriptor.tickToDecimalString(487272, tickSpacing, 18, 18, true), "0.00000000000000000000069041");
|
|
}
|
|
|
|
function test_tickToDecimalString_ratio_returnsInverseSmallNumbers() public pure {
|
|
int24 tickSpacing = 200;
|
|
assertEq(Descriptor.tickToDecimalString(-387272, tickSpacing, 18, 18, false), "0.000000000000000015200");
|
|
assertEq(Descriptor.tickToDecimalString(-387272, tickSpacing, 18, 18, true), "65791000000000000");
|
|
}
|
|
|
|
function test_tickToDecimalString_differentDecimals() public pure {
|
|
int24 tickSpacing = 200;
|
|
assertEq(Descriptor.tickToDecimalString(1000, tickSpacing, 18, 18, true), "0.90484");
|
|
assertEq(Descriptor.tickToDecimalString(1000, tickSpacing, 18, 10, true), "90484000");
|
|
assertEq(Descriptor.tickToDecimalString(1000, tickSpacing, 10, 18, true), "0.0000000090484");
|
|
}
|
|
|
|
function test_fixedPointToDecimalString() public pure {
|
|
assertEq(
|
|
Descriptor.fixedPointToDecimalString(1457647476727839560029885420909913413788472405159, 18, 18),
|
|
"338490000000000000000000000000000000000"
|
|
);
|
|
assertEq(
|
|
Descriptor.fixedPointToDecimalString(4025149349925610116743993887520032712, 18, 18), "2581100000000000"
|
|
);
|
|
assertEq(Descriptor.fixedPointToDecimalString(3329657202331788924044422905302854, 18, 18), "1766200000");
|
|
assertEq(Descriptor.fixedPointToDecimalString(16241966553695418990605751641065, 18, 18), "42026");
|
|
assertEq(Descriptor.fixedPointToDecimalString(2754475062069337566441091812235, 18, 18), "1208.7");
|
|
assertEq(Descriptor.fixedPointToDecimalString(871041495427277622831427623669, 18, 18), "120.87");
|
|
assertEq(Descriptor.fixedPointToDecimalString(275447506206933756644109181223, 18, 18), "12.087");
|
|
|
|
assertEq(Descriptor.fixedPointToDecimalString(88028870788706913884596530851, 18, 18), "1.2345");
|
|
assertEq(Descriptor.fixedPointToDecimalString(79228162514264337593543950336, 18, 18), "1.0000");
|
|
assertEq(Descriptor.fixedPointToDecimalString(27837173154497669652482281089, 18, 18), "0.12345");
|
|
assertEq(Descriptor.fixedPointToDecimalString(1559426812423768092342, 18, 18), "0.00000000000000038741");
|
|
assertEq(Descriptor.fixedPointToDecimalString(74532606916587, 18, 18), "0.00000000000000000000000000000088498");
|
|
assertEq(
|
|
Descriptor.fixedPointToDecimalString(4947797163, 18, 18), "0.0000000000000000000000000000000000000029387"
|
|
);
|
|
|
|
assertEq(Descriptor.fixedPointToDecimalString(79228162514264337593543950336, 18, 16), "100.00");
|
|
assertEq(Descriptor.fixedPointToDecimalString(250541448375047931186413801569, 18, 17), "100.00");
|
|
assertEq(Descriptor.fixedPointToDecimalString(79228162514264337593543950336, 24, 5), "1.0000");
|
|
|
|
assertEq(Descriptor.fixedPointToDecimalString(79228162514264337593543950336, 10, 18), "0.000000010000");
|
|
assertEq(Descriptor.fixedPointToDecimalString(79228162514264337593543950336, 7, 18), "0.000000000010000");
|
|
}
|
|
}
|