From 483447179058e2e3628bdf93d3e0c64ec02b4acb Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Wed, 16 Apr 2025 14:40:43 +0400 Subject: [PATCH 1/2] test that normalize is idempotent --- .gas-snapshot | 7 ++++--- .../LibDecimalFloatImplementation.normalize.t.sol | 11 +++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 461ebb55..518bed2e 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -103,9 +103,10 @@ LibDecimalFloatGtTest:testGtXNotY(int256,int256,int256,int256) (runs: 5101, μ: LibDecimalFloatGtTest:testGtXPositiveYNegative(int256,int256,int256,int256) (runs: 5101, μ: 11846, ~: 11803) LibDecimalFloatGtTest:testGtXPositiveYZero(int256,int256,int256) (runs: 5101, μ: 8970, ~: 8743) LibDecimalFloatGtTest:testGtZero(int256,int256) (runs: 5101, μ: 3437, ~: 3437) -LibDecimalFloatImplementationNormalizeTest:testExamples() (gas: 158985) -LibDecimalFloatImplementationNormalizeTest:testIsNormalizedReference(int256,int256) (runs: 5101, μ: 3516, ~: 3522) -LibDecimalFloatImplementationNormalizeTest:testNormalized(int256,int256) (runs: 5101, μ: 8977, ~: 8940) +LibDecimalFloatImplementationNormalizeTest:testExamples() (gas: 157225) +LibDecimalFloatImplementationNormalizeTest:testIdempotent(int256,int256) (runs: 5101, μ: 9458, ~: 9419) +LibDecimalFloatImplementationNormalizeTest:testIsNormalizedReference(int256,int256) (runs: 5101, μ: 3549, ~: 3555) +LibDecimalFloatImplementationNormalizeTest:testNormalized(int256,int256) (runs: 5101, μ: 8934, ~: 8895) LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentExamples() (gas: 12292) LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerExponentOverflowRescaleRevert(int256,int256,int256) (runs: 5098, μ: 12560, ~: 12463) LibDecimalFloatImplementationWithTargetExponentTest:testWithTargetExponentLargerExponentVeryLargeDiffRevert(int256,int256,int256) (runs: 5101, μ: 11365, ~: 11301) diff --git a/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol b/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol index c7ac754d..6e7cd959 100644 --- a/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol +++ b/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol @@ -48,4 +48,15 @@ contract LibDecimalFloatImplementationNormalizeTest is Test { checkNormalized(int256(10 ** uint256(i)), 0, 1e37, i - 37); } } + + /// Normalization should be idempotent. + function testIdempotent(int256 signedCoefficient, int256 exponent) external pure { + exponent = bound(exponent, EXPONENT_MIN, EXPONENT_MAX); + (int256 normalizedSignedCoefficient, int256 normalizedExponent) = + LibDecimalFloatImplementation.normalize(signedCoefficient, exponent); + (int256 actualSignedCoefficient, int256 actualExponent) = + LibDecimalFloatImplementation.normalize(normalizedSignedCoefficient, normalizedExponent); + assertEq(actualSignedCoefficient, normalizedSignedCoefficient); + assertEq(actualExponent, normalizedExponent); + } } From d75d9880f709fb8024707fe11d861365e9a0ecb2 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Wed, 16 Apr 2025 14:54:36 +0400 Subject: [PATCH 2/2] add tests --- .../LibDecimalFloatImplementation.normalize.t.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol b/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol index 6e7cd959..2981dbfe 100644 --- a/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol +++ b/test/src/lib/implementation/LibDecimalFloatImplementation.normalize.t.sol @@ -43,6 +43,8 @@ contract LibDecimalFloatImplementationNormalizeTest is Test { checkNormalized(1e37, 0, 1e37, 0); checkNormalized(type(int256).max, 0, 5.7896044618658097711785492504343953926e37, 39); checkNormalized(type(int256).min, 0, -5.7896044618658097711785492504343953926e37, 39); + checkNormalized(42, 0, 42e36, -36); + checkNormalized(42e36, -36, 42e36, -36); for (int256 i = 76; i >= 0; i--) { checkNormalized(int256(10 ** uint256(i)), 0, 1e37, i - 37);