Skip to content

Commit e988e8b

Browse files
committed
program: add cargo tests for interest rate
1 parent 3937df8 commit e988e8b

File tree

1 file changed

+55
-1
lines changed
  • programs/drift/src/controller/spot_balance

1 file changed

+55
-1
lines changed

programs/drift/src/controller/spot_balance/tests.rs

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use crate::math::constants::{
1818
use crate::math::margin::{
1919
calculate_margin_requirement_and_total_collateral_and_liability_info, MarginRequirementType,
2020
};
21-
use crate::math::spot_balance::calculate_borrow_rate;
21+
use crate::math::spot_balance::{calculate_spot_market_utilization, calculate_borrow_rate};
2222
use crate::math::spot_withdraw::{
2323
calculate_max_borrow_token_amount, calculate_min_deposit_token_amount,
2424
calculate_token_utilization_limits, check_withdraw_limits,
@@ -53,6 +53,60 @@ pub fn check_perp_market_valid(
5353
Ok(())
5454
}
5555

56+
57+
58+
#[test]
59+
fn test_meme_interest_rate() {
60+
let perp_market_map = PerpMarketMap::empty();
61+
62+
let meme_market_str = String::from("ZLEIa6hBQSevW/X04aQW147VpUQWOD4EIug/dsSiOD9fb0zJ0wWcoS7j6sf54CJSzlSd9qLpWca7pkLsD9feF5s7APU7gn3iHYzPh6wBR7rnVuuWOi72JEyWkVaajsCPACCi64+9taHIXe4QF4hhlYiPl09UhcN3ox28V0LjKljDOQldWcbLBFBFTkdVICAgICAgICAgICAgICAgICAgICAgICAgICAgoSUAAAAAAAABAAAAAAAAAC0AAAAAAAAAoSUAAAAAAAChJQAAAAAAAGjJXGgAAAAAWLEAAAAAAABYsQAAAAAAAFixAAAAAAAAWLEAAAAAAAAAAAAAAAAAAElUtwEAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENwysOIJBM0GAg6e0k5xZNDmGwlyo8khzcIbPkfiODoiEpVqmAAAAAAAAAAAAAAAD0eROlcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCMRAAAAAAC6bl1oAAAAABAOAAAAAAAAoIYBAFDDAAAAAAAAAAAAAAAAAAAAAAAAzw+vh+4i1wAAAAAAAAAAABomcsakZgAAAAAAAAAAAAAdZW5VAgAAAAAAAAAAAAAASCHPWAIAAAAAAAAAAAAAAHHfCgAAAAAAAAAAAAAAAACSFAAAAAAAAAAAAAAAAAAAACA9iHktAAAAYLeYbIgAAOd3NZr4NgAAo5FIlBoAAABvBwAAAAAAALpuXWgAAAAAum5daAAAAAAAAAAAAAAAAEBCDwAAAAAAZAAAAAAAAABAQg8AAAAAAAAAAAAAAAAAAQAAAAAAAAAiEgAAAAAAAMQJAACIEwAAXEQAAJg6AABkAAAA1DAAAIy5AABgrgoA8EkCAEBLTAAGAAAAHwABDAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDvfboCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=");
63+
64+
let mut decoded_bytes = base64::decode(meme_market_str).unwrap();
65+
let meme_market_bytes = decoded_bytes.as_mut_slice();
66+
67+
let key = Pubkey::default();
68+
let owner = Pubkey::from_str("dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH").unwrap();
69+
let mut lamports = 0;
70+
let meme_market_account_info =
71+
create_account_info(&key, true, &mut lamports, meme_market_bytes, &owner);
72+
73+
let spot_market_map = SpotMarketMap::load_multiple(
74+
vec![&meme_market_account_info],
75+
true,
76+
)
77+
.unwrap();
78+
79+
let mut meme_market = spot_market_map.get_ref_mut(&31).unwrap();
80+
81+
assert_eq!(meme_market.cumulative_borrow_interest, 10079904072);
82+
83+
let oracle_price_data = OraclePriceData {
84+
price: PRICE_PRECISION_I64/100,
85+
confidence: 1,
86+
delay: 0,
87+
has_sufficient_number_of_data_points: true,
88+
};
89+
90+
assert_eq!(meme_market.last_interest_ts, 1750953658);
91+
let utilization = calculate_spot_market_utilization(&meme_market).unwrap();
92+
93+
let rate = calculate_borrow_rate(&meme_market, utilization).unwrap();
94+
assert_eq!(utilization, 1874);
95+
assert_eq!(rate, 401);
96+
97+
let now = (meme_market.last_interest_ts + 3600 * 24 * 30) as i64;
98+
99+
update_spot_market_cumulative_interest(
100+
&mut meme_market,
101+
Some(&oracle_price_data),
102+
now,
103+
).unwrap();
104+
105+
assert_eq!(meme_market.cumulative_borrow_interest, 10080236295);
106+
107+
}
108+
109+
56110
#[test]
57111
fn test_daily_withdraw_limits() {
58112
let now = 0_i64;

0 commit comments

Comments
 (0)