-
Notifications
You must be signed in to change notification settings - Fork 300
Expand file tree
/
Copy pathbenchmarking.rs
More file actions
68 lines (55 loc) · 1.89 KB
/
Copy pathbenchmarking.rs
File metadata and controls
68 lines (55 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
pub use crate::*;
use frame_benchmarking::v2::*;
use frame_support::assert_ok;
use frame_system::{Pallet as System, RawOrigin};
/// Helper trait for benchmarking.
pub trait BenchmarkHelper<OracleKey, OracleValue, L: Get<u32>> {
/// Returns a list of `(oracle_key, oracle_value)` pairs to be used for
/// benchmarking.
///
/// NOTE: User should ensure to at least submit two values, otherwise the
/// benchmark linear analysis might fail.
fn get_currency_id_value_pairs() -> BoundedVec<(OracleKey, OracleValue), L>;
}
impl<OracleKey, OracleValue, L: Get<u32>> BenchmarkHelper<OracleKey, OracleValue, L> for () {
fn get_currency_id_value_pairs() -> BoundedVec<(OracleKey, OracleValue), L> {
BoundedVec::default()
}
}
#[instance_benchmarks]
mod benchmarks {
use super::*;
#[benchmark]
fn feed_values(x: Linear<0, { T::BenchmarkHelper::get_currency_id_value_pairs().len() as u32 }>) {
// Register the caller
let caller: T::AccountId = whitelisted_caller();
T::Members::add(&caller);
let values = T::BenchmarkHelper::get_currency_id_value_pairs()[..x as usize]
.to_vec()
.try_into()
.expect("Must succeed since at worst the length remained the same.");
#[extrinsic_call]
_(RawOrigin::Signed(caller.clone()), values);
assert!(HasDispatched::<T, I>::get().contains(&caller));
}
#[benchmark]
fn on_finalize() {
// Register the caller
let caller: T::AccountId = whitelisted_caller();
T::Members::add(&caller);
// Feed some values before running `on_finalize` hook
System::<T>::set_block_number(1u32.into());
let values = T::BenchmarkHelper::get_currency_id_value_pairs();
assert_ok!(Pallet::<T, I>::feed_values(RawOrigin::Signed(caller).into(), values));
#[block]
{
Pallet::<T, I>::on_finalize(System::<T>::block_number());
}
assert!(!HasDispatched::<T, I>::exists());
}
impl_benchmark_test_suite! {
Pallet,
crate::mock::new_test_ext(),
crate::mock::Test,
}
}