@@ -84,21 +84,54 @@ mod get_margin_ratio {
8484 let margin_ratio_initial = perp_market
8585 . get_margin_ratio ( BASE_PRECISION , MarginRequirementType :: Initial , true )
8686 . unwrap ( ) ;
87+ assert_eq ! ( margin_ratio_initial, MARGIN_PRECISION / 50 ) ;
8788
8889 let margin_ratio_maintenance = perp_market
8990 . get_margin_ratio ( BASE_PRECISION , MarginRequirementType :: Maintenance , true )
9091 . unwrap ( ) ;
9192
93+ assert_eq ! ( margin_ratio_maintenance, MARGIN_PRECISION / 100 ) ;
94+
9295 let margin_ratio_fill = perp_market
9396 . get_margin_ratio ( BASE_PRECISION , MarginRequirementType :: Fill , true )
9497 . unwrap ( ) ;
9598
96- assert_eq ! ( margin_ratio_initial, MARGIN_PRECISION / 50 ) ;
9799 assert_eq ! (
98100 margin_ratio_fill,
99101 ( MARGIN_PRECISION / 50 + MARGIN_PRECISION / 100 ) / 2
100102 ) ;
101- assert_eq ! ( margin_ratio_maintenance, MARGIN_PRECISION / 100 ) ;
103+ }
104+
105+ #[ test]
106+ fn smart_hlm_size_loop ( ) {
107+ let perp_market = PerpMarket {
108+ margin_ratio_initial : MARGIN_PRECISION / 20 ,
109+ margin_ratio_maintenance : MARGIN_PRECISION / 33 ,
110+ high_leverage_margin_ratio_initial : ( MARGIN_PRECISION / 100 ) as u16 ,
111+ high_leverage_margin_ratio_maintenance : ( MARGIN_PRECISION / 151 ) as u16 ,
112+ imf_factor : 50 ,
113+ ..PerpMarket :: default ( )
114+ } ;
115+
116+ let mut cnt = 0 ;
117+
118+ for i in 1 ..1_000 {
119+ let hlm_margin_ratio_initial = perp_market
120+ . get_margin_ratio ( BASE_PRECISION * i * 1000 , MarginRequirementType :: Initial , true )
121+ . unwrap ( ) ;
122+
123+ let margin_ratio_initial = perp_market
124+ . get_margin_ratio ( BASE_PRECISION * i * 1000 , MarginRequirementType :: Initial , false )
125+ . unwrap ( ) ;
126+
127+ if margin_ratio_initial != perp_market. margin_ratio_initial {
128+ // crate::msg!("{}", BASE_PRECISION * i);
129+ assert_eq ! ( hlm_margin_ratio_initial, margin_ratio_initial) ;
130+ cnt += 1 ;
131+ }
132+ }
133+
134+ assert_eq ! ( cnt, 959_196 / 1_000 ) ;
102135 }
103136
104137 #[ test]
@@ -112,6 +145,12 @@ mod get_margin_ratio {
112145 ..PerpMarket :: default ( )
113146 } ;
114147
148+ let normal_margin_ratio_initial = perp_market
149+ . get_margin_ratio ( BASE_PRECISION * 1000000 , MarginRequirementType :: Initial , false )
150+ . unwrap ( ) ;
151+
152+ assert_eq ! ( normal_margin_ratio_initial, 1300 ) ;
153+
115154 let hlm_margin_ratio_initial = perp_market
116155 . get_margin_ratio ( BASE_PRECISION / 10 , MarginRequirementType :: Initial , true )
117156 . unwrap ( ) ;
@@ -138,8 +177,6 @@ mod get_margin_ratio {
138177 . unwrap ( ) ;
139178 assert_eq ! ( hlm_margin_ratio_maint, 67 ) ; // hardly changed
140179
141-
142-
143180 let hlm_margin_ratio_maint = perp_market
144181 . get_margin_ratio (
145182 BASE_PRECISION * 300000 ,
0 commit comments