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