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}