diff options
Diffstat (limited to 'tests/test_buf_mut.rs')
-rw-r--r-- | tests/test_buf_mut.rs | 29 |
1 files changed, 29 insertions, 0 deletions
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'); +} |