Files
bytes/tests/test_chain.rs
T

137 lines
3.3 KiB
Rust
Raw Normal View History

2019-07-26 05:01:22 +09:00
#![deny(warnings, rust_2018_idioms)]
2017-02-28 18:33:34 -08:00
use bytes::{Buf, BufMut, Bytes, BytesMut};
use bytes::buf::Chain;
2019-06-07 13:10:54 -07:00
use std::io::IoSlice;
2017-02-28 18:33:34 -08:00
#[test]
fn collect_two_bufs() {
let a = Bytes::from(&b"hello"[..]);
let b = Bytes::from(&b"world"[..]);
2017-02-28 18:33:34 -08:00
2019-08-27 22:09:43 +02:00
let res = a.chain(b).to_bytes();
2017-02-28 18:33:34 -08:00
assert_eq!(res, &b"helloworld"[..]);
}
#[test]
fn writing_chained() {
let mut a = BytesMut::with_capacity(64);
let mut b = BytesMut::with_capacity(64);
{
let mut buf = Chain::new(&mut a, &mut b);
2019-08-27 22:09:43 +02:00
for i in 0u8..128 {
buf.put_u8(i);
2017-02-28 18:33:34 -08:00
}
}
assert_eq!(64, a.len());
assert_eq!(64, b.len());
for i in 0..64 {
let expect = i as u8;
assert_eq!(expect, a[i]);
assert_eq!(expect + 64, b[i]);
}
}
#[test]
fn iterating_two_bufs() {
let a = Bytes::from(&b"hello"[..]);
let b = Bytes::from(&b"world"[..]);
2017-02-28 18:33:34 -08:00
let res: Vec<u8> = a.chain(b).into_iter().collect();
2017-02-28 18:33:34 -08:00
assert_eq!(res, &b"helloworld"[..]);
}
#[test]
fn vectored_read() {
let a = Bytes::from(&b"hello"[..]);
let b = Bytes::from(&b"world"[..]);
2017-02-28 18:33:34 -08:00
let mut buf = a.chain(b);
2017-03-19 09:08:37 -07:00
{
2019-06-07 13:10:54 -07:00
let b1: &[u8] = &mut [];
let b2: &[u8] = &mut [];
let b3: &[u8] = &mut [];
let b4: &[u8] = &mut [];
let mut iovecs = [
IoSlice::new(b1),
IoSlice::new(b2),
IoSlice::new(b3),
IoSlice::new(b4),
];
assert_eq!(2, buf.bytes_vectored(&mut iovecs));
2017-03-19 09:08:37 -07:00
assert_eq!(iovecs[0][..], b"hello"[..]);
assert_eq!(iovecs[1][..], b"world"[..]);
2019-06-07 13:10:54 -07:00
assert_eq!(iovecs[2][..], b""[..]);
assert_eq!(iovecs[3][..], b""[..]);
2017-03-19 09:08:37 -07:00
}
2017-02-28 18:33:34 -08:00
buf.advance(2);
2017-03-19 09:08:37 -07:00
{
2019-06-07 13:10:54 -07:00
let b1: &[u8] = &mut [];
let b2: &[u8] = &mut [];
let b3: &[u8] = &mut [];
let b4: &[u8] = &mut [];
let mut iovecs = [
IoSlice::new(b1),
IoSlice::new(b2),
IoSlice::new(b3),
IoSlice::new(b4),
];
assert_eq!(2, buf.bytes_vectored(&mut iovecs));
2017-03-19 09:08:37 -07:00
assert_eq!(iovecs[0][..], b"llo"[..]);
assert_eq!(iovecs[1][..], b"world"[..]);
2019-06-07 13:10:54 -07:00
assert_eq!(iovecs[2][..], b""[..]);
assert_eq!(iovecs[3][..], b""[..]);
2017-03-19 09:08:37 -07:00
}
2017-02-28 18:33:34 -08:00
buf.advance(3);
2017-03-19 09:08:37 -07:00
{
2019-06-07 13:10:54 -07:00
let b1: &[u8] = &mut [];
let b2: &[u8] = &mut [];
let b3: &[u8] = &mut [];
let b4: &[u8] = &mut [];
let mut iovecs = [
IoSlice::new(b1),
IoSlice::new(b2),
IoSlice::new(b3),
IoSlice::new(b4),
];
assert_eq!(1, buf.bytes_vectored(&mut iovecs));
2017-03-19 09:08:37 -07:00
assert_eq!(iovecs[0][..], b"world"[..]);
2019-06-07 13:10:54 -07:00
assert_eq!(iovecs[1][..], b""[..]);
assert_eq!(iovecs[2][..], b""[..]);
assert_eq!(iovecs[3][..], b""[..]);
2017-03-19 09:08:37 -07:00
}
2017-02-28 18:33:34 -08:00
buf.advance(3);
2017-03-19 09:08:37 -07:00
{
2019-06-07 13:10:54 -07:00
let b1: &[u8] = &mut [];
let b2: &[u8] = &mut [];
let b3: &[u8] = &mut [];
let b4: &[u8] = &mut [];
let mut iovecs = [
IoSlice::new(b1),
IoSlice::new(b2),
IoSlice::new(b3),
IoSlice::new(b4),
];
assert_eq!(1, buf.bytes_vectored(&mut iovecs));
2017-03-19 09:08:37 -07:00
assert_eq!(iovecs[0][..], b"ld"[..]);
2019-06-07 13:10:54 -07:00
assert_eq!(iovecs[1][..], b""[..]);
assert_eq!(iovecs[2][..], b""[..]);
assert_eq!(iovecs[3][..], b""[..]);
2017-03-19 09:08:37 -07:00
}
2017-02-28 18:33:34 -08:00
}