extern crate bytes; extern crate iovec; use bytes::{Buf, BufMut, Bytes, BytesMut}; use bytes::buf::Chain; use iovec::IoVec; use std::io::Cursor; #[test] fn collect_two_bufs() { let a = Cursor::new(Bytes::from(&b"hello"[..])); let b = Cursor::new(Bytes::from(&b"world"[..])); let res: Vec = a.chain(b).collect(); 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); for i in 0..128 { buf.put(i as u8); } } 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 = Cursor::new(Bytes::from(&b"hello"[..])); let b = Cursor::new(Bytes::from(&b"world"[..])); let res: Vec = a.chain(b).iter().collect(); assert_eq!(res, &b"helloworld"[..]); } #[test] fn vectored_read() { let a = Cursor::new(Bytes::from(&b"hello"[..])); let b = Cursor::new(Bytes::from(&b"world"[..])); let mut buf = a.chain(b); { let b1: &[u8] = &mut [0]; let b2: &[u8] = &mut [0]; let b3: &[u8] = &mut [0]; let b4: &[u8] = &mut [0]; let mut iovecs: [&IoVec; 4] = [b1.into(), b2.into(), b3.into(), b4.into()]; assert_eq!(2, buf.bytes_vec(&mut iovecs)); assert_eq!(iovecs[0][..], b"hello"[..]); assert_eq!(iovecs[1][..], b"world"[..]); assert_eq!(iovecs[2][..], b"\0"[..]); assert_eq!(iovecs[3][..], b"\0"[..]); } buf.advance(2); { let b1: &[u8] = &mut [0]; let b2: &[u8] = &mut [0]; let b3: &[u8] = &mut [0]; let b4: &[u8] = &mut [0]; let mut iovecs: [&IoVec; 4] = [b1.into(), b2.into(), b3.into(), b4.into()]; assert_eq!(2, buf.bytes_vec(&mut iovecs)); assert_eq!(iovecs[0][..], b"llo"[..]); assert_eq!(iovecs[1][..], b"world"[..]); assert_eq!(iovecs[2][..], b"\0"[..]); assert_eq!(iovecs[3][..], b"\0"[..]); } buf.advance(3); { let b1: &[u8] = &mut [0]; let b2: &[u8] = &mut [0]; let b3: &[u8] = &mut [0]; let b4: &[u8] = &mut [0]; let mut iovecs: [&IoVec; 4] = [b1.into(), b2.into(), b3.into(), b4.into()]; assert_eq!(1, buf.bytes_vec(&mut iovecs)); assert_eq!(iovecs[0][..], b"world"[..]); assert_eq!(iovecs[1][..], b"\0"[..]); assert_eq!(iovecs[2][..], b"\0"[..]); assert_eq!(iovecs[3][..], b"\0"[..]); } buf.advance(3); { let b1: &[u8] = &mut [0]; let b2: &[u8] = &mut [0]; let b3: &[u8] = &mut [0]; let b4: &[u8] = &mut [0]; let mut iovecs: [&IoVec; 4] = [b1.into(), b2.into(), b3.into(), b4.into()]; assert_eq!(1, buf.bytes_vec(&mut iovecs)); assert_eq!(iovecs[0][..], b"ld"[..]); assert_eq!(iovecs[1][..], b"\0"[..]); assert_eq!(iovecs[2][..], b"\0"[..]); assert_eq!(iovecs[3][..], b"\0"[..]); } }