From f29e93951da599095f54d57667c1988960ceff71 Mon Sep 17 00:00:00 2001 From: Hange Shi - NJU <61647848+AbeZbm@users.noreply.github.com> Date: Wed, 28 May 2025 18:56:41 +0800 Subject: [PATCH] Add some tests for Limit, BytesMut and Reader (#785) --- tests/test_bytes.rs | 7 ++++ tests/test_limit.rs | 86 ++++++++++++++++++++++++++++++++++++++++++++ tests/test_reader.rs | 9 +++++ 3 files changed, 102 insertions(+) create mode 100644 tests/test_limit.rs diff --git a/tests/test_bytes.rs b/tests/test_bytes.rs index e147783..fb4a0dc 100644 --- a/tests/test_bytes.rs +++ b/tests/test_bytes.rs @@ -186,6 +186,13 @@ fn split_off_oob() { let _ = hello.split_off(44); } +#[test] +#[should_panic = "split_off out of bounds"] +fn bytes_mut_split_off_oob() { + let mut hello = BytesMut::from(&b"helloworld"[..]); + let _ = hello.split_off(44); +} + #[test] fn split_off_uninitialized() { let mut bytes = BytesMut::with_capacity(1024); diff --git a/tests/test_limit.rs b/tests/test_limit.rs new file mode 100644 index 0000000..dc40cc5 --- /dev/null +++ b/tests/test_limit.rs @@ -0,0 +1,86 @@ +#![warn(rust_2018_idioms)] + +use bytes::{buf::Limit, BufMut}; + +#[test] +fn long_limit() { + let buf = &mut [0u8; 10]; + let limit = buf.limit(100); + assert_eq!(10, limit.remaining_mut()); + assert_eq!(&[0u8; 10], &limit.get_ref()[..]); +} + +#[test] +fn limit_get_mut() { + let buf = &mut [0u8; 128]; + let mut limit = buf.limit(10); + assert_eq!(10, limit.remaining_mut()); + assert_eq!(&mut [0u8; 128], &limit.get_mut()[..]); +} + +#[test] +fn limit_set_limit() { + let buf = &mut [0u8; 128]; + let mut limit = buf.limit(10); + assert_eq!(10, Limit::limit(&limit)); + limit.set_limit(5); + assert_eq!(5, Limit::limit(&limit)); +} + +#[test] +fn limit_chunk_mut() { + let buf = &mut [0u8; 20]; + let mut limit = buf.limit(10); + assert_eq!(10, limit.chunk_mut().len()); + + let buf = &mut [0u8; 10]; + let mut limit = buf.limit(20); + assert_eq!(10, limit.chunk_mut().len()); +} + +#[test] +#[should_panic = "advance out of bounds"] +fn limit_advance_mut_panic_1() { + let buf = &mut [0u8; 10]; + let mut limit = buf.limit(100); + unsafe { + limit.advance_mut(50); + } +} + +#[test] +#[should_panic = "cnt <= self.limit"] +fn limit_advance_mut_panic_2() { + let buf = &mut [0u8; 100]; + let mut limit = buf.limit(10); + unsafe { + limit.advance_mut(50); + } +} + +#[test] +fn limit_advance_mut() { + let buf = &mut [0u8; 100]; + let mut limit = buf.limit(10); + unsafe { + limit.advance_mut(5); + } + assert_eq!(5, limit.remaining_mut()); + assert_eq!(5, limit.chunk_mut().len()); +} + +#[test] +fn limit_into_inner() { + let buf_arr = *b"hello world"; + let buf: &mut [u8] = &mut buf_arr.clone(); + let mut limit = buf.limit(4); + let mut dst = vec![]; + + unsafe { + limit.advance_mut(2); + } + + let buf = limit.into_inner(); + dst.put(&buf[..]); + assert_eq!(*dst, b"llo world"[..]); +} diff --git a/tests/test_reader.rs b/tests/test_reader.rs index 897aff6..19a1632 100644 --- a/tests/test_reader.rs +++ b/tests/test_reader.rs @@ -27,3 +27,12 @@ fn buf_read() { reader.read_line(&mut line).unwrap(); assert_eq!("world", &line); } + +#[test] +fn get_mut() { + let buf = &b"hello world"[..]; + let mut reader = buf.reader(); + let buf_mut = reader.get_mut(); + assert_eq!(11, buf_mut.remaining()); + assert_eq!(b"hello world", buf_mut); +}