1use crate::gen::{Gen, Gens};
2
3pub trait One
5where
6 Self: Sized, {
7 fn one() -> Gen<Self>;
12}
13
14impl One for i64 {
15 fn one() -> Gen<Self> {
20 Gens::one_i64()
21 }
22}
23
24impl One for u64 {
25 fn one() -> Gen<Self> {
30 Gens::one_u64()
31 }
32}
33
34impl One for i32 {
35 fn one() -> Gen<Self> {
40 Gens::one_i32()
41 }
42}
43
44impl One for u32 {
45 fn one() -> Gen<Self> {
50 Gens::one_u32()
51 }
52}
53
54impl One for i16 {
55 fn one() -> Gen<Self> {
60 Gens::one_i16()
61 }
62}
63
64impl One for u16 {
65 fn one() -> Gen<Self> {
70 Gens::one_u16()
71 }
72}
73
74impl One for i8 {
75 fn one() -> Gen<Self> {
80 Gens::one_i8()
81 }
82}
83
84impl One for u8 {
85 fn one() -> Gen<Self> {
90 Gens::one_u8()
91 }
92}
93
94impl One for char {
95 fn one() -> Gen<Self> {
100 Gens::one_char()
101 }
102}
103
104impl One for bool {
105 fn one() -> Gen<Self> {
110 Gens::one_bool()
111 }
112}
113
114impl One for f64 {
115 fn one() -> Gen<Self> {
120 Gens::one_f64()
121 }
122}
123
124impl One for f32 {
125 fn one() -> Gen<Self> {
130 Gens::one_f32()
131 }
132}
133
134#[cfg(test)]
135mod tests {
136 use super::*;
137 use crate::rng::RNG;
138 use std::env;
139
140 fn init() {
141 env::set_var("RUST_LOG", "info");
142 let _ = env_logger::builder().is_test(true).try_init();
143 }
144
145 fn new_rng() -> RNG {
146 RNG::new()
147 }
148
149 #[test]
150 fn test_one_i64() {
151 init();
152 let gen = <i64 as One>::one();
153 let (value, _) = gen.run(new_rng());
154 assert!(value >= i64::MIN && value <= i64::MAX);
155 }
156
157 #[test]
158 fn test_one_u64() {
159 init();
160 let gen = <u64 as One>::one();
161 let (value, _) = gen.run(new_rng());
162 assert!(value <= u64::MAX);
163 }
164
165 #[test]
166 fn test_one_i32() {
167 init();
168 let gen = <i32 as One>::one();
169 let (value, _) = gen.run(new_rng());
170 assert!(value >= i32::MIN && value <= i32::MAX);
171 }
172
173 #[test]
174 fn test_one_u32() {
175 init();
176 let gen = <u32 as One>::one();
177 let (value, _) = gen.run(new_rng());
178 assert!(value <= u32::MAX);
179 }
180
181 #[test]
182 fn test_one_i16() {
183 init();
184 let gen = <i16 as One>::one();
185 let (value, _) = gen.run(new_rng());
186 assert!(value >= i16::MIN && value <= i16::MAX);
187 }
188
189 #[test]
190 fn test_one_u16() {
191 init();
192 let gen = <u16 as One>::one();
193 let (value, _) = gen.run(new_rng());
194 assert!(value <= u16::MAX);
195 }
196
197 #[test]
198 fn test_one_i8() {
199 init();
200 let gen = <i8 as One>::one();
201 let (value, _) = gen.run(new_rng());
202 assert!(value >= i8::MIN && value <= i8::MAX);
203 }
204
205 #[test]
206 fn test_one_u8() {
207 init();
208 let gen = <u8 as One>::one();
209 let (value, _) = gen.run(new_rng());
210 assert!(value <= u8::MAX);
211 }
212
213 #[test]
214 fn test_one_char() {
215 init();
216 let gen = <char as One>::one();
217 let (value, _) = gen.run(new_rng());
218 assert!(value as u32 <= u8::MAX as u32);
219 }
220
221 #[test]
222 fn test_one_bool() {
223 init();
224 let gen = <bool as One>::one();
225 let (value, _) = gen.run(new_rng());
226 assert!(value == true || value == false);
227 }
228
229 #[test]
230 fn test_one_f64() {
231 init();
232 let gen = <f64 as One>::one();
233 let (value, _) = gen.run(new_rng());
234 assert!(!value.is_nan());
235 }
236
237 #[test]
238 fn test_one_f32() {
239 init();
240 let gen = <f32 as One>::one();
241 let (value, _) = gen.run(new_rng());
242 assert!(!value.is_nan());
243 }
244}