@@ -1226,9 +1226,91 @@ mod tests {
12261226 }
12271227 }
12281228
1229+ /// This tests replicates calculations from Suilend's
1230+ /// "test_pool_reward_manager_multiple_rewards" test.
12291231 #[ test]
12301232 fn it_tests_pool_reward_manager_multiple_rewards ( ) {
1231- // TODO: rewrite Suilend "test_pool_reward_manager_multiple_rewards"
1233+ let usdc = Pubkey :: new_unique ( ) ; // reserve pubkey
1234+ let slnd_vault1 = Pubkey :: new_unique ( ) ; // where rewards are stored
1235+ let slnd_vault2 = Pubkey :: new_unique ( ) ; // where rewards are stored
1236+
1237+ let mut clock = Clock {
1238+ unix_timestamp : 0 ,
1239+ ..Default :: default ( )
1240+ } ;
1241+
1242+ let mut pool_reward_manager = PoolRewardManager :: default ( ) ;
1243+ {
1244+ // setup a reward that starts now and lasts for 20 days
1245+
1246+ pool_reward_manager
1247+ . add_pool_reward (
1248+ slnd_vault1,
1249+ 0 ,
1250+ 20 * MILLISECONDS_IN_DAY ,
1251+ 100 * 1_000_000 ,
1252+ & clock,
1253+ )
1254+ . expect ( "It adds pool reward" ) ;
1255+
1256+ // and another reward that starts in 10 days and lasts for 10 days
1257+
1258+ pool_reward_manager
1259+ . add_pool_reward (
1260+ slnd_vault2,
1261+ 10 * MILLISECONDS_IN_DAY ,
1262+ 20 * MILLISECONDS_IN_DAY ,
1263+ 100 * 1_000_000 ,
1264+ & clock,
1265+ )
1266+ . expect ( "It adds pool reward" ) ;
1267+ }
1268+
1269+ let mut user_reward_manager_1 = UserRewardManager :: new ( usdc, PositionKind :: Deposit , & clock) ;
1270+ {
1271+ // setup user reward manager with 100/100 shares
1272+
1273+ user_reward_manager_1
1274+ . populate ( & mut pool_reward_manager, & clock)
1275+ . expect ( "It populates user reward manager" ) ;
1276+ user_reward_manager_1. set_share ( & mut pool_reward_manager, 100 ) ;
1277+ }
1278+
1279+ clock. unix_timestamp = 15 * MILLISECONDS_IN_DAY as i64 ;
1280+
1281+ let mut user_reward_manager_2 = UserRewardManager :: new ( usdc, PositionKind :: Deposit , & clock) ;
1282+ {
1283+ // setup user reward manager with 100/200 shares
1284+
1285+ user_reward_manager_2
1286+ . populate ( & mut pool_reward_manager, & clock)
1287+ . expect ( "It populates user reward manager" ) ;
1288+ user_reward_manager_2. set_share ( & mut pool_reward_manager, 100 ) ;
1289+ }
1290+
1291+ {
1292+ clock. unix_timestamp = 30 * MILLISECONDS_IN_DAY as i64 ;
1293+
1294+ let claimed_slnd = user_reward_manager_1
1295+ . claim_rewards ( & mut pool_reward_manager, slnd_vault1, & clock)
1296+ . expect ( "It claims rewards" ) ;
1297+ assert_eq ! ( claimed_slnd, 87_500_000 ) ;
1298+
1299+ let claimed_slnd = user_reward_manager_1
1300+ . claim_rewards ( & mut pool_reward_manager, slnd_vault2, & clock)
1301+ . expect ( "It claims rewards" ) ;
1302+ assert_eq ! ( claimed_slnd, 75 * 1_000_000 ) ;
1303+
1304+ let claimed_slnd = user_reward_manager_2
1305+ . claim_rewards ( & mut pool_reward_manager, slnd_vault1, & clock)
1306+ . expect ( "It claims rewards" ) ;
1307+ assert_eq ! ( claimed_slnd, 12_500_000 ) ;
1308+
1309+ let claimed_slnd = user_reward_manager_2
1310+ . claim_rewards ( & mut pool_reward_manager, slnd_vault2, & clock)
1311+ . expect ( "It claims rewards" ) ;
1312+ assert_eq ! ( claimed_slnd, 25 * 1_000_000 ) ;
1313+ }
12321314 }
12331315
12341316 #[ test]
0 commit comments