From f24facb6e4ce8c6051a3261558f36e6e9de5d40e Mon Sep 17 00:00:00 2001 From: JanKuczma Date: Thu, 4 Jul 2024 17:31:17 +0200 Subject: [PATCH] min resreve withdraw liquidity tests --- .../stable_swap_tests/min_reserve_tests.rs | 226 +++++++++++++++++- 1 file changed, 220 insertions(+), 6 deletions(-) diff --git a/amm/drink-tests/src/stable_swap_tests/min_reserve_tests.rs b/amm/drink-tests/src/stable_swap_tests/min_reserve_tests.rs index 7a7f309..81db44a 100644 --- a/amm/drink-tests/src/stable_swap_tests/min_reserve_tests.rs +++ b/amm/drink-tests/src/stable_swap_tests/min_reserve_tests.rs @@ -1,5 +1,5 @@ -use drink::{runtime::MinimalRuntime, session::Session}; use super::*; +use drink::{runtime::MinimalRuntime, session::Session}; const USDT_DEC: u8 = 6; const USDC_DEC: u8 = 6; @@ -11,14 +11,72 @@ fn test_min_initial_reserve( initial_reserves: Vec, expected_result: Result<(u128, u128), StablePoolError>, ) { - let (stable_swap, _) = - setup_stable_swap_with_tokens(session, token_decimals, initial_reserves.clone(), 1000, 25, 6, BOB); - let res = stable_swap::add_liquidity( + let (stable_swap, _) = setup_stable_swap_with_tokens( + session, + token_decimals, + initial_reserves.clone(), + 1000, + 25, + 6, + BOB, + ); + let res = stable_swap::add_liquidity(session, stable_swap, BOB, 1, initial_reserves, bob()); + assert_eq!(expected_result, res, "Unexpected result"); +} + +fn test_min_reserve_withdraw_liquidity( + session: &mut Session, + token_decimals: Vec, + initial_reserves: Vec, + withdraw_amounts: Vec, + expected_result: Result<(u128, u128), StablePoolError>, +) { + let (stable_swap, _) = setup_stable_swap_with_tokens( + session, + token_decimals, + initial_reserves.clone(), + 1000, + 25, + 6, + BOB, + ); + _ = stable_swap::add_liquidity(session, stable_swap, BOB, 1, initial_reserves, bob()); + + let res = stable_swap::remove_liquidity_by_amounts( + session, + stable_swap, + BOB, + u128::MAX, // allow inifite max share to burn + withdraw_amounts, + bob(), + ); + assert_eq!(expected_result, res, "Unexpected result"); +} + +fn test_min_reserve_withdraw_liquidity_by_shares( + session: &mut Session, + token_decimals: Vec, + initial_reserves: Vec, + withdraw_shares: u128, + expected_result: Result, StablePoolError>, +) { + let (stable_swap, _) = setup_stable_swap_with_tokens( + session, + token_decimals, + initial_reserves.clone(), + 1000, + 25, + 6, + BOB, + ); + _ = stable_swap::add_liquidity(session, stable_swap, BOB, 1, initial_reserves, bob()); + + let res = stable_swap::remove_liquidity_by_shares( session, stable_swap, BOB, - 1, - initial_reserves, + withdraw_shares, + vec![1, 1, 1], // min withdraw amounts bob(), ); assert_eq!(expected_result, res, "Unexpected result"); @@ -74,7 +132,163 @@ fn test_05(session: &mut Session) { test_min_initial_reserve( &mut session, vec![USDT_DEC, DAI_DEC], + vec![1_000_000u128, 100_000_000_000_000_000u128], + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_06(session: &mut Session) { + // reserves one 1 usdt, 1 dai + // withdraw 1 usdt, 1 dai + test_min_reserve_withdraw_liquidity( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![1_000_000u128, 1_000_000_000_000_000_000u128], + vec![1_000_000u128, 1_000_000_000_000_000_000u128], + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_07(session: &mut Session) { + // reserves one 1 usdt, 1 dai + // withdraw 0.1 usdt, 0.1 dai + test_min_reserve_withdraw_liquidity( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![1_000_000u128, 1_000_000_000_000_000_000u128], vec![100_000u128, 100_000_000_000_000_000u128], Err(StablePoolError::MinReserve()), ); } + +#[drink::test] +fn test_08(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 1 usdt, 1 dai + test_min_reserve_withdraw_liquidity( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + vec![1_000_000u128, 1_000_000_000_000_000_000u128], + Ok((2000000000000000000, 0)), + ); +} + +#[drink::test] +fn test_09(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 1.1 usdt, 1.1 dai + test_min_reserve_withdraw_liquidity( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + vec![1_100_000u128, 1_100_000_000_000_000_000u128], + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_10(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 1.5 usdt, 0.5 dai + test_min_reserve_withdraw_liquidity( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + vec![1_500_000u128, 500_000_000_000_000_000u128], + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_11(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 0.5 usdt, 0.5 dai + test_min_reserve_withdraw_liquidity( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + vec![500_000u128, 500_000_000_000_000_000u128], + Ok((1000000000000000000, 0)), + ); +} + +#[drink::test] +fn test_12(session: &mut Session) { + // reserves one 1 usdt, 1 dai + // withdraw 1 usdt, 1 dai + test_min_reserve_withdraw_liquidity_by_shares( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![1_000_000u128, 1_000_000_000_000_000_000u128], + 2000000000000000000, // 100% + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_13(session: &mut Session) { + // reserves one 1 usdt, 1 dai + // withdraw 0.1 usdt, 0.1 dai + test_min_reserve_withdraw_liquidity_by_shares( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![1_000_000u128, 1_000_000_000_000_000_000u128], + 2000000000000000000 / 10, // 10% + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_14(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 1 usdt, 1 dai + test_min_reserve_withdraw_liquidity_by_shares( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + 2000000000000000000, // 50% + Ok(vec![1_000_000u128, 1_000_000_000_000_000_000u128]), + ); +} + +#[drink::test] +fn test_15(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 1.1 usdt, 1.1 dai + test_min_reserve_withdraw_liquidity_by_shares( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + 4000000000000000000 * 51 / 100, // 51 % + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_16(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 1.5 usdt, 0.5 dai + test_min_reserve_withdraw_liquidity_by_shares( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + 4000000000000000000 * 3 / 4, // 75% + Err(StablePoolError::MinReserve()), + ); +} + +#[drink::test] +fn test_17(session: &mut Session) { + // reserves one 2 usdt, 2 dai + // withdraw 0.5 usdt, 0.5 dai + test_min_reserve_withdraw_liquidity_by_shares( + &mut session, + vec![USDT_DEC, DAI_DEC], + vec![2_000_000u128, 2_000_000_000_000_000_000u128], + 4000000000000000000 / 4, // 25% + Ok(vec![500_000u128, 500_000_000_000_000_000u128]), + ); +}