diff options
author | 2019-12-06 16:33:04 -0800 | |
---|---|---|
committer | 2019-12-10 13:35:26 -0800 | |
commit | a7fc5274ad84987d21c4ead69d4d3772fdcc87d3 (patch) | |
tree | 280441ebee180b06f2cca3f190fc574a05123466 /tests | |
parent | 7e80f3b6466ecb962334e617a3e304196476ade0 (diff) | |
download | bytes-a7fc5274ad84987d21c4ead69d4d3772fdcc87d3.tar.gz bytes-a7fc5274ad84987d21c4ead69d4d3772fdcc87d3.tar.zst bytes-a7fc5274ad84987d21c4ead69d4d3772fdcc87d3.zip |
Make Deref impls of Buf and BufMut forward more methods
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_buf.rs | 30 | ||||
-rw-r--r-- | tests/test_buf_mut.rs | 29 |
2 files changed, 59 insertions, 0 deletions
diff --git a/tests/test_buf.rs b/tests/test_buf.rs index b251edc..12b75a4 100644 --- a/tests/test_buf.rs +++ b/tests/test_buf.rs @@ -69,3 +69,33 @@ fn test_vec_deque() { buffer.copy_to_slice(&mut out); assert_eq!(b"world piece", &out[..]); } + +#[test] +fn test_deref_buf_forwards() { + struct Special; + + impl Buf for Special { + fn remaining(&self) -> usize { + unreachable!("remaining"); + } + + fn bytes(&self) -> &[u8] { + unreachable!("bytes"); + } + + fn advance(&mut self, _: usize) { + unreachable!("advance"); + } + + fn get_u8(&mut self) -> u8 { + // specialized! + b'x' + } + } + + // these should all use the specialized method + assert_eq!(Special.get_u8(), b'x'); + assert_eq!((&mut Special as &mut dyn Buf).get_u8(), b'x'); + assert_eq!((Box::new(Special) as Box<dyn Buf>).get_u8(), b'x'); + assert_eq!(Box::new(Special).get_u8(), b'x'); +} diff --git a/tests/test_buf_mut.rs b/tests/test_buf_mut.rs index dd414e5..f002f7d 100644 --- a/tests/test_buf_mut.rs +++ b/tests/test_buf_mut.rs @@ -87,3 +87,32 @@ fn test_mut_slice() { let mut s = &mut v[..]; s.put_u32(42); } + +#[test] +fn test_deref_bufmut_forwards() { + struct Special; + + impl BufMut for Special { + fn remaining_mut(&self) -> usize { + unreachable!("remaining_mut"); + } + + fn bytes_mut(&mut self) -> &mut [std::mem::MaybeUninit<u8>] { + unreachable!("bytes_mut"); + } + + unsafe fn advance_mut(&mut self, _: usize) { + unreachable!("advance"); + } + + fn put_u8(&mut self, _: u8) { + // specialized! + } + } + + // these should all use the specialized method + Special.put_u8(b'x'); + (&mut Special as &mut dyn BufMut).put_u8(b'x'); + (Box::new(Special) as Box<dyn BufMut>).put_u8(b'x'); + Box::new(Special).put_u8(b'x'); +} |