From 70c7375c82b218cd18ace9fa4b8fd8393914741d Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Wed, 21 Jan 2026 16:43:37 +0400 Subject: [PATCH 1/4] update forge-std --- flake.lock | 59 ++++++++++++++++++++++++-------------- foundry.lock | 2 +- lib/forge-std | 2 +- lib/openzeppelin-contracts | 2 +- lib/rain.math.saturating | 2 +- 5 files changed, 42 insertions(+), 25 deletions(-) diff --git a/flake.lock b/flake.lock index 894a168..6c8f51a 100644 --- a/flake.lock +++ b/flake.lock @@ -75,11 +75,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1758705030, - "narHash": "sha256-zYM8PiEXANNrtjfyGUc7w37/D/kCynp0cQS+wCQ77GI=", + "lastModified": 1768892915, + "narHash": "sha256-2+KHmLLjUg9vNzINfGaiFNP07gKz94Af09FcefKHUuE=", "owner": "shazow", "repo": "foundry.nix", - "rev": "b59a55014050110170023e3e1c277c1d4a2f055b", + "rev": "edf14357ad1816ac39469ae493f898200352d77d", "type": "github" }, "original": { @@ -102,13 +102,29 @@ "type": "indirect" } }, + "nixpkgs-old": { + "locked": { + "lastModified": 1749104371, + "narHash": "sha256-m2NmOPd6XgBiskmUq/BS9Xxuf3z0ebnGVfSKNAO5NEM=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "48975d7f9b9960ed33c4e8561bcce20cc0c2de5b", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "48975d7f9b9960ed33c4e8561bcce20cc0c2de5b", + "type": "github" + } + }, "nixpkgs_2": { "locked": { - "lastModified": 1758711836, - "narHash": "sha256-uBqPg7wNX2v6YUdTswH7wWU8wqb60cFZx0tHaWTGF30=", + "lastModified": 1768987938, + "narHash": "sha256-pvqBRTCRvwFM0Nm7aCQfqS0whDZ7WwoXUUTwvOXqus4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "46f97b78e825ae762c0224e3983c47687436a498", + "rev": "95d8e2129409fd37b390c966b434eee3034f75e3", "type": "github" }, "original": { @@ -135,11 +151,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1748662220, - "narHash": "sha256-7gGa49iB9nCnFk4h/g9zwjlQAyjtpgcFkODjcOQS0Es=", + "lastModified": 1766653575, + "narHash": "sha256-TPgxCS7+hWc4kPhzkU5dD2M5UuPhLuuaMNZ/IpwKQvI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "59138c7667b7970d205d6a05a8bfa2d78caa3643", + "rev": "3c1016e6acd16ad96053116d0d3043029c9e2649", "type": "github" }, "original": { @@ -154,15 +170,16 @@ "flake-utils": "flake-utils_2", "foundry": "foundry", "nixpkgs": "nixpkgs_2", + "nixpkgs-old": "nixpkgs-old", "rust-overlay": "rust-overlay", "solc": "solc" }, "locked": { - "lastModified": 1760460761, - "narHash": "sha256-IHvwnmphDaOyZnzvObwOoDQlA9nzym2ZUxe9K/5vs0U=", + "lastModified": 1768991906, + "narHash": "sha256-W8AgvEKkz4BWTHDK3AGwk/vvVFtIF7UtHuZI8Ecv2qI=", "owner": "rainprotocol", "repo": "rainix", - "rev": "add0d8a1fd76ce0e65b962c952e9252257876465", + "rev": "5a9f13de1318b512ef118db6d0e7f9dbafe5205f", "type": "github" }, "original": { @@ -182,11 +199,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1758681214, - "narHash": "sha256-8cW731vev6kfr58cILO2ZsjHwaPhm88dQ8Q6nTSjP9I=", + "lastModified": 1768963622, + "narHash": "sha256-n6VHiUgrYD9yjagzG6ncVVqFbVTsKCI54tR9PNAFCo0=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "b12ed88d8d33d4f3cbc842bf29fad93bb1437299", + "rev": "2ef5b3362af585a83bafd34e7fc9b1f388c2e5e2", "type": "github" }, "original": { @@ -202,11 +219,11 @@ "solc-macos-amd64-list-json": "solc-macos-amd64-list-json" }, "locked": { - "lastModified": 1756368702, - "narHash": "sha256-cqEHv7uCV0LibmQphyiXZ1+jYtGjMNb9Pae4tfcAcF8=", + "lastModified": 1768831671, + "narHash": "sha256-0mmlYRtZK+eomevkQCCH7PL8QlSuALZQsjLroCWGE08=", "owner": "hellwolf", "repo": "solc.nix", - "rev": "d83e90df2fa8359a690f6baabf76099432193c3f", + "rev": "80ad871b93d15c7bccf71617f78f73c2d291a9c7", "type": "github" }, "original": { @@ -218,13 +235,13 @@ "solc-macos-amd64-list-json": { "flake": false, "locked": { - "narHash": "sha256-AvITkfpNYgCypXuLJyqco0li+unVw39BAfdOZvd/SPE=", + "narHash": "sha256-P+ZslplK4cQ/wnV/wykVKb+yTCviI0eylA3sk9uHmRo=", "type": "file", - "url": "https://github.com/argotorg/solc-bin/raw/26fc3fd/macosx-amd64/list.json" + "url": "https://github.com/argotorg/solc-bin/raw/a11f1ad/macosx-amd64/list.json" }, "original": { "type": "file", - "url": "https://github.com/argotorg/solc-bin/raw/26fc3fd/macosx-amd64/list.json" + "url": "https://github.com/argotorg/solc-bin/raw/a11f1ad/macosx-amd64/list.json" } }, "systems": { diff --git a/foundry.lock b/foundry.lock index 663c265..4882285 100644 --- a/foundry.lock +++ b/foundry.lock @@ -1,6 +1,6 @@ { "lib/forge-std": { - "rev": "b8f065fda83b8cd94a6b2fec8fcd911dc3b444fd" + "rev": "1801b0541f4fda118a10798fd3486bb7051c5dd6" }, "lib/openzeppelin-contracts": { "rev": "fcbae5394ae8ad52d8e580a3477db99814b9d565" diff --git a/lib/forge-std b/lib/forge-std index b8f065f..f61e4dd 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit b8f065fda83b8cd94a6b2fec8fcd911dc3b444fd +Subproject commit f61e4dd133379a4536a54ee57a808c9c00019b60 diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts index fcbae53..239795b 160000 --- a/lib/openzeppelin-contracts +++ b/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit fcbae5394ae8ad52d8e580a3477db99814b9d565 +Subproject commit 239795bea728c8dca4deb6c66856dd58a6991112 diff --git a/lib/rain.math.saturating b/lib/rain.math.saturating index 22e58d7..ce2d05c 160000 --- a/lib/rain.math.saturating +++ b/lib/rain.math.saturating @@ -1 +1 @@ -Subproject commit 22e58d70a223b18d83dfc5529e3ac87aef3ff478 +Subproject commit ce2d05c8be329629f8f8c1c3f052480e836361db From 0b1678fe33bd091604dd945e10d96fccfa055a4c Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Wed, 21 Jan 2026 16:44:40 +0400 Subject: [PATCH 2/4] bump deps --- foundry.lock | 2 +- lib/forge-std | 2 +- lib/openzeppelin-contracts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/foundry.lock b/foundry.lock index 4882285..146a395 100644 --- a/foundry.lock +++ b/foundry.lock @@ -6,7 +6,7 @@ "rev": "fcbae5394ae8ad52d8e580a3477db99814b9d565" }, "lib/rain.math.saturating": { - "rev": "22e58d70a223b18d83dfc5529e3ac87aef3ff478" + "rev": "ce2d05c8be329629f8f8c1c3f052480e836361db" }, "lib/rain.string": { "rev": "0b1ca08aed6d9c06b83fe127a7d20ee7002ead28" diff --git a/lib/forge-std b/lib/forge-std index f61e4dd..1801b05 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit f61e4dd133379a4536a54ee57a808c9c00019b60 +Subproject commit 1801b0541f4fda118a10798fd3486bb7051c5dd6 diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts index 239795b..fcbae53 160000 --- a/lib/openzeppelin-contracts +++ b/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 239795bea728c8dca4deb6c66856dd58a6991112 +Subproject commit fcbae5394ae8ad52d8e580a3477db99814b9d565 From 9c5432ce5310ed0e25e6fc1aaf937d9b87a34e9d Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Wed, 21 Jan 2026 16:46:31 +0400 Subject: [PATCH 3/4] update rain.string --- foundry.lock | 2 +- lib/rain.string | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/foundry.lock b/foundry.lock index 146a395..0a0b467 100644 --- a/foundry.lock +++ b/foundry.lock @@ -9,6 +9,6 @@ "rev": "ce2d05c8be329629f8f8c1c3f052480e836361db" }, "lib/rain.string": { - "rev": "0b1ca08aed6d9c06b83fe127a7d20ee7002ead28" + "rev": "f7ff702af4565fc962fa6ac98a787959df2c7388" } } \ No newline at end of file diff --git a/lib/rain.string b/lib/rain.string index 0b1ca08..f7ff702 160000 --- a/lib/rain.string +++ b/lib/rain.string @@ -1 +1 @@ -Subproject commit 0b1ca08aed6d9c06b83fe127a7d20ee7002ead28 +Subproject commit f7ff702af4565fc962fa6ac98a787959df2c7388 From b7b5c2c0bdfa89191b4e97e79b5b2244b1474b25 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Wed, 21 Jan 2026 16:47:17 +0400 Subject: [PATCH 4/4] snapshot fmt --- .gas-snapshot | 156 ++++++++++++++++++------------------ src/lib/LibWillOverflow.sol | 2 + 2 files changed, 80 insertions(+), 78 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 9f75302..ae86425 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,78 +1,78 @@ -FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointDiv(uint256,uint256,uint8) (runs: 968, μ: 8128, ~: 8189) -FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointDivOverflow(uint256,uint256,uint8) (runs: 56, μ: 8757, ~: 8916) -FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointMul(uint256,uint256,uint8) (runs: 849, μ: 8214, ~: 8223) -FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointMulOverflow(uint256,uint256,uint8) (runs: 175, μ: 8676, ~: 8847) -FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntAboveMaxError(uint256,uint256) (runs: 1024, μ: 9682, ~: 9603) -FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntAboveMaxErrorDecimal(uint256,uint256) (runs: 1024, μ: 9897, ~: 9818) -FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntNotRescalesInt(uint256) (runs: 1024, μ: 4151, ~: 3828) -FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntPrecisionLoss(uint256) (runs: 1001, μ: 8896, ~: 9010) -FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntRescalesDecimal(uint256) (runs: 1024, μ: 4376, ~: 4054) -FixedPointDecimalScaleScaleToIntegerLosslessTest:testScaleToIntegerLossless(uint256) (runs: 1024, μ: 659, ~: 659) -FixedPointDecimalScaleScaleToIntegerLosslessTest:testScaleToIntegerLosslessPrecisionLoss(uint256) (runs: 1005, μ: 4738, ~: 4738) -FixedPointDecimalScaleTestScale18:testScale1818(uint256,uint256) (runs: 34, μ: 3359, ~: 3359) -FixedPointDecimalScaleTestScale18:testScale18Gt(uint256,uint8,uint256) (runs: 585, μ: 3762, ~: 3684) -FixedPointDecimalScaleTestScale18:testScale18GtRoundUp(uint256,uint8,uint256) (runs: 585, μ: 3858, ~: 3785) -FixedPointDecimalScaleTestScale18:testScale18Lt(uint256,uint256,uint256) (runs: 46, μ: 5105, ~: 5111) -FixedPointDecimalScaleTestScale18:testScale18LtOverflow(uint256,uint8,uint256) (runs: 78, μ: 5709, ~: 5709) -FixedPointDecimalScaleTestScale18:testScale18LtSaturate(uint256,uint256,uint256) (runs: 58, μ: 3903, ~: 3899) -FixedPointDecimalScaleTestScale18:testScale18ReferenceImplementation(uint256,uint256,uint256) (runs: 41, μ: 4294, ~: 4239) -FixedPointDecimalScaleTestScaleBy:testScaleBy0(uint256,uint256) (runs: 35, μ: 3353, ~: 3353) -FixedPointDecimalScaleTestScaleBy:testScaleByDown(uint256,int8,uint256) (runs: 418, μ: 3911, ~: 3976) -FixedPointDecimalScaleTestScaleBy:testScaleByDownRoundUp(uint256,int8,uint256) (runs: 418, μ: 4005, ~: 4067) -FixedPointDecimalScaleTestScaleBy:testScaleByReferenceImplementation(uint256,int8,uint256) (runs: 37, μ: 4418, ~: 4367) -FixedPointDecimalScaleTestScaleBy:testScaleByUp(uint256,int8,uint256) (runs: 263, μ: 4466, ~: 4468) -FixedPointDecimalScaleTestScaleBy:testScaleByUpOverflow(uint256,int8,uint256) (runs: 161, μ: 5621, ~: 5586) -FixedPointDecimalScaleTestScaleBy:testScaleByUpSaturate(uint256,int8,uint256) (runs: 424, μ: 3809, ~: 3859) -FixedPointDecimalScaleTestScaleDown:testScaleDown0(uint256) (runs: 1024, μ: 404, ~: 397) -FixedPointDecimalScaleTestScaleDown:testScaleDown0(uint256) (runs: 1024, μ: 462, ~: 457) -FixedPointDecimalScaleTestScaleDown:testScaleDownBy0(uint256) (runs: 1024, μ: 472, ~: 472) -FixedPointDecimalScaleTestScaleDown:testScaleDownBy0(uint256) (runs: 1024, μ: 473, ~: 473) -FixedPointDecimalScaleTestScaleDown:testScaleDownGas0() (gas: 412) -FixedPointDecimalScaleTestScaleDown:testScaleDownGas2() (gas: 389) -FixedPointDecimalScaleTestScaleDown:testScaleDownGasSlow0() (gas: 674) -FixedPointDecimalScaleTestScaleDown:testScaleDownGasSlow2() (gas: 653) -FixedPointDecimalScaleTestScaleDown:testScaleDownNoRound(uint256,uint8) (runs: 167, μ: 3952, ~: 3932) -FixedPointDecimalScaleTestScaleDown:testScaleDownOverflow(uint256,uint256) (runs: 954, μ: 3317, ~: 3317) -FixedPointDecimalScaleTestScaleDown:testScaleDownReferenceImplementation(uint256,uint8) (runs: 1024, μ: 1013, ~: 975) -FixedPointDecimalScaleTestScaleDown:testScaleDownReferenceImplementation(uint256,uint8) (runs: 1024, μ: 840, ~: 804) -FixedPointDecimalScaleTestScaleDown:testScaleDownRoundDiff(uint256,uint8) (runs: 857, μ: 4034, ~: 4338) -FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGas1() (gas: 414) -FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGas3() (gas: 406) -FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGasSlow1() (gas: 778) -FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGasSlow3() (gas: 879) -FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpOverflow(uint256,uint256) (runs: 944, μ: 3703, ~: 3703) -FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpOverflow0(uint256) (runs: 945, μ: 3286, ~: 3286) -FixedPointDecimalScaleTestScaleN:testScaleN18(uint256,uint256) (runs: 35, μ: 3317, ~: 3317) -FixedPointDecimalScaleTestScaleN:testScaleNGt18(uint256,uint8,uint256) (runs: 196, μ: 4594, ~: 4596) -FixedPointDecimalScaleTestScaleN:testScaleNGt18Overflow(uint256,uint8,uint256) (runs: 393, μ: 5666, ~: 5643) -FixedPointDecimalScaleTestScaleN:testScaleNGt18Saturate(uint256,uint8,uint256) (runs: 589, μ: 3851, ~: 3773) -FixedPointDecimalScaleTestScaleN:testScaleNLt18(uint256,uint8,uint256) (runs: 431, μ: 3881, ~: 3881) -FixedPointDecimalScaleTestScaleN:testScaleNLt18RoundUp(uint256,uint8,uint256) (runs: 431, μ: 3946, ~: 3947) -FixedPointDecimalScaleTestScaleN:testScaleNReferenceImplementation(uint256,uint256,uint256) (runs: 19, μ: 4459, ~: 4316) -FixedPointDecimalScaleTestScaleUp:testScaleUp(uint256,uint8) (runs: 541, μ: 4118, ~: 4212) -FixedPointDecimalScaleTestScaleUp:testScaleUp0(uint256) (runs: 1024, μ: 1094, ~: 796) -FixedPointDecimalScaleTestScaleUp:testScaleUpBy0(uint256) (runs: 1024, μ: 501, ~: 501) -FixedPointDecimalScaleTestScaleUp:testScaleUpGas0() (gas: 463) -FixedPointDecimalScaleTestScaleUp:testScaleUpGas1() (gas: 443) -FixedPointDecimalScaleTestScaleUp:testScaleUpOverflow(uint256,uint8) (runs: 483, μ: 5032, ~: 4996) -FixedPointDecimalScaleTestScaleUp:testScaleUpOverflowBoundary(uint256) (runs: 1005, μ: 4819, ~: 4811) -FixedPointDecimalScaleTestScaleUp:testScaleUpSaturatingParity(uint256,uint8) (runs: 541, μ: 3862, ~: 3907) -FixedPointDecimalScaleTestScaleUp:testScaleUpSlowGas0() (gas: 683) -FixedPointDecimalScaleTestScaleUp:testScaleUpSlowGas1() (gas: 295) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturating0(uint256) (runs: 1024, μ: 478, ~: 472) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingBy0(uint256) (runs: 1024, μ: 524, ~: 524) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingGas0() (gas: 443) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingGas1() (gas: 442) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingGas2() (gas: 431) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingParity(uint256,uint8) (runs: 540, μ: 3867, ~: 3911) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingReferenceImplementation(uint256,uint8) (runs: 1024, μ: 915, ~: 893) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSaturates(uint256,uint8) (runs: 484, μ: 3555, ~: 3514) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSlowGas0() (gas: 711) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSlowGas1() (gas: 651) -FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSlowGas2() (gas: 700) -LibFixedPointDecimalFormatTest:testFixedPointToDecimalStringExamples() (gas: 122023) -LibFixedPointDecimalFormatTest:testStringRoundTripFuzz(uint256) (runs: 1024, μ: 15284, ~: 9803) -LibFixedPointDecimalParseTest:testDecimalStringToFixedPointExamples() (gas: 297205) -LibFixedPointDecimalParseTest:testDecimalStringToFixedPointFailureCorruptInteger() (gas: 4218) -LibFixedPointDecimalParseTest:testDecimalStringToFixedPointFailureOverflow() (gas: 41481) -LibFixedPointDecimalParseTest:testDecimalStringToFixedPointFailurePrecisionLoss() (gas: 23835) \ No newline at end of file +FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointDiv(uint256,uint256,uint8) (runs: 1024, μ: 5382, ~: 5502) +FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointDivOverflow(uint256,uint256,uint8) (runs: 1024, μ: 5747, ~: 5837) +FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointMul(uint256,uint256,uint8) (runs: 1024, μ: 5448, ~: 5548) +FixedPointDecimalArithmeticOpenZeppelinTest:testFixedPointMulOverflow(uint256,uint256,uint8) (runs: 1024, μ: 5717, ~: 5846) +FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntAboveMaxError(uint256,uint256) (runs: 1024, μ: 5595, ~: 5493) +FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntAboveMaxErrorDecimal(uint256,uint256) (runs: 1024, μ: 5808, ~: 5706) +FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntNotRescalesInt(uint256) (runs: 1024, μ: 981, ~: 1202) +FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntPrecisionLoss(uint256) (runs: 1024, μ: 5522, ~: 5653) +FixedPointDecimalScaleDecimalOrIntToIntTest:testDecimalOrIntToIntRescalesDecimal(uint256) (runs: 1024, μ: 1201, ~: 1426) +FixedPointDecimalScaleScaleToIntegerLosslessTest:testScaleToIntegerLossless(uint256) (runs: 1024, μ: 654, ~: 654) +FixedPointDecimalScaleScaleToIntegerLosslessTest:testScaleToIntegerLosslessPrecisionLoss(uint256) (runs: 1024, μ: 4563, ~: 4563) +FixedPointDecimalScaleTestScale18:testScale1818(uint256,uint256) (runs: 1024, μ: 3355, ~: 3355) +FixedPointDecimalScaleTestScale18:testScale18Gt(uint256,uint8,uint256) (runs: 1024, μ: 3764, ~: 3674) +FixedPointDecimalScaleTestScale18:testScale18GtRoundUp(uint256,uint8,uint256) (runs: 1024, μ: 3860, ~: 3777) +FixedPointDecimalScaleTestScale18:testScale18Lt(uint256,uint256,uint256) (runs: 1024, μ: 5097, ~: 5100) +FixedPointDecimalScaleTestScale18:testScale18LtOverflow(uint256,uint8,uint256) (runs: 1024, μ: 5528, ~: 5528) +FixedPointDecimalScaleTestScale18:testScale18LtSaturate(uint256,uint256,uint256) (runs: 1024, μ: 3894, ~: 3891) +FixedPointDecimalScaleTestScale18:testScale18ReferenceImplementation(uint256,uint256,uint256) (runs: 1024, μ: 4316, ~: 4225) +FixedPointDecimalScaleTestScaleBy:testScaleBy0(uint256,uint256) (runs: 1024, μ: 3345, ~: 3345) +FixedPointDecimalScaleTestScaleBy:testScaleByDown(uint256,int8,uint256) (runs: 1024, μ: 3907, ~: 3959) +FixedPointDecimalScaleTestScaleBy:testScaleByDownRoundUp(uint256,int8,uint256) (runs: 1024, μ: 4000, ~: 4050) +FixedPointDecimalScaleTestScaleBy:testScaleByReferenceImplementation(uint256,int8,uint256) (runs: 1024, μ: 4594, ~: 4744) +FixedPointDecimalScaleTestScaleBy:testScaleByUp(uint256,int8,uint256) (runs: 1024, μ: 4453, ~: 4457) +FixedPointDecimalScaleTestScaleBy:testScaleByUpOverflow(uint256,int8,uint256) (runs: 1024, μ: 5465, ~: 5401) +FixedPointDecimalScaleTestScaleBy:testScaleByUpSaturate(uint256,int8,uint256) (runs: 1024, μ: 3796, ~: 3849) +FixedPointDecimalScaleTestScaleDown:testScaleDown0(uint256) (runs: 1024, μ: 402, ~: 391) +FixedPointDecimalScaleTestScaleDown:testScaleDown0(uint256) (runs: 1024, μ: 460, ~: 451) +FixedPointDecimalScaleTestScaleDown:testScaleDownBy0(uint256) (runs: 1024, μ: 468, ~: 468) +FixedPointDecimalScaleTestScaleDown:testScaleDownBy0(uint256) (runs: 1024, μ: 469, ~: 469) +FixedPointDecimalScaleTestScaleDown:testScaleDownGas0() (gas: 409) +FixedPointDecimalScaleTestScaleDown:testScaleDownGas2() (gas: 387) +FixedPointDecimalScaleTestScaleDown:testScaleDownGasSlow0() (gas: 668) +FixedPointDecimalScaleTestScaleDown:testScaleDownGasSlow2() (gas: 648) +FixedPointDecimalScaleTestScaleDown:testScaleDownNoRound(uint256,uint8) (runs: 1024, μ: 3987, ~: 3921) +FixedPointDecimalScaleTestScaleDown:testScaleDownOverflow(uint256,uint256) (runs: 1024, μ: 3311, ~: 3311) +FixedPointDecimalScaleTestScaleDown:testScaleDownReferenceImplementation(uint256,uint8) (runs: 1024, μ: 1067, ~: 1219) +FixedPointDecimalScaleTestScaleDown:testScaleDownReferenceImplementation(uint256,uint8) (runs: 1024, μ: 868, ~: 1050) +FixedPointDecimalScaleTestScaleDown:testScaleDownRoundDiff(uint256,uint8) (runs: 1024, μ: 4072, ~: 4327) +FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGas1() (gas: 411) +FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGas3() (gas: 404) +FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGasSlow1() (gas: 770) +FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpGasSlow3() (gas: 872) +FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpOverflow(uint256,uint256) (runs: 1024, μ: 3698, ~: 3698) +FixedPointDecimalScaleTestScaleDown:testScaleDownRoundUpOverflow0(uint256) (runs: 1024, μ: 3279, ~: 3279) +FixedPointDecimalScaleTestScaleN:testScaleN18(uint256,uint256) (runs: 1024, μ: 3313, ~: 3313) +FixedPointDecimalScaleTestScaleN:testScaleNGt18(uint256,uint8,uint256) (runs: 1024, μ: 4581, ~: 4587) +FixedPointDecimalScaleTestScaleN:testScaleNGt18Overflow(uint256,uint8,uint256) (runs: 1024, μ: 5501, ~: 5462) +FixedPointDecimalScaleTestScaleN:testScaleNGt18Saturate(uint256,uint8,uint256) (runs: 1024, μ: 3848, ~: 3765) +FixedPointDecimalScaleTestScaleN:testScaleNLt18(uint256,uint8,uint256) (runs: 1024, μ: 3873, ~: 3873) +FixedPointDecimalScaleTestScaleN:testScaleNLt18RoundUp(uint256,uint8,uint256) (runs: 1024, μ: 3937, ~: 3939) +FixedPointDecimalScaleTestScaleN:testScaleNReferenceImplementation(uint256,uint256,uint256) (runs: 1024, μ: 4414, ~: 4303) +FixedPointDecimalScaleTestScaleUp:testScaleUp(uint256,uint8) (runs: 1024, μ: 4109, ~: 4203) +FixedPointDecimalScaleTestScaleUp:testScaleUp0(uint256) (runs: 1024, μ: 1104, ~: 941) +FixedPointDecimalScaleTestScaleUp:testScaleUpBy0(uint256) (runs: 1024, μ: 498, ~: 498) +FixedPointDecimalScaleTestScaleUp:testScaleUpGas0() (gas: 462) +FixedPointDecimalScaleTestScaleUp:testScaleUpGas1() (gas: 441) +FixedPointDecimalScaleTestScaleUp:testScaleUpOverflow(uint256,uint8) (runs: 1024, μ: 4866, ~: 4820) +FixedPointDecimalScaleTestScaleUp:testScaleUpOverflowBoundary(uint256) (runs: 1024, μ: 4656, ~: 4637) +FixedPointDecimalScaleTestScaleUp:testScaleUpSaturatingParity(uint256,uint8) (runs: 1024, μ: 3857, ~: 3901) +FixedPointDecimalScaleTestScaleUp:testScaleUpSlowGas0() (gas: 678) +FixedPointDecimalScaleTestScaleUp:testScaleUpSlowGas1() (gas: 290) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturating0(uint256) (runs: 1024, μ: 476, ~: 466) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingBy0(uint256) (runs: 1024, μ: 520, ~: 520) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingGas0() (gas: 441) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingGas1() (gas: 439) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingGas2() (gas: 429) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingParity(uint256,uint8) (runs: 1024, μ: 3861, ~: 3905) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingReferenceImplementation(uint256,uint8) (runs: 1024, μ: 944, ~: 1137) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSaturates(uint256,uint8) (runs: 1024, μ: 3555, ~: 3508) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSlowGas0() (gas: 705) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSlowGas1() (gas: 643) +FixedPointDecimalScaleTestScaleUpSaturating:testScaleUpSaturatingSlowGas2() (gas: 694) +LibFixedPointDecimalFormatTest:testFixedPointToDecimalStringExamples() (gas: 111485) +LibFixedPointDecimalFormatTest:testStringRoundTripFuzz(uint256) (runs: 1024, μ: 14457, ~: 9599) +LibFixedPointDecimalParseTest:testDecimalStringToFixedPointExamples() (gas: 295449) +LibFixedPointDecimalParseTest:testDecimalStringToFixedPointFailureCorruptInteger() (gas: 4222) +LibFixedPointDecimalParseTest:testDecimalStringToFixedPointFailureOverflow() (gas: 41100) +LibFixedPointDecimalParseTest:testDecimalStringToFixedPointFailurePrecisionLoss() (gas: 23622) \ No newline at end of file diff --git a/src/lib/LibWillOverflow.sol b/src/lib/LibWillOverflow.sol index 0d8cc83..eab28b5 100644 --- a/src/lib/LibWillOverflow.sol +++ b/src/lib/LibWillOverflow.sol @@ -4,9 +4,11 @@ pragma solidity ^0.8.25; import { FLAG_SATURATE, + // Exported for convenience. //forge-lint: disable-next-line(unused-import) FLAG_MAX_INT, + // Exported for convenience. //forge-lint: disable-next-line(unused-import) FLAG_ROUND_UP,