1use sp_std::vec;23use frame_benchmarking::{benchmarks, account};4use frame_system::RawOrigin;5use frame_support::{6 traits::{Currency, Get},7 BoundedVec,8};910use up_data_structs::*;1112use super::*;1314const SEED: u32 = 1;1516fn create_data<S: Get<u32>>() -> BoundedVec<u8, S> {17 vec![b'A'; S::get() as usize].try_into().expect("size == S")18}1920fn create_u32_array<S: Get<u32>>() -> BoundedVec<u32, S> {21 vec![0; S::get() as usize].try_into().expect("size == S")22}2324fn create_max_part(id: RmrkSlotId) -> RmrkPartType {25 RmrkPartType::SlotPart(RmrkSlotPart {26 id,27 equippable: RmrkEquippableList::Custom(create_u32_array()),28 src: create_data(),29 z: 1,30 })31}3233fn create_parts_array<S: Get<u32>>(num: u32) -> BoundedVec<RmrkPartType, S> {34 let mut parts: BoundedVec<RmrkPartType, S> = vec![].try_into().expect("0 <= S");3536 for i in 0..num {37 parts.try_push(create_max_part(i)).expect("num <= S");38 }3940 parts41}4243fn create_max_theme_property() -> RmrkThemeProperty {44 RmrkThemeProperty {45 key: create_data(),46 value: create_data(),47 }48}4950fn create_theme_properties_array<S: Get<u32>>(num: u32) -> BoundedVec<RmrkThemeProperty, S> {51 vec![create_max_theme_property(); num as usize]52 .try_into()53 .expect("num <= S")54}5556fn create_max_theme(name: RmrkString, props_num: u32) -> RmrkBoundedTheme {57 RmrkBoundedTheme {58 name,59 properties: create_theme_properties_array(props_num),60 inherit: false,61 }62}6364benchmarks! {65 create_base {66 let b in 0..RmrkPartsLimit::get();6768 let caller = account("caller", 0, SEED);69 <T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());7071 let base_type = create_data();72 let symbol = create_data();73 let parts = create_parts_array(b);74 }: _(RawOrigin::Signed(caller), base_type, symbol, parts)7576 theme_add {77 let b in 0..MaxPropertiesPerTheme::get();7879 let caller = account("caller", 0, SEED);80 <T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());8182 let base_type = create_data();83 let symbol = create_data();84 let parts = create_parts_array(0);8586 <Pallet<T>>::create_base(RawOrigin::Signed(caller.clone()).into(), base_type, symbol, parts)?;87 let base_id = 1;888990 let default_theme_name = b"default".to_vec().try_into().expect("default is a valid name; qed");91 let default_theme = create_max_theme(default_theme_name, 0);9293 <Pallet<T>>::theme_add(RawOrigin::Signed(caller.clone()).into(), base_id, default_theme)?;9495 let theme = create_max_theme(create_data(), b);96 }: _(RawOrigin::Signed(caller), base_id, theme)9798 equippable {99 let caller = account("caller", 0, SEED);100 <T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());101102 let base_id = 1;103 let slot_id = 42;104105 let base_type = create_data();106 let symbol = create_data();107 let parts = vec! {108 RmrkPartType::SlotPart(RmrkSlotPart {109 id: slot_id,110 equippable: RmrkEquippableList::All,111 src: create_data(),112 z: 1,113 })114 }.try_into().expect("1 <= RmrkPartsLimit");115116 <Pallet<T>>::create_base(RawOrigin::Signed(caller.clone()).into(), base_type, symbol, parts)?;117118 let equippables = RmrkEquippableList::Custom(create_u32_array());119 }: _(RawOrigin::Signed(caller), base_id, slot_id, equippables)120}