1 #![warn(rust_2018_idioms)]
2
3 use bytes::buf::{BufExt, BufMutExt};
4 use bytes::{Buf, BufMut, Bytes};
5 #[cfg(feature = "std")]
6 use std::io::IoSlice;
7
8 #[test]
collect_two_bufs()9 fn collect_two_bufs() {
10 let a = Bytes::from(&b"hello"[..]);
11 let b = Bytes::from(&b"world"[..]);
12
13 let res = a.chain(b).to_bytes();
14 assert_eq!(res, &b"helloworld"[..]);
15 }
16
17 #[test]
writing_chained()18 fn writing_chained() {
19 let mut a = [0u8; 64];
20 let mut b = [0u8; 64];
21
22 {
23 let mut buf = (&mut a[..]).chain_mut(&mut b[..]);
24
25 for i in 0u8..128 {
26 buf.put_u8(i);
27 }
28 }
29
30 for i in 0..64 {
31 let expect = i as u8;
32 assert_eq!(expect, a[i]);
33 assert_eq!(expect + 64, b[i]);
34 }
35 }
36
37 #[test]
iterating_two_bufs()38 fn iterating_two_bufs() {
39 let a = Bytes::from(&b"hello"[..]);
40 let b = Bytes::from(&b"world"[..]);
41
42 let res: Vec<u8> = a.chain(b).into_iter().collect();
43 assert_eq!(res, &b"helloworld"[..]);
44 }
45
46 #[cfg(feature = "std")]
47 #[test]
vectored_read()48 fn vectored_read() {
49 let a = Bytes::from(&b"hello"[..]);
50 let b = Bytes::from(&b"world"[..]);
51
52 let mut buf = a.chain(b);
53
54 {
55 let b1: &[u8] = &mut [];
56 let b2: &[u8] = &mut [];
57 let b3: &[u8] = &mut [];
58 let b4: &[u8] = &mut [];
59 let mut iovecs = [
60 IoSlice::new(b1),
61 IoSlice::new(b2),
62 IoSlice::new(b3),
63 IoSlice::new(b4),
64 ];
65
66 assert_eq!(2, buf.bytes_vectored(&mut iovecs));
67 assert_eq!(iovecs[0][..], b"hello"[..]);
68 assert_eq!(iovecs[1][..], b"world"[..]);
69 assert_eq!(iovecs[2][..], b""[..]);
70 assert_eq!(iovecs[3][..], b""[..]);
71 }
72
73 buf.advance(2);
74
75 {
76 let b1: &[u8] = &mut [];
77 let b2: &[u8] = &mut [];
78 let b3: &[u8] = &mut [];
79 let b4: &[u8] = &mut [];
80 let mut iovecs = [
81 IoSlice::new(b1),
82 IoSlice::new(b2),
83 IoSlice::new(b3),
84 IoSlice::new(b4),
85 ];
86
87 assert_eq!(2, buf.bytes_vectored(&mut iovecs));
88 assert_eq!(iovecs[0][..], b"llo"[..]);
89 assert_eq!(iovecs[1][..], b"world"[..]);
90 assert_eq!(iovecs[2][..], b""[..]);
91 assert_eq!(iovecs[3][..], b""[..]);
92 }
93
94 buf.advance(3);
95
96 {
97 let b1: &[u8] = &mut [];
98 let b2: &[u8] = &mut [];
99 let b3: &[u8] = &mut [];
100 let b4: &[u8] = &mut [];
101 let mut iovecs = [
102 IoSlice::new(b1),
103 IoSlice::new(b2),
104 IoSlice::new(b3),
105 IoSlice::new(b4),
106 ];
107
108 assert_eq!(1, buf.bytes_vectored(&mut iovecs));
109 assert_eq!(iovecs[0][..], b"world"[..]);
110 assert_eq!(iovecs[1][..], b""[..]);
111 assert_eq!(iovecs[2][..], b""[..]);
112 assert_eq!(iovecs[3][..], b""[..]);
113 }
114
115 buf.advance(3);
116
117 {
118 let b1: &[u8] = &mut [];
119 let b2: &[u8] = &mut [];
120 let b3: &[u8] = &mut [];
121 let b4: &[u8] = &mut [];
122 let mut iovecs = [
123 IoSlice::new(b1),
124 IoSlice::new(b2),
125 IoSlice::new(b3),
126 IoSlice::new(b4),
127 ];
128
129 assert_eq!(1, buf.bytes_vectored(&mut iovecs));
130 assert_eq!(iovecs[0][..], b"ld"[..]);
131 assert_eq!(iovecs[1][..], b""[..]);
132 assert_eq!(iovecs[2][..], b""[..]);
133 assert_eq!(iovecs[3][..], b""[..]);
134 }
135 }
136