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}