@@ -1047,14 +1047,14 @@ mod swap_tests {
10471047 #[ test]
10481048 fn test_get_remove_liquidity_mint_amount_with_existing_aum_6_decimals_large_aum ( ) {
10491049 get_remove_liquidity_mint_amount_scenario (
1050- 100_000_000_000 * 1_000_000 , // last_aum ($100,000,000,000)
1051- 0 , // now
1052- 6 , // in_decimals
1053- 100_000_000_000 * 1_000_000 , // in_amount
1054- 100_000_000_000 * 1_000_000 , // dlp_total_supply
1055- 99990000000000000 , // expected_out_amount
1056- 10000000000000 , // expected_lp_fee
1057- 349765020000000 , // expected_out_fee_amount
1050+ 100_000_000_000 * 1_000_000 , // last_aum ($100,000,000,000)
1051+ 0 , // now
1052+ 6 , // in_decimals
1053+ 100_000_000_000 * 1_000_000 - 1_000_000 , // Leave in QUOTE AMOUNT
1054+ 100_000_000_000 * 1_000_000 , // dlp_total_supply
1055+ 99989999900000000 , // expected_out_amount
1056+ 9999999999900 , // expected_lp_fee
1057+ 349765019650200 , // expected_out_fee_amount
10581058 1 ,
10591059 2 ,
10601060 2 ,
@@ -1065,14 +1065,14 @@ mod swap_tests {
10651065 #[ test]
10661066 fn test_get_remove_liquidity_mint_amount_with_existing_aum_8_decimals_large_aum ( ) {
10671067 get_remove_liquidity_mint_amount_scenario (
1068- 10_000_000_000_000_000 , // last_aum ($10,000,000,000)
1069- 0 , // now
1070- 8 , // in_decimals
1071- 10_000_000_000 * 100_000_000 , // in_amount
1072- 10_000_000_000 * 1_000_000 , // dlp_total_supply
1073- 9_999_000_000_000_000_0000 , // expected_out_amount
1074- 100000000000000 , // expected_lp_fee
1075- 3764623500000000000 , // expected_out_fee_amount
1068+ 10_000_000_000_000_000 , // last_aum ($10,000,000,000)
1069+ 0 , // now
1070+ 8 , // in_decimals
1071+ 10_000_000_000 * 1_000_000 - 1_000_000 , // in_amount
1072+ 10_000_000_000 * 1_000_000 , // dlp_total_supply
1073+ 999899999000000000 , // expected_out_amount
1074+ ( 10_000_000_000 * 1_000_000 - 1_000_000 ) / 10000 , // expected_lp_fee
1075+ 3497650196502000 , // expected_out_fee_amount
10761076 1 ,
10771077 2 ,
10781078 2 ,
@@ -1540,6 +1540,7 @@ mod swap_fee_tests {
15401540
15411541#[ cfg( test) ]
15421542mod settle_tests {
1543+ use crate :: math:: constants:: { QUOTE_PRECISION , QUOTE_PRECISION_I64 , QUOTE_PRECISION_U64 } ;
15431544 use crate :: math:: lp_pool:: perp_lp_pool_settlement:: {
15441545 calculate_settlement_amount, update_cache_info, SettlementContext , SettlementDirection ,
15451546 SettlementResult ,
@@ -1570,35 +1571,38 @@ mod settle_tests {
15701571 #[ test]
15711572 fn test_lp_to_perp_settlement_sufficient_balance ( ) {
15721573 let ctx = SettlementContext {
1573- quote_owed_from_lp : 500 ,
1574- quote_constituent_token_balance : 1000 ,
1575- fee_pool_balance : 300 ,
1576- pnl_pool_balance : 200 ,
1574+ quote_owed_from_lp : 500 * QUOTE_PRECISION_I64 ,
1575+ quote_constituent_token_balance : 1000 * QUOTE_PRECISION_U64 ,
1576+ fee_pool_balance : 300 * QUOTE_PRECISION ,
1577+ pnl_pool_balance : 200 * QUOTE_PRECISION ,
15771578 quote_market : & create_mock_spot_market ( ) ,
1578- max_settle_quote_amount : 10000 ,
1579+ max_settle_quote_amount : 10000 * QUOTE_PRECISION_U64 ,
15791580 } ;
15801581
15811582 let result = calculate_settlement_amount ( & ctx) . unwrap ( ) ;
15821583 assert_eq ! ( result. direction, SettlementDirection :: FromLpPool ) ;
1583- assert_eq ! ( result. amount_transferred, 500 ) ;
1584+ assert_eq ! ( result. amount_transferred, 500 * QUOTE_PRECISION_U64 ) ;
15841585 assert_eq ! ( result. fee_pool_used, 0 ) ;
15851586 assert_eq ! ( result. pnl_pool_used, 0 ) ;
15861587 }
15871588
15881589 #[ test]
15891590 fn test_lp_to_perp_settlement_insufficient_balance ( ) {
15901591 let ctx = SettlementContext {
1591- quote_owed_from_lp : 1500 ,
1592- quote_constituent_token_balance : 1000 ,
1593- fee_pool_balance : 300 ,
1594- pnl_pool_balance : 200 ,
1592+ quote_owed_from_lp : 1500 * QUOTE_PRECISION_I64 ,
1593+ quote_constituent_token_balance : 1000 * QUOTE_PRECISION_U64 ,
1594+ fee_pool_balance : 300 * QUOTE_PRECISION ,
1595+ pnl_pool_balance : 200 * QUOTE_PRECISION ,
15951596 quote_market : & create_mock_spot_market ( ) ,
1596- max_settle_quote_amount : 10000 ,
1597+ max_settle_quote_amount : 10000 * QUOTE_PRECISION_U64 ,
15971598 } ;
15981599
15991600 let result = calculate_settlement_amount ( & ctx) . unwrap ( ) ;
16001601 assert_eq ! ( result. direction, SettlementDirection :: FromLpPool ) ;
1601- assert_eq ! ( result. amount_transferred, 1000 ) ; // Limited by LP balance
1602+ assert_eq ! (
1603+ result. amount_transferred,
1604+ 1000 * QUOTE_PRECISION_U64 - QUOTE_PRECISION_U64
1605+ ) ; // Limited by LP balance
16021606 }
16031607
16041608 #[ test]
@@ -1809,17 +1813,20 @@ mod settle_tests {
18091813 fn test_exact_boundary_settlements ( ) {
18101814 // Test when quote_owed exactly equals LP balance
18111815 let ctx = SettlementContext {
1812- quote_owed_from_lp : 1000 ,
1813- quote_constituent_token_balance : 1000 ,
1814- fee_pool_balance : 500 ,
1815- pnl_pool_balance : 300 ,
1816+ quote_owed_from_lp : 1000 * QUOTE_PRECISION_I64 ,
1817+ quote_constituent_token_balance : 1000 * QUOTE_PRECISION_U64 ,
1818+ fee_pool_balance : 500 * QUOTE_PRECISION ,
1819+ pnl_pool_balance : 300 * QUOTE_PRECISION ,
18161820 quote_market : & create_mock_spot_market ( ) ,
1817- max_settle_quote_amount : 10000 ,
1821+ max_settle_quote_amount : 10000 * QUOTE_PRECISION_U64 ,
18181822 } ;
18191823
18201824 let result = calculate_settlement_amount ( & ctx) . unwrap ( ) ;
18211825 assert_eq ! ( result. direction, SettlementDirection :: FromLpPool ) ;
1822- assert_eq ! ( result. amount_transferred, 1000 ) ;
1826+ assert_eq ! (
1827+ result. amount_transferred,
1828+ 1000 * QUOTE_PRECISION_U64 - QUOTE_PRECISION_U64
1829+ ) ; // Leave QUOTE PRECISION
18231830
18241831 // Test when negative quote_owed exactly equals total pool balance
18251832 let ctx = SettlementContext {
@@ -1852,7 +1859,7 @@ mod settle_tests {
18521859
18531860 let result = calculate_settlement_amount ( & ctx) . unwrap ( ) ;
18541861 assert_eq ! ( result. direction, SettlementDirection :: FromLpPool ) ;
1855- assert_eq ! ( result. amount_transferred, 1 ) ;
1862+ assert_eq ! ( result. amount_transferred, 0 ) ; // Cannot transfer if less than QUOTE_PRECISION
18561863
18571864 // Test with minimal negative amount
18581865 let ctx = SettlementContext {
@@ -2052,17 +2059,17 @@ mod settle_tests {
20522059 #[ test]
20532060 fn test_lp_to_perp_capped_with_max ( ) {
20542061 let ctx = SettlementContext {
2055- quote_owed_from_lp : 1100 ,
2056- quote_constituent_token_balance : 2000 ,
2062+ quote_owed_from_lp : 1100 * QUOTE_PRECISION_I64 ,
2063+ quote_constituent_token_balance : 2000 * QUOTE_PRECISION_U64 ,
20572064 fee_pool_balance : 0 , // No fee pool
2058- pnl_pool_balance : 1200 ,
2065+ pnl_pool_balance : 1200 * QUOTE_PRECISION ,
20592066 quote_market : & create_mock_spot_market ( ) ,
2060- max_settle_quote_amount : 1000 ,
2067+ max_settle_quote_amount : 1000 * QUOTE_PRECISION_U64 ,
20612068 } ;
20622069
20632070 let result = calculate_settlement_amount ( & ctx) . unwrap ( ) ;
20642071 assert_eq ! ( result. direction, SettlementDirection :: FromLpPool ) ;
2065- assert_eq ! ( result. amount_transferred, 1000 ) ;
2072+ assert_eq ! ( result. amount_transferred, 1000 * QUOTE_PRECISION_U64 ) ; // Leave QUOTE PRECISION in the balance
20662073 assert_eq ! ( result. fee_pool_used, 0 ) ;
20672074 assert_eq ! ( result. pnl_pool_used, 0 ) ;
20682075 }
0 commit comments