Skip to content

Commit 823eeac

Browse files
committed
feat: add fInverse() test and EulerSwapMock.sol contract
1 parent 642408a commit 823eeac

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

test/EulerSwapPeriphery.t.sol

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
11
// SPDX-License-Identifier: GPL-2.0-or-later
22
pragma solidity ^0.8.24;
33

4-
import {EulerSwapTestBase, EulerSwap, EulerSwapPeriphery} from "./EulerSwapTestBase.t.sol";
4+
import {EulerSwapTestBase, EulerSwap, EulerSwapPeriphery, IEulerSwap} from "./EulerSwapTestBase.t.sol";
5+
import {EulerSwapMock} from "./mocks/EulerSwapMock.sol";
56

67
contract EulerSwapPeripheryTest is EulerSwapTestBase {
78
EulerSwap public eulerSwap;
9+
EulerSwapMock public eulerSwapMock;
810

911
function setUp() public virtual override {
1012
super.setUp();
1113

1214
eulerSwap = createEulerSwap(50e18, 50e18, 0, 1e18, 1e18, 0.4e18, 0.85e18);
15+
16+
IEulerSwap.Params memory params = getEulerSwapParams(50e18, 50e18, 0.4e18);
17+
IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams({
18+
priceX: 1e18,
19+
priceY: 1e18,
20+
concentrationX: 0.85e18,
21+
concentrationY: 0.85e18
22+
});
23+
24+
eulerSwapMock = new EulerSwapMock(params, curveParams); // Use the mock EulerSwap contract with a public f() function
1325
}
1426

1527
function test_SwapExactIn() public {
@@ -69,4 +81,17 @@ contract EulerSwapPeripheryTest is EulerSwapTestBase {
6981
periphery.swapExactOut(address(eulerSwap), address(assetTST), address(assetTST2), amountOut * 2, amountIn);
7082
vm.stopPrank();
7183
}
84+
85+
function test_fInverseFuzz(uint256 x) public {
86+
x = bound(x, 2, 50e18 - 1); // it fails if 1 us used, not an issue since only used in periphery
87+
uint256 y = eulerSwapMock.exposedF(x, 1e18, 1e18, 50e18, 50e18, 0.85e18);
88+
uint256 outX = periphery.fInverse(y, 1e18, 1e18, 50e18, 50e18, 0.85e18);
89+
90+
// Ensure x is within the expected range
91+
assertGe(outX, x); // Asserts xOut >= x
92+
assertLe(outX, x + 1); // Asserts xOut <= x + 1
93+
94+
// Alternative using assertApproxEqAbs for absolute difference within 1
95+
assertApproxEqAbs(x, outX, 1);
96+
}
7297
}

test/mocks/EulerSwapMock.sol

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.27;
3+
4+
import {EulerSwap, IEulerSwap} from "../../src/EulerSwap.sol";
5+
6+
contract EulerSwapMock is EulerSwap {
7+
8+
constructor(IEulerSwap.Params memory params, IEulerSwap.CurveParams memory curveParams)
9+
EulerSwap(params, curveParams)
10+
{}
11+
12+
/// @notice Exposes the internal f() function as a public function for testing
13+
function exposedF(
14+
uint256 x,
15+
uint256 px,
16+
uint256 py,
17+
uint256 x0,
18+
uint256 y0,
19+
uint256 c
20+
) external pure returns (uint256) {
21+
return f(x, px, py, x0, y0, c);
22+
}
23+
}

0 commit comments

Comments
 (0)