bitbelay_tests/
performance.rs

1//! Performance tests.
2
3use std::hash::BuildHasher;
4
5use bitbelay_report::section;
6
7use crate::r#trait::Test as _;
8
9pub mod speed;
10
11/// A type of performance test.
12#[derive(Debug)]
13pub enum Test<'a, H: BuildHasher> {
14    /// Speed test.
15    Speed(speed::Test<'a, H>),
16}
17
18impl<'a, H: BuildHasher> Test<'a, H> {
19    /// Gets a reference to a [`speed::Test`] wrapped in [`Some`] if
20    /// the [`Test`] is a [`Test::Speed`]. Else, returns [`None`].
21    ///
22    /// # Examples
23    ///
24    /// ```
25    /// use std::hash::RandomState;
26    /// use std::num::NonZeroUsize;
27    ///
28    /// use bitbelay_providers::ascii::AlphanumericProvider;
29    /// use bitbelay_tests::performance::speed;
30    /// use bitbelay_tests::performance::Test;
31    /// use byte_unit::Byte;
32    ///
33    /// let provider = Box::new(AlphanumericProvider::new(10));
34    ///
35    /// let hasher = RandomState::new();
36    /// let mut test = Test::Speed(speed::Test::new(
37    ///     &hasher,
38    ///     provider,
39    ///     "10 KiB".parse::<Byte>().unwrap(),
40    ///     0.05,
41    /// ));
42    ///
43    /// assert!(matches!(test.as_speed_test(), Some(_)));
44    ///
45    /// # Ok::<(), Box<dyn std::error::Error>>(())
46    /// ```
47    pub fn as_speed_test(&self) -> Option<&speed::Test<'a, H>> {
48        match self {
49            Test::Speed(test) => Some(test),
50        }
51    }
52
53    /// Consumes the [`Test`] and returns a [`speed::Test`] wrapped in
54    /// [`Some`] if the [`Test`] is a [`Test::Speed`]. Else, returns
55    /// [`None`].
56    ///
57    /// # Examples
58    ///
59    /// ```
60    /// use std::hash::RandomState;
61    /// use std::num::NonZeroUsize;
62    ///
63    /// use bitbelay_providers::ascii::AlphanumericProvider;
64    /// use bitbelay_tests::performance::speed;
65    /// use bitbelay_tests::performance::Test;
66    /// use byte_unit::Byte;
67    ///
68    /// let provider = Box::new(AlphanumericProvider::new(10));
69    ///
70    /// let hasher = RandomState::new();
71    /// let mut test = Test::Speed(speed::Test::new(
72    ///     &hasher,
73    ///     provider,
74    ///     "10 KiB".parse::<Byte>().unwrap(),
75    ///     0.05,
76    /// ));
77    ///
78    /// assert!(matches!(test.into_speed_test(), Some(_)));
79    ///
80    /// # Ok::<(), Box<dyn std::error::Error>>(())
81    /// ```
82    pub fn into_speed_test(self) -> Option<speed::Test<'a, H>> {
83        match self {
84            Test::Speed(test) => Some(test),
85        }
86    }
87
88    /// Generates a report section for the [`Test`].
89    ///
90    /// # Examples
91    ///
92    /// ```
93    /// use std::hash::RandomState;
94    /// use std::num::NonZeroUsize;
95    ///
96    /// use bitbelay_providers::ascii::AlphanumericProvider;
97    /// use bitbelay_tests::performance::speed;
98    /// use bitbelay_tests::performance::Test;
99    /// use byte_unit::Byte;
100    ///
101    /// let provider = Box::new(AlphanumericProvider::new(10));
102    ///
103    /// let hasher = RandomState::new();
104    /// let mut test = Test::Speed(speed::Test::new(
105    ///     &hasher,
106    ///     provider,
107    ///     "10 KiB".parse::<Byte>().unwrap(),
108    ///     0.05,
109    /// ));
110    ///
111    /// let section = test.report_section();
112    /// // Do something with `section`.
113    ///
114    /// # Ok::<(), Box<dyn std::error::Error>>(())
115    /// ```
116    pub fn report_section(&self) -> section::Test {
117        match self {
118            Test::Speed(test) => test.report_section(),
119        }
120    }
121}