random_number/
lib.rs

1/*!
2# Random Number
3
4Generate random numbers quickly.
5
6### The `random!` Marco
7
8```rust
9use random_number::random;
10
11let n: u8 = random!();
12println!("{}", n); // 0 ~ 255
13
14let n: f64 = random!();
15println!("{}", n); // 0.0 ~ 1.0
16
17let n: u8 = random!(..=10);
18println!("{}", n); // 0 ~ 10
19
20let n: u8 = random!(..=9);
21println!("{}", n); // 0 ~ 9
22
23let n: u8 = random!(10..);
24println!("{}", n); // 10 ~ 255
25
26let n: i8 = random!(-2..=12);
27println!("{}", n); // -2 ~ 12
28
29let n: u8 = random!(12, 20);
30println!("{}", n); // 12 ~ 20
31
32let n: u8 = random!(20, 12);
33println!("{}", n); // 12 ~ 20
34```
35
36The random number generator can be reused by adding it to the `random!` macro as the last argument.
37
38```rust
39use random_number::random;
40
41let mut rng = random_number::rand::thread_rng();
42
43let n: u8 = random!(rng);
44println!("{}", n); // 0 ~ 255
45
46let n: u8 = random!(..=10, rng);
47println!("{}", n); // 0 ~ 10
48
49let n: u8 = random!(20, 12, rng);
50println!("{}", n); // 12 ~ 20
51```
52
53### The `random_ranged` Function
54
55If the **range** is not literal, for example, a variable, `var_range`, storing an instance that implements the `RangeBounds` trait, the `var_range` variable cannot be used in the `random!` macro.
56
57```rust,ignore
58let var_range = 1..=10;
59
60let n: u8 = random_number::random!(var_range); // compile error
61```
62
63In this case, use the `random_ranged` function instead.
64
65```rust
66let var_range = 1..=10;
67
68let n: u8 = random_number::random_ranged(var_range);
69println!("{}", n); // 1 ~ 10
70```
71
72### The `random_fill!` Marco
73
74The `random_fill!` marco can be used to fill a slice with random numbers. The usage is like the `random!` macro. Just add a slice as the first argument when using the `random_fill!` macro.
75
76```rust
77let mut a = [0i8; 32];
78random_number::random_fill!(a, -2..=12);
79
80println!("{:?}", a);
81```
82
83### The `random_fill_ranged` Function
84
85```rust
86let var_range = 1..=10;
87
88let mut a = [0u8; 32];
89random_number::random_fill_ranged(&mut a, var_range);
90
91println!("{:?}", a);
92```
93*/
94pub extern crate rand;
95
96mod bounded;
97mod random_fill_functions;
98mod random_functions;
99
100pub use bounded::Bounded;
101use proc_macro_hack::proc_macro_hack;
102pub use random_fill_functions::*;
103pub use random_functions::*;
104/**
105Generate a random number.
106
107## Examples
108
109```rust
110# #![allow(unused_comparisons)]
111let f: f64 = random_number::random!();
112
113assert!(0.0 <= f && f <= 1.0);
114
115let i: u8 = random_number::random!(..);
116
117assert!(0 <= i && i <= 255);
118```
119
120```rust
121# #![allow(unused_comparisons)]
122use random_number::rand;
123
124let mut thread_rng = rand::thread_rng();
125
126let f: f64 = random_number::random!(thread_rng);
127
128assert!(0.0 <= f && f <= 1.0);
129
130let i: u8 = random_number::random!(.., thread_rng);
131
132assert!(0 <= i && i <= 255);
133```
134
135```rust
136# #![allow(unused_comparisons)]
137let i: u8 = random_number::random!(..=10);
138
139assert!(0 <= i && i <= 10);
140
141let i: i8 = random_number::random!(..=0);
142
143assert!(-128 <= i && i <= 0);
144```
145
146```rust
147# #![allow(unused_comparisons)]
148use random_number::rand;
149
150let mut thread_rng = rand::thread_rng();
151
152let i: u8 = random_number::random!(..=10, thread_rng);
153
154assert!(0 <= i && i <= 10);
155
156let i: i8 = random_number::random!(..=0, thread_rng);
157
158assert!(-128 <= i && i <= 0);
159```
160
161```rust
162# #![allow(unused_comparisons)]
163let i: u8 = random_number::random!(10..);
164
165assert!(10 <= i && i <= 255);
166
167let i: i8 = random_number::random!(0..);
168
169assert!(0 <= i && i <= 127);
170```
171
172```rust
173# #![allow(unused_comparisons)]
174use random_number::rand;
175
176let mut thread_rng = rand::thread_rng();
177
178let i: u8 = random_number::random!(10.., thread_rng);
179
180assert!(10 <= i && i <= 255);
181
182let i: i8 = random_number::random!(0.., thread_rng);
183
184assert!(0 <= i && i <= 127);
185```
186
187```rust
188# #![allow(unused_comparisons)]
189let i: u8 = random_number::random!(..10);
190
191assert!(0 <= i && i <= 9);
192
193let i: i8 = random_number::random!(..0);
194
195assert!(-128 <= i && i <= -1);
196```
197
198```rust
199# #![allow(unused_comparisons)]
200use random_number::rand;
201
202let mut thread_rng = rand::thread_rng();
203
204let i: u8 = random_number::random!(..10, thread_rng);
205
206assert!(0 <= i && i <= 9);
207
208let i: i8 = random_number::random!(..0, thread_rng);
209
210assert!(-128 <= i && i <= -1);
211```
212
213```rust
214let i: u8 = random_number::random!(1..10);
215
216assert!(1 <= i && i <= 10);
217
218let i: i8 = random_number::random!(-2..=12);
219
220assert!(-2 <= i && i <= 12);
221```
222
223```rust
224use random_number::rand;
225
226let mut thread_rng = rand::thread_rng();
227
228let i: u8 = random_number::random!(1..10, thread_rng);
229
230assert!(1 <= i && i <= 10);
231
232let i: i8 = random_number::random!(-2..=12, thread_rng);
233
234assert!(-2 <= i && i <= 12);
235```
236
237```rust
238let i: u8 = random_number::random!(12, 20);
239
240assert!(12 <= i && i <= 20);
241
242let i: i8 = random_number::random!(20, 12);
243
244assert!(12 <= i && i <= 20);
245```
246
247```rust
248use random_number::rand;
249
250let mut thread_rng = rand::thread_rng();
251
252let i: u8 = random_number::random!(12, 20, thread_rng);
253
254assert!(12 <= i && i <= 20);
255
256let i: i8 = random_number::random!(20, 12, thread_rng);
257
258assert!(12 <= i && i <= 20);
259```
260*/
261#[proc_macro_hack]
262pub use random_number_macro_impl::random;
263/**
264Generate random numbers.
265
266## Examples
267
268```rust
269# #![allow(unused_comparisons)]
270let mut f = [0f64; 100];
271random_number::random_fill!(f);
272
273for f in f.iter().copied() {
274    assert!(0.0 <= f && f <= 1.0);
275}
276
277let mut i = [0u8; 100];
278random_number::random_fill!(i);
279
280for i in i.iter().copied() {
281    assert!(0 <= i && i <= 255);
282}
283```
284
285```rust
286# #![allow(unused_comparisons)]
287use random_number::rand;
288
289let mut thread_rng = rand::thread_rng();
290
291let mut f = [0f64; 100];
292random_number::random_fill!(f, thread_rng);
293
294for f in f.iter().copied() {
295    assert!(0.0 <= f && f <= 1.0);
296}
297
298let mut i = [0u8; 100];
299random_number::random_fill!(i, thread_rng);
300
301for i in i.iter().copied() {
302    assert!(0 <= i && i <= 255);
303}
304```
305
306```rust
307# #![allow(unused_comparisons)]
308let mut i = [0u8; 100];
309random_number::random_fill!(i, ..=10);
310
311for i in i.iter().copied() {
312    assert!(0 <= i && i <= 10);
313}
314
315let mut i = [0i8; 100];
316random_number::random_fill!(i, ..=0);
317
318for i in i.iter().copied() {
319    assert!(-128 <= i && i <= 0);
320}
321```
322
323```rust
324# #![allow(unused_comparisons)]
325use random_number::rand;
326
327let mut thread_rng = rand::thread_rng();
328
329let mut i = [0u8; 100];
330random_number::random_fill!(i, ..=10, thread_rng);
331
332for i in i.iter().copied() {
333    assert!(0 <= i && i <= 10);
334}
335
336let mut i = [0i8; 100];
337random_number::random_fill!(i, ..=0, thread_rng);
338
339for i in i.iter().copied() {
340    assert!(-128 <= i && i <= 0);
341}
342```
343
344```rust
345# #![allow(unused_comparisons)]
346let mut i = [0u8; 100];
347random_number::random_fill!(i, 10..);
348
349for i in i.iter().copied() {
350    assert!(10 <= i && i <= 255);
351}
352
353let mut i = [0i8; 100];
354random_number::random_fill!(i, 0..);
355
356for i in i.iter().copied() {
357    assert!(0 <= i && i <= 127);
358}
359```
360
361```rust
362# #![allow(unused_comparisons)]
363use random_number::rand;
364
365let mut thread_rng = rand::thread_rng();
366
367let mut i = [0u8; 100];
368random_number::random_fill!(i, 10.., thread_rng);
369
370for i in i.iter().copied() {
371    assert!(10 <= i && i <= 255);
372}
373
374let mut i = [0i8; 100];
375random_number::random_fill!(i, 0.., thread_rng);
376
377for i in i.iter().copied() {
378    assert!(0 <= i && i <= 127);
379}
380```
381
382```rust
383# #![allow(unused_comparisons)]
384let mut i = [0u8; 100];
385random_number::random_fill!(i, ..10);
386
387for i in i.iter().copied() {
388    assert!(0 <= i && i <= 9);
389}
390
391let mut i = [0i8; 100];
392random_number::random_fill!(i, ..0);
393
394for i in i.iter().copied() {
395    assert!(-128 <= i && i <= -1);
396}
397```
398
399```rust
400# #![allow(unused_comparisons)]
401use random_number::rand;
402
403let mut thread_rng = rand::thread_rng();
404
405let mut i = [0u8; 100];
406random_number::random_fill!(i, ..10, thread_rng);
407
408for i in i.iter().copied() {
409    assert!(0 <= i && i <= 9);
410}
411
412let mut i = [0i8; 100];
413random_number::random_fill!(i, ..0, thread_rng);
414
415for i in i.iter().copied() {
416    assert!(-128 <= i && i <= -1);
417}
418```
419
420```rust
421let mut i = [0u8; 100];
422random_number::random_fill!(i, 1..10);
423
424for i in i.iter().copied() {
425    assert!(1 <= i && i <= 10);
426}
427
428let mut i = [0i8; 100];
429random_number::random_fill!(i, -2..12);
430
431for i in i.iter().copied() {
432    assert!(-2 <= i && i <= 12);
433}
434```
435
436```rust
437use random_number::rand;
438
439let mut thread_rng = rand::thread_rng();
440
441let mut i = [0u8; 100];
442random_number::random_fill!(i, 1..10, thread_rng);
443
444for i in i.iter().copied() {
445    assert!(1 <= i && i <= 10);
446}
447
448let mut i = [0i8; 100];
449random_number::random_fill!(i, -2..12, thread_rng);
450
451for i in i.iter().copied() {
452    assert!(-2 <= i && i <= 12);
453}
454```
455
456```rust
457let mut i = [0u8; 100];
458random_number::random_fill!(i, 12, 20);
459
460for i in i.iter().copied() {
461    assert!(12 <= i && i <= 20);
462}
463
464let mut i = [0i8; 100];
465random_number::random_fill!(i, 12, 20);
466
467for i in i.iter().copied() {
468    assert!(12 <= i && i <= 20);
469}
470```
471
472```rust
473use random_number::rand;
474
475let mut thread_rng = rand::thread_rng();
476
477let mut i = [0u8; 100];
478random_number::random_fill!(i, 12, 20, thread_rng);
479
480for i in i.iter().copied() {
481    assert!(12 <= i && i <= 20);
482}
483
484let mut i = [0i8; 100];
485random_number::random_fill!(i, 12, 20, thread_rng);
486
487for i in i.iter().copied() {
488    assert!(12 <= i && i <= 20);
489}
490```
491*/
492#[proc_macro_hack]
493pub use random_number_macro_impl::random_fill;