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