@@ -10,39 +10,75 @@ use rand::prelude::*;
10
10
use rand:: seq:: * ;
11
11
12
12
#[ bench]
13
- fn misc_shuffle_100 ( b : & mut Bencher ) {
13
+ fn seq_shuffle_100 ( b : & mut Bencher ) {
14
14
let mut rng = SmallRng :: from_rng ( thread_rng ( ) ) . unwrap ( ) ;
15
15
let x : & mut [ usize ] = & mut [ 1 ; 100 ] ;
16
16
b. iter ( || {
17
- rng . shuffle ( x ) ;
17
+ x . shuffle ( & mut rng ) ;
18
18
x[ 0 ]
19
19
} )
20
20
}
21
21
22
22
#[ bench]
23
- fn misc_sample_iter_10_of_100 ( b : & mut Bencher ) {
23
+ fn seq_slice_choose_1_of_1000 ( b : & mut Bencher ) {
24
+ let mut rng = SmallRng :: from_rng ( thread_rng ( ) ) . unwrap ( ) ;
25
+ let x : & [ usize ] = & [ 1 ; 1000 ] ;
26
+ b. iter ( || {
27
+ x. choose ( & mut rng)
28
+ } )
29
+ }
30
+
31
+ #[ bench]
32
+ fn seq_slice_choose_multiple_1_of_1000 ( b : & mut Bencher ) {
33
+ let mut rng = SmallRng :: from_rng ( thread_rng ( ) ) . unwrap ( ) ;
34
+ let x : & [ usize ] = & [ 1 ; 1000 ] ;
35
+ let mut buf = [ 0 ; 1 ] ;
36
+ b. iter ( || {
37
+ for ( v, slot) in x. choose_multiple ( & mut rng, buf. len ( ) ) . zip ( buf. iter_mut ( ) ) {
38
+ * slot = * v;
39
+ }
40
+ buf
41
+ } )
42
+ }
43
+
44
+ #[ bench]
45
+ fn seq_slice_choose_multiple_10_of_100 ( b : & mut Bencher ) {
46
+ let mut rng = SmallRng :: from_rng ( thread_rng ( ) ) . unwrap ( ) ;
47
+ let x : & [ usize ] = & [ 1 ; 100 ] ;
48
+ let mut buf = [ 0 ; 10 ] ;
49
+ b. iter ( || {
50
+ for ( v, slot) in x. choose_multiple ( & mut rng, buf. len ( ) ) . zip ( buf. iter_mut ( ) ) {
51
+ * slot = * v;
52
+ }
53
+ buf
54
+ } )
55
+ }
56
+
57
+ #[ bench]
58
+ fn seq_iter_choose_from_100 ( b : & mut Bencher ) {
24
59
let mut rng = SmallRng :: from_rng ( thread_rng ( ) ) . unwrap ( ) ;
25
60
let x : & [ usize ] = & [ 1 ; 100 ] ;
26
61
b. iter ( || {
27
- sample_iter ( & mut rng , x , 10 ) . unwrap_or_else ( |e| e )
62
+ x . iter ( ) . cloned ( ) . choose ( & mut rng )
28
63
} )
29
64
}
30
65
31
66
#[ bench]
32
- fn misc_sample_slice_10_of_100 ( b : & mut Bencher ) {
67
+ fn seq_iter_choose_multiple_10_of_100 ( b : & mut Bencher ) {
33
68
let mut rng = SmallRng :: from_rng ( thread_rng ( ) ) . unwrap ( ) ;
34
69
let x : & [ usize ] = & [ 1 ; 100 ] ;
35
70
b. iter ( || {
36
- sample_slice ( & mut rng, x , 10 )
71
+ x . iter ( ) . cloned ( ) . choose_multiple ( & mut rng, 10 )
37
72
} )
38
73
}
39
74
40
75
#[ bench]
41
- fn misc_sample_slice_ref_10_of_100 ( b : & mut Bencher ) {
76
+ fn seq_iter_choose_multiple_fill_10_of_100 ( b : & mut Bencher ) {
42
77
let mut rng = SmallRng :: from_rng ( thread_rng ( ) ) . unwrap ( ) ;
43
78
let x : & [ usize ] = & [ 1 ; 100 ] ;
79
+ let mut buf = [ 0 ; 10 ] ;
44
80
b. iter ( || {
45
- sample_slice_ref ( & mut rng, x , 10 )
81
+ x . iter ( ) . cloned ( ) . choose_multiple_fill ( & mut rng, & mut buf )
46
82
} )
47
83
}
48
84
@@ -58,6 +94,6 @@ macro_rules! sample_indices {
58
94
}
59
95
}
60
96
61
- sample_indices ! ( misc_sample_indices_10_of_1k , 10 , 1000 ) ;
62
- sample_indices ! ( misc_sample_indices_50_of_1k , 50 , 1000 ) ;
63
- sample_indices ! ( misc_sample_indices_100_of_1k , 100 , 1000 ) ;
97
+ sample_indices ! ( seq_sample_indices_10_of_1k , 10 , 1000 ) ;
98
+ sample_indices ! ( seq_sample_indices_50_of_1k , 50 , 1000 ) ;
99
+ sample_indices ! ( seq_sample_indices_100_of_1k , 100 , 1000 ) ;
0 commit comments