From dd85cc69226b88c423077e1bd2c22386fbfdcbb2 Mon Sep 17 00:00:00 2001 From: "A.L." Date: Thu, 28 Nov 2024 11:31:34 +0800 Subject: [PATCH] test: fix expected errors --- src/libraries/Uint31Lib.sol | 18 ------------------ test/unit/AssetManagedPair.t.sol | 4 +++- test/unit/ConstantProductPair.t.sol | 11 +++++------ test/unit/StablePair.t.sol | 11 +++++------ test/unit/libraries/Uint31Lib.t.sol | 17 ----------------- 5 files changed, 13 insertions(+), 48 deletions(-) delete mode 100644 src/libraries/Uint31Lib.sol delete mode 100644 test/unit/libraries/Uint31Lib.t.sol diff --git a/src/libraries/Uint31Lib.sol b/src/libraries/Uint31Lib.sol deleted file mode 100644 index 368d67e9..00000000 --- a/src/libraries/Uint31Lib.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.0; - -// arithmetic for uint31 functions as the timestamp we have stored in our is limited to 31 bits -// 1 bit is for storing the reentrancy lock variable -library Uint31Lib { - // subtracts b from a - // wraps around for underflow - function sub(uint32 a, uint32 b) internal pure returns (uint32 rResult) { - require(a < 0x80000000, "a exceeds uint31"); - require(b < 0x80000000, "b exceeds uint31"); - - unchecked { - rResult = a - b; - } - rResult &= 0x7FFFFFFF; - } -} diff --git a/test/unit/AssetManagedPair.t.sol b/test/unit/AssetManagedPair.t.sol index d94530be..19e2bb6a 100644 --- a/test/unit/AssetManagedPair.t.sol +++ b/test/unit/AssetManagedPair.t.sol @@ -2,9 +2,11 @@ pragma solidity ^0.8.0; import "test/__fixtures/BaseTest.sol"; +import { SafeCast } from "@openzeppelin/utils/math/SafeCast.sol"; import { MathUtils } from "src/libraries/MathUtils.sol"; import { ReservoirPair, IERC20 } from "src/ReservoirPair.sol"; import { AssetManager } from "test/__mocks/AssetManager.sol"; +import {SafeCast} from "../../lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol"; contract AssetManagedPairTest is BaseTest { AssetManager private _manager = new AssetManager(); @@ -102,7 +104,7 @@ contract AssetManagedPairTest is BaseTest { _pair.setManager(AssetManager(address(this))); // act & assert - vm.expectRevert("SafeCast: value doesn't fit in 104 bits"); + vm.expectPartialRevert(SafeCast.SafeCastOverflowedUintDowncast.selector); _pair.adjustManagement(0, int256(uint256(type(uint104).max)) + 1); } diff --git a/test/unit/ConstantProductPair.t.sol b/test/unit/ConstantProductPair.t.sol index 631c985a..714518a2 100644 --- a/test/unit/ConstantProductPair.t.sol +++ b/test/unit/ConstantProductPair.t.sol @@ -7,7 +7,6 @@ import { stdStorage } from "forge-std/Test.sol"; import { MintableERC20 } from "test/__fixtures/MintableERC20.sol"; import { AssetManager } from "test/__mocks/AssetManager.sol"; -import { Uint31Lib } from "src/libraries/Uint31Lib.sol"; import { LogCompression } from "src/libraries/LogCompression.sol"; import { Observation } from "src/ReservoirPair.sol"; import { IERC20 } from "src/GenericFactory.sol"; @@ -324,14 +323,14 @@ contract ConstantProductPairTest is BaseTest, IReservoirCallee { assertApproxEqRel( LogCompression.fromLowResLog( - (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs1.timestamp, lObs0.timestamp)) + (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs1.timestamp - lObs0.timestamp) ), lPrice1, 0.0001e18 ); assertApproxEqRel( LogCompression.fromLowResLog( - (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs2.timestamp, lObs0.timestamp)) + (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs2.timestamp - lObs0.timestamp) ), Math.sqrt(lPrice1 * lPrice2), 0.0001e18 @@ -411,7 +410,7 @@ contract ConstantProductPairTest is BaseTest, IReservoirCallee { // Price for observation window 0-1 assertApproxEqRel( LogCompression.fromLowResLog( - (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs1.timestamp, lObs0.timestamp)) + (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs1.timestamp - lObs0.timestamp) ), 4e18, 0.0001e18 @@ -419,7 +418,7 @@ contract ConstantProductPairTest is BaseTest, IReservoirCallee { // Price for observation window 1-2 assertApproxEqRel( LogCompression.fromLowResLog( - (lObs2.logAccRawPrice - lObs1.logAccRawPrice) / int32(Uint31Lib.sub(lObs2.timestamp, lObs1.timestamp)) + (lObs2.logAccRawPrice - lObs1.logAccRawPrice) / int32(lObs2.timestamp - lObs1.timestamp) ), 16e18, 0.0001e18 @@ -427,7 +426,7 @@ contract ConstantProductPairTest is BaseTest, IReservoirCallee { // Price for observation window 0-2 assertApproxEqRel( LogCompression.fromLowResLog( - (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs2.timestamp, lObs0.timestamp)) + (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs2.timestamp - lObs0.timestamp) ), 8e18, 0.0001e18 diff --git a/test/unit/StablePair.t.sol b/test/unit/StablePair.t.sol index 55217af0..478796d4 100644 --- a/test/unit/StablePair.t.sol +++ b/test/unit/StablePair.t.sol @@ -7,7 +7,6 @@ import { Math } from "test/__fixtures/Math.sol"; import { MathUtils } from "src/libraries/MathUtils.sol"; import { LogCompression } from "src/libraries/LogCompression.sol"; import { StableOracleMath } from "src/libraries/StableOracleMath.sol"; -import { Uint31Lib } from "src/libraries/Uint31Lib.sol"; import { StableMath } from "src/libraries/StableMath.sol"; import { Observation } from "src/ReservoirPair.sol"; import { StablePair } from "src/curve/stable/StablePair.sol"; @@ -1454,14 +1453,14 @@ contract StablePairTest is BaseTest { assertApproxEqRel( LogCompression.fromLowResLog( - (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs1.timestamp, lObs0.timestamp)) + (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs1.timestamp - lObs0.timestamp) ), lPrice1, 0.0001e18 ); assertApproxEqRel( LogCompression.fromLowResLog( - (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs2.timestamp, lObs0.timestamp)) + (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs2.timestamp - lObs0.timestamp) ), Math.sqrt(lPrice1 * lPrice2), 0.0001e18 @@ -1533,7 +1532,7 @@ contract StablePairTest is BaseTest { // Price for observation window 0-1 assertApproxEqRel( LogCompression.fromLowResLog( - (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs1.timestamp, lObs0.timestamp)) + (lObs1.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs1.timestamp - lObs0.timestamp) ), lSpotPrice1, 0.0001e18 @@ -1541,7 +1540,7 @@ contract StablePairTest is BaseTest { // Price for observation window 1-2 assertApproxEqRel( LogCompression.fromLowResLog( - (lObs2.logAccRawPrice - lObs1.logAccRawPrice) / int32(Uint31Lib.sub(lObs2.timestamp, lObs1.timestamp)) + (lObs2.logAccRawPrice - lObs1.logAccRawPrice) / int32(lObs2.timestamp - lObs1.timestamp) ), lSpotPrice2, 0.0001e18 @@ -1549,7 +1548,7 @@ contract StablePairTest is BaseTest { // Price for observation window 0-2 assertApproxEqRel( LogCompression.fromLowResLog( - (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(Uint31Lib.sub(lObs2.timestamp, lObs0.timestamp)) + (lObs2.logAccRawPrice - lObs0.logAccRawPrice) / int32(lObs2.timestamp - lObs0.timestamp) ), Math.sqrt(lSpotPrice1 * lSpotPrice2), 0.0001e18 diff --git a/test/unit/libraries/Uint31Lib.t.sol b/test/unit/libraries/Uint31Lib.t.sol deleted file mode 100644 index a8c9a4c3..00000000 --- a/test/unit/libraries/Uint31Lib.t.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.0; - -import "forge-std/Test.sol"; - -import { Uint31Lib } from "src/libraries/Uint31Lib.sol"; - -contract Uint31LibTest is Test { - function testSub() external { - uint32 lA = 4; - uint32 lB = 0x7FFFFFFF; // max value of uint31 - - uint32 lResult = Uint31Lib.sub(lA, lB); - - assertEq(lResult, 5); - } -}