chinese_rand/raw/
fastrand_raw.rs

1use crate::RawGenerator;
2use std::ops::RangeInclusive;
3
4/// Implementation of [RawGenerator] based on [fastrand].
5pub struct FastRandGenerator;
6
7impl FastRandGenerator {
8    /// Creates a new instance of the generator.
9    ///
10    /// ```
11    /// use chinese_rand::*;
12    ///
13    /// //Normally, you won't set the seed, except in tests
14    /// //or any other context requiring predictability
15    /// fastrand::seed(90);
16    ///
17    /// let generator = FastRandGenerator::new();
18    /// let number = generator.u128(0..=50000);
19    ///     
20    /// assert_eq!(number, 29466);
21    /// ```
22    pub fn new() -> Self {
23        Self
24    }
25}
26
27/// [FastRandGenerator] can also be instantiated via its [Default] trait.
28///
29/// ```
30/// use chinese_rand::*;
31///
32/// fastrand::seed(90);
33///
34/// let generator = FastRandGenerator::default();
35/// let number = generator.u128(0..=50000);
36///      
37/// assert_eq!(number, 29466);
38/// ```
39impl Default for FastRandGenerator {
40    fn default() -> Self {
41        Self::new()
42    }
43}
44
45impl RawGenerator for FastRandGenerator {
46    /// ```
47    /// use chinese_rand::*;
48    ///
49    /// fastrand::seed(90);
50    ///
51    /// let generator = FastRandGenerator::new();
52    ///
53    /// let number = generator.u8(0..=u8::MAX);
54    /// assert_eq!(number, 177);
55    /// ```
56    fn u8(&self, range: RangeInclusive<u8>) -> u8 {
57        fastrand::u8(range)
58    }
59
60    /// ```
61    /// use chinese_rand::*;
62    ///
63    /// fastrand::seed(90);
64    ///
65    /// let generator = FastRandGenerator::new();
66    ///
67    /// let number = generator.u16(0..=u16::MAX);
68    /// assert_eq!(number, 51377);
69    /// ```
70    fn u16(&self, range: RangeInclusive<u16>) -> u16 {
71        fastrand::u16(range)
72    }
73
74    /// ```
75    /// use chinese_rand::*;
76    ///
77    /// fastrand::seed(90);
78    ///
79    /// let generator = FastRandGenerator::new();
80    ///
81    /// let number = generator.u32(0..=u32::MAX);
82    /// assert_eq!(number, 2982070449);
83    /// ```
84    fn u32(&self, range: RangeInclusive<u32>) -> u32 {
85        fastrand::u32(range)
86    }
87
88    /// ```
89    /// use chinese_rand::*;
90    ///
91    /// fastrand::seed(90);
92    ///
93    /// let generator = FastRandGenerator::new();
94    ///
95    /// let number = generator.u64(0..=u64::MAX);
96    /// assert_eq!(number, 10871161991276185777);
97    /// ```
98    fn u64(&self, range: RangeInclusive<u64>) -> u64 {
99        fastrand::u64(range)
100    }
101
102    /// ```
103    /// use chinese_rand::*;
104    ///
105    /// fastrand::seed(90);
106    ///
107    /// let generator = FastRandGenerator::new();
108    ///
109    /// let number = generator.u128(0..=u128::MAX);
110    /// assert_eq!(number, 200537543036910508246661533454648102841);
111    /// ```
112    fn u128(&self, range: RangeInclusive<u128>) -> u128 {
113        fastrand::u128(range)
114    }
115
116    /// ```
117    /// use chinese_rand::*;
118    ///
119    /// fastrand::seed(90);
120    ///
121    /// let generator = FastRandGenerator::new();
122    ///
123    /// let number = generator.i128(i128::MIN..=i128::MAX);
124    /// assert_eq!(number, -139744823884027955216713073977120108615);
125    /// ```
126    fn i128(&self, range: RangeInclusive<i128>) -> i128 {
127        fastrand::i128(range)
128    }
129
130    /// ```
131    /// use chinese_rand::*;
132    ///
133    /// fastrand::seed(90);
134    ///
135    /// let generator = FastRandGenerator::new();
136    ///
137    /// let random_bool = generator.bool();
138    /// assert_eq!(random_bool, false);
139    /// ```
140    fn bool(&self) -> bool {
141        fastrand::bool()
142    }
143}