@@ -3,7 +3,6 @@ use core::iter::TrustedLen;
3
3
use super :: * ;
4
4
5
5
#[ bench]
6
- #[ cfg_attr( miri, ignore) ] // isolated Miri does not support benchmarks
7
6
fn bench_push_back_100 ( b : & mut test:: Bencher ) {
8
7
let mut deq = VecDeque :: with_capacity ( 101 ) ;
9
8
b. iter ( || {
@@ -16,7 +15,6 @@ fn bench_push_back_100(b: &mut test::Bencher) {
16
15
}
17
16
18
17
#[ bench]
19
- #[ cfg_attr( miri, ignore) ] // isolated Miri does not support benchmarks
20
18
fn bench_push_front_100 ( b : & mut test:: Bencher ) {
21
19
let mut deq = VecDeque :: with_capacity ( 101 ) ;
22
20
b. iter ( || {
@@ -29,12 +27,15 @@ fn bench_push_front_100(b: &mut test::Bencher) {
29
27
}
30
28
31
29
#[ bench]
32
- #[ cfg_attr( miri, ignore) ] // isolated Miri does not support benchmarks
33
30
fn bench_pop_back_100 ( b : & mut test:: Bencher ) {
34
- let mut deq = VecDeque :: < i32 > :: with_capacity ( 101 ) ;
31
+ let size = 100 ;
32
+ let mut deq = VecDeque :: < i32 > :: with_capacity ( size + 1 ) ;
33
+ // We'll mess with private state to pretend like `deq` is filled.
34
+ // Make sure the buffer is initialized so that we don't read uninit memory.
35
+ unsafe { deq. ptr ( ) . write_bytes ( 0u8 , size + 1 ) } ;
35
36
36
37
b. iter ( || {
37
- deq. head = 100 ;
38
+ deq. head = size ;
38
39
deq. tail = 0 ;
39
40
while !deq. is_empty ( ) {
40
41
test:: black_box ( deq. pop_back ( ) ) ;
@@ -43,9 +44,9 @@ fn bench_pop_back_100(b: &mut test::Bencher) {
43
44
}
44
45
45
46
#[ bench]
46
- #[ cfg_attr( miri, ignore) ] // isolated Miri does not support benchmarks
47
47
fn bench_retain_whole_10000 ( b : & mut test:: Bencher ) {
48
- let v = ( 1 ..100000 ) . collect :: < VecDeque < u32 > > ( ) ;
48
+ let size = if cfg ! ( miri) { 1000 } else { 100000 } ;
49
+ let v = ( 1 ..size) . collect :: < VecDeque < u32 > > ( ) ;
49
50
50
51
b. iter ( || {
51
52
let mut v = v. clone ( ) ;
@@ -54,9 +55,9 @@ fn bench_retain_whole_10000(b: &mut test::Bencher) {
54
55
}
55
56
56
57
#[ bench]
57
- #[ cfg_attr( miri, ignore) ] // isolated Miri does not support benchmarks
58
58
fn bench_retain_odd_10000 ( b : & mut test:: Bencher ) {
59
- let v = ( 1 ..100000 ) . collect :: < VecDeque < u32 > > ( ) ;
59
+ let size = if cfg ! ( miri) { 1000 } else { 100000 } ;
60
+ let v = ( 1 ..size) . collect :: < VecDeque < u32 > > ( ) ;
60
61
61
62
b. iter ( || {
62
63
let mut v = v. clone ( ) ;
@@ -65,23 +66,26 @@ fn bench_retain_odd_10000(b: &mut test::Bencher) {
65
66
}
66
67
67
68
#[ bench]
68
- #[ cfg_attr( miri, ignore) ] // isolated Miri does not support benchmarks
69
69
fn bench_retain_half_10000 ( b : & mut test:: Bencher ) {
70
- let v = ( 1 ..100000 ) . collect :: < VecDeque < u32 > > ( ) ;
70
+ let size = if cfg ! ( miri) { 1000 } else { 100000 } ;
71
+ let v = ( 1 ..size) . collect :: < VecDeque < u32 > > ( ) ;
71
72
72
73
b. iter ( || {
73
74
let mut v = v. clone ( ) ;
74
- v. retain ( |x| * x > 50000 )
75
+ v. retain ( |x| * x > size / 2 )
75
76
} )
76
77
}
77
78
78
79
#[ bench]
79
- #[ cfg_attr( miri, ignore) ] // isolated Miri does not support benchmarks
80
80
fn bench_pop_front_100 ( b : & mut test:: Bencher ) {
81
- let mut deq = VecDeque :: < i32 > :: with_capacity ( 101 ) ;
81
+ let size = 100 ;
82
+ let mut deq = VecDeque :: < i32 > :: with_capacity ( size + 1 ) ;
83
+ // We'll mess with private state to pretend like `deq` is filled.
84
+ // Make sure the buffer is initialized so that we don't read uninit memory.
85
+ unsafe { deq. ptr ( ) . write_bytes ( 0u8 , size + 1 ) } ;
82
86
83
87
b. iter ( || {
84
- deq. head = 100 ;
88
+ deq. head = size ;
85
89
deq. tail = 0 ;
86
90
while !deq. is_empty ( ) {
87
91
test:: black_box ( deq. pop_front ( ) ) ;
0 commit comments