| use core::io::{IoSlice, IoSliceMut}; |
| use core::ops::Deref; |
| |
| #[test] |
| fn io_slice_mut_advance_slices() { |
| let mut buf1 = [1; 8]; |
| let mut buf2 = [2; 16]; |
| let mut buf3 = [3; 8]; |
| let mut bufs = &mut [ |
| IoSliceMut::new(&mut buf1), |
| IoSliceMut::new(&mut buf2), |
| IoSliceMut::new(&mut buf3), |
| ][..]; |
| |
| // Only in a single buffer.. |
| IoSliceMut::advance_slices(&mut bufs, 1); |
| assert_eq!(bufs[0].deref(), [1; 7].as_ref()); |
| assert_eq!(bufs[1].deref(), [2; 16].as_ref()); |
| assert_eq!(bufs[2].deref(), [3; 8].as_ref()); |
| |
| // Removing a buffer, leaving others as is. |
| IoSliceMut::advance_slices(&mut bufs, 7); |
| assert_eq!(bufs[0].deref(), [2; 16].as_ref()); |
| assert_eq!(bufs[1].deref(), [3; 8].as_ref()); |
| |
| // Removing a buffer and removing from the next buffer. |
| IoSliceMut::advance_slices(&mut bufs, 18); |
| assert_eq!(bufs[0].deref(), [3; 6].as_ref()); |
| } |
| |
| #[test] |
| #[should_panic] |
| fn io_slice_mut_advance_slices_empty_slice() { |
| let mut empty_bufs = &mut [][..]; |
| IoSliceMut::advance_slices(&mut empty_bufs, 1); |
| } |
| |
| #[test] |
| #[should_panic] |
| fn io_slice_mut_advance_slices_beyond_total_length() { |
| let mut buf1 = [1; 8]; |
| let mut bufs = &mut [IoSliceMut::new(&mut buf1)][..]; |
| |
| IoSliceMut::advance_slices(&mut bufs, 9); |
| assert!(bufs.is_empty()); |
| } |
| |
| #[test] |
| fn io_slice_advance_slices() { |
| let buf1 = [1; 8]; |
| let buf2 = [2; 16]; |
| let buf3 = [3; 8]; |
| let mut bufs = &mut [IoSlice::new(&buf1), IoSlice::new(&buf2), IoSlice::new(&buf3)][..]; |
| |
| // Only in a single buffer.. |
| IoSlice::advance_slices(&mut bufs, 1); |
| assert_eq!(bufs[0].deref(), [1; 7].as_ref()); |
| assert_eq!(bufs[1].deref(), [2; 16].as_ref()); |
| assert_eq!(bufs[2].deref(), [3; 8].as_ref()); |
| |
| // Removing a buffer, leaving others as is. |
| IoSlice::advance_slices(&mut bufs, 7); |
| assert_eq!(bufs[0].deref(), [2; 16].as_ref()); |
| assert_eq!(bufs[1].deref(), [3; 8].as_ref()); |
| |
| // Removing a buffer and removing from the next buffer. |
| IoSlice::advance_slices(&mut bufs, 18); |
| assert_eq!(bufs[0].deref(), [3; 6].as_ref()); |
| } |
| |
| #[test] |
| #[should_panic] |
| fn io_slice_advance_slices_empty_slice() { |
| let mut empty_bufs = &mut [][..]; |
| IoSlice::advance_slices(&mut empty_bufs, 1); |
| } |
| |
| #[test] |
| #[should_panic] |
| fn io_slice_advance_slices_beyond_total_length() { |
| let buf1 = [1; 8]; |
| let mut bufs = &mut [IoSlice::new(&buf1)][..]; |
| |
| IoSlice::advance_slices(&mut bufs, 9); |
| assert!(bufs.is_empty()); |
| } |
| |
| #[test] |
| fn io_slice_as_slice() { |
| let buf = [1; 8]; |
| let slice = IoSlice::new(&buf).as_slice(); |
| assert_eq!(slice, buf); |
| } |
| |
| #[test] |
| fn io_slice_into_slice() { |
| let mut buf = [1; 8]; |
| let slice = IoSliceMut::new(&mut buf).into_slice(); |
| assert_eq!(slice, [1; 8]); |
| } |