3
3
extern crate test;
4
4
extern crate rand;
5
5
6
- const RAND_BENCH_N : u64 = 100 ;
7
-
8
6
mod distributions;
9
7
10
- use std:: mem:: size_of;
11
- use test:: { black_box, Bencher } ;
12
- use rand:: { XorShiftRng , StdRng , IsaacRng , Isaac64Rng , Rng } ;
13
- use rand:: { OsRng , weak_rng} ;
14
-
15
- #[ bench]
16
- fn rand_xorshift ( b : & mut Bencher ) {
17
- let mut rng: XorShiftRng = OsRng :: new ( ) . unwrap ( ) . gen ( ) ;
18
- b. iter ( || {
19
- for _ in 0 ..RAND_BENCH_N {
20
- black_box ( rng. gen :: < usize > ( ) ) ;
21
- }
22
- } ) ;
23
- b. bytes = size_of :: < usize > ( ) as u64 * RAND_BENCH_N ;
24
- }
25
-
26
- #[ bench]
27
- fn rand_isaac ( b : & mut Bencher ) {
28
- let mut rng: IsaacRng = OsRng :: new ( ) . unwrap ( ) . gen ( ) ;
29
- b. iter ( || {
30
- for _ in 0 ..RAND_BENCH_N {
31
- black_box ( rng. gen :: < usize > ( ) ) ;
32
- }
33
- } ) ;
34
- b. bytes = size_of :: < usize > ( ) as u64 * RAND_BENCH_N ;
35
- }
36
-
37
- #[ bench]
38
- fn rand_isaac64 ( b : & mut Bencher ) {
39
- let mut rng: Isaac64Rng = OsRng :: new ( ) . unwrap ( ) . gen ( ) ;
40
- b. iter ( || {
41
- for _ in 0 ..RAND_BENCH_N {
42
- black_box ( rng. gen :: < usize > ( ) ) ;
43
- }
44
- } ) ;
45
- b. bytes = size_of :: < usize > ( ) as u64 * RAND_BENCH_N ;
46
- }
8
+ use test:: Bencher ;
9
+ use rand:: { weak_rng, Rng } ;
47
10
48
- #[ bench]
49
- fn rand_std ( b : & mut Bencher ) {
50
- let mut rng = StdRng :: new ( ) . unwrap ( ) ;
51
- b. iter ( || {
52
- for _ in 0 ..RAND_BENCH_N {
53
- black_box ( rng. gen :: < usize > ( ) ) ;
54
- }
55
- } ) ;
56
- b. bytes = size_of :: < usize > ( ) as u64 * RAND_BENCH_N ;
57
- }
11
+ pub const RAND_BENCH_N : u64 = 100 ;
58
12
59
13
#[ bench]
60
14
fn rand_shuffle_100 ( b : & mut Bencher ) {
61
15
let mut rng = weak_rng ( ) ;
62
16
let x : & mut [ usize ] = & mut [ 1 ; 100 ] ;
63
17
b. iter ( || {
64
- rng. shuffle ( x) ;
18
+ rng. shuffle ( x)
65
19
} )
66
20
}
21
+
22
+ mod algorithms {
23
+ use test:: { black_box, Bencher } ;
24
+ use std:: mem:: size_of;
25
+ use rand:: { OsRng , StdRng , weak_rng, XorShiftRng , XorShiftPlusRng , IsaacRng , Isaac64Rng , Rng , ChaChaRng } ;
26
+
27
+ use super :: * ;
28
+
29
+ macro_rules! impl_bench {
30
+ ( $result_ty: ty: $fn_name: ident, $hasher: ident) => (
31
+ #[ bench]
32
+ fn $fn_name( b: & mut Bencher ) {
33
+ let mut rng: $hasher = OsRng :: new( ) . unwrap( ) . gen ( ) ;
34
+ b. iter( || {
35
+ for _ in 0 ..RAND_BENCH_N {
36
+ black_box( rng. gen :: <$result_ty>( ) ) ;
37
+ }
38
+ } ) ;
39
+ b. bytes = size_of:: <$result_ty>( ) as u64 * RAND_BENCH_N ;
40
+ }
41
+ )
42
+ }
43
+
44
+ impl_bench ! ( u32 : rand_xorshift_u32, XorShiftRng ) ;
45
+ impl_bench ! ( u64 : rand_xorshift_u64, XorShiftRng ) ;
46
+ impl_bench ! ( u32 : rand_rand_xorshiftplus_u32, XorShiftPlusRng ) ;
47
+ impl_bench ! ( u64 : rand_xorshiftplus_u64, XorShiftPlusRng ) ;
48
+ impl_bench ! ( u32 : rand_isaac_u32, IsaacRng ) ;
49
+ impl_bench ! ( u64 : rand_isaac_u64, IsaacRng ) ;
50
+ impl_bench ! ( u32 : rand_isaac64_u32, Isaac64Rng ) ;
51
+ impl_bench ! ( u64 : rand_isaac64_u64, Isaac64Rng ) ;
52
+ impl_bench ! ( u32 : rand_chacha_u32, ChaChaRng ) ;
53
+ impl_bench ! ( u64 : rand_chacha_u64, ChaChaRng ) ;
54
+
55
+ #[ bench]
56
+ fn rand_std ( b : & mut Bencher ) {
57
+ let mut rng = StdRng :: new ( ) . unwrap ( ) ;
58
+ b. iter ( || {
59
+ for _ in 0 ..RAND_BENCH_N {
60
+ black_box ( rng. gen :: < usize > ( ) ) ;
61
+ }
62
+ } ) ;
63
+ b. bytes = size_of :: < usize > ( ) as u64 * RAND_BENCH_N ;
64
+ }
65
+
66
+ #[ bench]
67
+ fn rand_weak ( b : & mut Bencher ) {
68
+ let mut rng = weak_rng ( ) ;
69
+ b. iter ( || {
70
+ for _ in 0 ..RAND_BENCH_N {
71
+ black_box ( rng. gen :: < usize > ( ) ) ;
72
+ }
73
+ } ) ;
74
+ b. bytes = size_of :: < usize > ( ) as u64 * RAND_BENCH_N ;
75
+ }
76
+ }
0 commit comments