@@ -56,7 +56,7 @@ mod benchmarks {
5656 }
5757
5858 fn set_benchmark_params < T : Config < I > , I : ' static > ( ) -> Result < ( ) , BenchmarkError > {
59- let max_rank = T :: MaxRank :: get ( ) . try_into ( ) . unwrap ( ) ;
59+ let max_rank = T :: MaxRank :: get ( ) as usize ;
6060 let params = ParamsType {
6161 active_salary : BoundedVec :: try_from ( vec ! [ 100u32 . into( ) ; max_rank] ) . unwrap ( ) ,
6262 passive_salary : BoundedVec :: try_from ( vec ! [ 10u32 . into( ) ; max_rank] ) . unwrap ( ) ,
@@ -71,7 +71,7 @@ mod benchmarks {
7171
7272 #[ benchmark]
7373 fn set_params ( ) -> Result < ( ) , BenchmarkError > {
74- let max_rank = T :: MaxRank :: get ( ) . try_into ( ) . unwrap ( ) ;
74+ let max_rank = T :: MaxRank :: get ( ) as usize ;
7575 let params = ParamsType {
7676 active_salary : BoundedVec :: try_from ( vec ! [ 100u32 . into( ) ; max_rank] ) . unwrap ( ) ,
7777 passive_salary : BoundedVec :: try_from ( vec ! [ 10u32 . into( ) ; max_rank] ) . unwrap ( ) ,
@@ -89,7 +89,7 @@ mod benchmarks {
8989
9090 #[ benchmark]
9191 fn set_partial_params ( ) -> Result < ( ) , BenchmarkError > {
92- let max_rank = T :: MaxRank :: get ( ) . try_into ( ) . unwrap ( ) ;
92+ let max_rank = T :: MaxRank :: get ( ) as usize ;
9393
9494 // Set up the initial default state for the Params storage
9595 let params = ParamsType {
@@ -149,19 +149,22 @@ mod benchmarks {
149149 fn bump_demote ( ) -> Result < ( ) , BenchmarkError > {
150150 set_benchmark_params :: < T , I > ( ) ?;
151151
152- let member = make_member :: < T , I > ( 2 ) ?;
152+ let initial_rank = T :: MaxRank :: get ( ) ;
153+
154+ let member = make_member :: < T , I > ( initial_rank) ?;
153155
154156 // Set it to the max value to ensure that any possible auto-demotion period has passed.
155157 frame_system:: Pallet :: < T > :: set_block_number ( BlockNumberFor :: < T > :: max_value ( ) ) ;
156158 ensure_evidence :: < T , I > ( & member) ?;
159+
157160 assert ! ( Member :: <T , I >:: contains_key( & member) ) ;
158- assert_eq ! ( T :: Members :: rank_of( & member) , Some ( 2 ) ) ;
161+ assert_eq ! ( T :: Members :: rank_of( & member) , Some ( initial_rank ) ) ;
159162
160163 #[ extrinsic_call]
161164 CoreFellowship :: < T , I > :: bump ( RawOrigin :: Signed ( member. clone ( ) ) , member. clone ( ) ) ;
162165
163166 assert ! ( Member :: <T , I >:: contains_key( & member) ) ;
164- assert_eq ! ( T :: Members :: rank_of( & member) , Some ( 1 ) ) ;
167+ assert_eq ! ( T :: Members :: rank_of( & member) , Some ( initial_rank . saturating_sub ( 1 ) ) ) ;
165168 assert ! ( !MemberEvidence :: <T , I >:: contains_key( & member) ) ;
166169 Ok ( ( ) )
167170 }
@@ -194,36 +197,51 @@ mod benchmarks {
194197 fn promote ( ) -> Result < ( ) , BenchmarkError > {
195198 // Ensure that the `min_promotion_period` wont get in our way.
196199 let mut params = Params :: < T , I > :: get ( ) ;
197- let max_rank = T :: MaxRank :: get ( ) . try_into ( ) . unwrap ( ) ;
198- params. min_promotion_period = BoundedVec :: try_from ( vec ! [ Zero :: zero( ) ; max_rank] ) . unwrap ( ) ;
200+ let max_rank = T :: MaxRank :: get ( ) ;
201+
202+ // Get minimum promotion period.
203+ params. min_promotion_period =
204+ BoundedVec :: try_from ( vec ! [ Zero :: zero( ) ; max_rank as usize ] ) . unwrap ( ) ;
199205 Params :: < T , I > :: put ( & params) ;
200206
201- let member = make_member :: < T , I > ( 1 ) ?;
207+ // Start at rank 0 to allow at least one promotion.
208+ let current_rank = 0 ;
209+ let member = make_member :: < T , I > ( current_rank) ?;
202210
203- // Set it to the max value to ensure that any possible auto-demotion period has passed.
211+ // Set `to_rank` dynamically based on `max_rank`.
212+ let to_rank = ( current_rank + 1 ) . min ( max_rank) ; // Ensure `to_rank` <= `max_rank`.
213+
214+ // Set block number to avoid auto-demotion.
204215 frame_system:: Pallet :: < T > :: set_block_number ( BlockNumberFor :: < T > :: max_value ( ) ) ;
205216 ensure_evidence :: < T , I > ( & member) ?;
206217
207218 #[ extrinsic_call]
208- _ ( RawOrigin :: Root , member. clone ( ) , 2u8 . into ( ) ) ;
219+ _ ( RawOrigin :: Root , member. clone ( ) , to_rank ) ;
209220
210- assert_eq ! ( T :: Members :: rank_of( & member) , Some ( 2 ) ) ;
221+ // Assert the new rank matches `to_rank` (not a hardcoded value).
222+ assert_eq ! ( T :: Members :: rank_of( & member) , Some ( to_rank) ) ;
211223 assert ! ( !MemberEvidence :: <T , I >:: contains_key( & member) ) ;
212224 Ok ( ( ) )
213225 }
214226
215227 /// Benchmark the `promote_fast` extrinsic to promote someone up to `r`.
216228 #[ benchmark]
217- fn promote_fast ( r : Linear < 1 , { T :: MaxRank :: get ( ) as u32 } > ) -> Result < ( ) , BenchmarkError > {
218- let r = r. try_into ( ) . expect ( "r is too large" ) ;
229+ fn promote_fast (
230+ r : Linear < 1 , { ConvertU16ToU32 :: < T :: MaxRank > :: get ( ) } > ,
231+ ) -> Result < ( ) , BenchmarkError > {
232+ // Get target rank for promotion.
233+ let max_rank = T :: MaxRank :: get ( ) ;
234+ let target_rank = ( r as u16 ) . min ( max_rank) ;
235+
236+ // Begin with Candidate.
219237 let member = make_member :: < T , I > ( 0 ) ?;
220238
221239 ensure_evidence :: < T , I > ( & member) ?;
222240
223241 #[ extrinsic_call]
224- _ ( RawOrigin :: Root , member. clone ( ) , r ) ;
242+ _ ( RawOrigin :: Root , member. clone ( ) , target_rank ) ;
225243
226- assert_eq ! ( T :: Members :: rank_of( & member) , Some ( r ) ) ;
244+ assert_eq ! ( T :: Members :: rank_of( & member) , Some ( target_rank ) ) ;
227245 assert ! ( !MemberEvidence :: <T , I >:: contains_key( & member) ) ;
228246 Ok ( ( ) )
229247 }
0 commit comments