]> git.proxmox.com Git - rustc.git/blob - vendor/rand/benches/misc.rs
New upstream version 1.51.0+dfsg1
[rustc.git] / vendor / rand / benches / misc.rs
1 // Copyright 2018 Developers of the Rand project.
2 //
3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5 // <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
6 // option. This file may not be copied, modified, or distributed
7 // except according to those terms.
8
9 #![feature(test)]
10
11 extern crate test;
12
13 const RAND_BENCH_N: u64 = 1000;
14
15 use test::Bencher;
16
17 use rand::distributions::{Bernoulli, Distribution, Standard};
18 use rand::prelude::*;
19 use rand_pcg::{Pcg32, Pcg64Mcg};
20
21 #[bench]
22 fn misc_gen_bool_const(b: &mut Bencher) {
23 let mut rng = Pcg32::from_rng(&mut thread_rng()).unwrap();
24 b.iter(|| {
25 let mut accum = true;
26 for _ in 0..crate::RAND_BENCH_N {
27 accum ^= rng.gen_bool(0.18);
28 }
29 accum
30 })
31 }
32
33 #[bench]
34 fn misc_gen_bool_var(b: &mut Bencher) {
35 let mut rng = Pcg32::from_rng(&mut thread_rng()).unwrap();
36 b.iter(|| {
37 let mut accum = true;
38 let mut p = 0.18;
39 for _ in 0..crate::RAND_BENCH_N {
40 accum ^= rng.gen_bool(p);
41 p += 0.0001;
42 }
43 accum
44 })
45 }
46
47 #[bench]
48 fn misc_gen_ratio_const(b: &mut Bencher) {
49 let mut rng = Pcg32::from_rng(&mut thread_rng()).unwrap();
50 b.iter(|| {
51 let mut accum = true;
52 for _ in 0..crate::RAND_BENCH_N {
53 accum ^= rng.gen_ratio(2, 3);
54 }
55 accum
56 })
57 }
58
59 #[bench]
60 fn misc_gen_ratio_var(b: &mut Bencher) {
61 let mut rng = Pcg32::from_rng(&mut thread_rng()).unwrap();
62 b.iter(|| {
63 let mut accum = true;
64 for i in 2..(crate::RAND_BENCH_N as u32 + 2) {
65 accum ^= rng.gen_ratio(i, i + 1);
66 }
67 accum
68 })
69 }
70
71 #[bench]
72 fn misc_bernoulli_const(b: &mut Bencher) {
73 let mut rng = Pcg32::from_rng(&mut thread_rng()).unwrap();
74 b.iter(|| {
75 let d = rand::distributions::Bernoulli::new(0.18).unwrap();
76 let mut accum = true;
77 for _ in 0..crate::RAND_BENCH_N {
78 accum ^= rng.sample(d);
79 }
80 accum
81 })
82 }
83
84 #[bench]
85 fn misc_bernoulli_var(b: &mut Bencher) {
86 let mut rng = Pcg32::from_rng(&mut thread_rng()).unwrap();
87 b.iter(|| {
88 let mut accum = true;
89 let mut p = 0.18;
90 for _ in 0..crate::RAND_BENCH_N {
91 let d = Bernoulli::new(p).unwrap();
92 accum ^= rng.sample(d);
93 p += 0.0001;
94 }
95 accum
96 })
97 }
98
99 #[bench]
100 fn gen_1k_iter_repeat(b: &mut Bencher) {
101 use std::iter;
102 let mut rng = Pcg64Mcg::from_rng(&mut thread_rng()).unwrap();
103 b.iter(|| {
104 let v: Vec<u64> = iter::repeat(()).map(|()| rng.gen()).take(128).collect();
105 v
106 });
107 b.bytes = 1024;
108 }
109
110 #[bench]
111 fn gen_1k_sample_iter(b: &mut Bencher) {
112 let mut rng = Pcg64Mcg::from_rng(&mut thread_rng()).unwrap();
113 b.iter(|| {
114 let v: Vec<u64> = Standard.sample_iter(&mut rng).take(128).collect();
115 v
116 });
117 b.bytes = 1024;
118 }
119
120 #[bench]
121 fn gen_1k_gen_array(b: &mut Bencher) {
122 let mut rng = Pcg64Mcg::from_rng(&mut thread_rng()).unwrap();
123 b.iter(|| {
124 // max supported array length is 32!
125 let v: [[u64; 32]; 4] = rng.gen();
126 v
127 });
128 b.bytes = 1024;
129 }
130
131 #[bench]
132 fn gen_1k_fill(b: &mut Bencher) {
133 let mut rng = Pcg64Mcg::from_rng(&mut thread_rng()).unwrap();
134 let mut buf = [0u64; 128];
135 b.iter(|| {
136 rng.fill(&mut buf[..]);
137 buf
138 });
139 b.bytes = 1024;
140 }