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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
use rand::distributions::uniform::SampleRange;
use crate::{traits::Random, random_number};
/// Generates a vector of items that implement the `Random` trait.
///
/// ### Examples
///
/// ```
/// use cs_utils::test::random_vector;
/// use cs_utils::traits::Random;
/// use cs_utils::{random_number, random_str};
///
/// #[derive(Debug)]
/// struct SomeStruct {
/// id: u16,
/// name: String,
/// }
///
/// impl Random for SomeStruct {
/// fn random() -> Self {
/// return SomeStruct {
/// id: random_number(0..=u16::MAX),
/// name: random_str(10),
/// };
/// }
/// }
///
/// let items_count = random_number(3..=5);
/// let result: Vec<SomeStruct> = random_vector(items_count);
///
/// assert_eq!(
/// result.len() as u32,
/// items_count,
/// "Must create {} items.", &items_count,
/// );
/// println!("{:?}", &result);
/// ```
pub fn random_vector<T: Random>(items_count: u32) -> Vec<T> {
let mut result = vec![];
let mut i = items_count;
while i > 0 {
result.push(T::random());
i -= 1;
}
return result;
}
/// Generates a vector of items that implement the `Random` trait.
///
/// ### Examples
///
/// ```
/// use cs_utils::test::random_vector_rg;
/// use cs_utils::traits::Random;
/// use cs_utils::{random_number, random_str};
///
/// #[derive(Debug)]
/// struct SomeStruct {
/// id: u16,
/// name: String,
/// }
///
/// impl Random for SomeStruct {
/// fn random() -> Self {
/// return SomeStruct {
/// id: random_number(0..=u16::MAX),
/// name: random_str(10),
/// };
/// }
/// }
///
/// let result: Vec<SomeStruct> = random_vector_rg(3..7);
///
/// assert!(
/// result.len() >= 3,
/// "Must create at least 3 items.",
/// );
///
/// assert!(
/// result.len() < 7,
/// "Must create at most 6 items.",
/// );
///
/// println!("{:?}", &result);
/// ```
pub fn random_vector_rg<T: Random, R: SampleRange<u32>>(range: R) -> Vec<T> {
let messages_count = random_number(range);
return random_vector::<T>(messages_count);
}