1
1
#![ warn( rust_2018_idioms) ]
2
2
3
+ use std:: collections:: VecDeque ;
4
+
3
5
use bytes:: Buf ;
4
6
#[ cfg( feature = "std" ) ]
5
7
use std:: io:: IoSlice ;
@@ -58,9 +60,7 @@ fn test_bufs_vec() {
58
60
59
61
#[ test]
60
62
fn test_vec_deque ( ) {
61
- use std:: collections:: VecDeque ;
62
-
63
- let mut buffer: VecDeque < u8 > = VecDeque :: new ( ) ;
63
+ let mut buffer = VecDeque :: new ( ) ;
64
64
buffer. extend ( b"hello world" ) ;
65
65
assert_eq ! ( 11 , buffer. remaining( ) ) ;
66
66
assert_eq ! ( b"hello world" , buffer. chunk( ) ) ;
@@ -72,6 +72,41 @@ fn test_vec_deque() {
72
72
assert_eq ! ( b"world piece" , & out[ ..] ) ;
73
73
}
74
74
75
+ #[ cfg( feature = "std" ) ]
76
+ #[ test]
77
+ fn test_vec_deque_vectored ( ) {
78
+ let mut buffer = VecDeque :: new ( ) ;
79
+ buffer. reserve_exact ( 128 ) ;
80
+ assert_eq ! ( buffer. chunks_vectored( & mut [ IoSlice :: new( & [ ] ) ] ) , 0 ) ;
81
+
82
+ buffer. extend ( 0 ..64 ) ;
83
+ buffer. drain ( ..32 ) ;
84
+ buffer. extend ( 64 ..160 ) ;
85
+
86
+ assert_eq ! ( buffer. chunks_vectored( & mut [ ] ) , 0 ) ;
87
+
88
+ let mut chunks = [ IoSlice :: new ( & [ ] ) ; 1 ] ;
89
+ assert_eq ! ( buffer. chunks_vectored( & mut chunks) , 1 ) ;
90
+ assert ! ( !chunks[ 0 ] . is_empty( ) ) ;
91
+ let combined = chunks[ 0 ] . iter ( ) . copied ( ) . collect :: < Vec < u8 > > ( ) ;
92
+ let expected = ( 32 ..160 ) . take ( chunks[ 0 ] . len ( ) ) . collect :: < Vec < _ > > ( ) ;
93
+ assert_eq ! ( combined, expected) ;
94
+
95
+ let mut chunks = [ IoSlice :: new ( & [ ] ) ; 2 ] ;
96
+ assert_eq ! ( buffer. chunks_vectored( & mut chunks) , 2 ) ;
97
+ assert ! ( !chunks[ 0 ] . is_empty( ) ) ;
98
+ assert ! ( !chunks[ 1 ] . is_empty( ) ) ;
99
+ let combined = chunks
100
+ . iter ( )
101
+ . flat_map ( |chunk| chunk. iter ( ) )
102
+ . copied ( )
103
+ . collect :: < Vec < u8 > > ( ) ;
104
+ let expected = ( 32 ..160 ) . collect :: < Vec < u8 > > ( ) ;
105
+ assert_eq ! ( combined, expected) ;
106
+
107
+ assert_eq ! ( buffer. chunks_vectored( & mut [ IoSlice :: new( & [ ] ) ; 8 ] ) , 2 ) ;
108
+ }
109
+
75
110
#[ allow( unused_allocation) ] // This is intentional.
76
111
#[ test]
77
112
fn test_deref_buf_forwards ( ) {
0 commit comments