diff --git a/src/arrayish_vec.rs b/src/arrayish_vec.rs index 4a78425..ee87285 100644 --- a/src/arrayish_vec.rs +++ b/src/arrayish_vec.rs @@ -200,8 +200,8 @@ impl ArrayishVec { Bound::Unbounded => 0, }; let end = match range.end_bound() { - Bound::Included(x) => *x, - Bound::Excluded(x) => x - 1, + Bound::Included(x) => x + 1, + Bound::Excluded(x) => *x, Bound::Unbounded => self.len, }; assert!( diff --git a/tests/basic_tests.rs b/tests/basic_tests.rs index 4eca2dc..8b1367b 100644 --- a/tests/basic_tests.rs +++ b/tests/basic_tests.rs @@ -1,6 +1,7 @@ #![allow(bad_style)] use tinyvec::*; +use std::iter::FromIterator; #[test] fn test_a_vec() { @@ -121,3 +122,32 @@ fn ArrayishVec_remove() { assert_eq!(av.remove(1), 2); assert_eq!(&av[..], &[1, 3][..]); } + +#[test] +fn ArrayishVec_drain() { + let mut av: ArrayishVec<[i32; 10]> = Default::default(); + av.push(1); + av.push(2); + av.push(3); + + assert_eq!(Vec::from_iter(av.clone().drain(..)), vec![1, 2, 3]); + + assert_eq!(Vec::from_iter(av.clone().drain(..2)), vec![1, 2]); + assert_eq!(Vec::from_iter(av.clone().drain(..3)), vec![1, 2, 3]); + + assert_eq!(Vec::from_iter(av.clone().drain(..=1)), vec![1, 2]); + assert_eq!(Vec::from_iter(av.clone().drain(..=2)), vec![1, 2, 3]); + + assert_eq!(Vec::from_iter(av.clone().drain(0..)), vec![1, 2, 3]); + assert_eq!(Vec::from_iter(av.clone().drain(1..)), vec![2, 3]); + + assert_eq!(Vec::from_iter(av.clone().drain(0..2)), vec![1, 2]); + assert_eq!(Vec::from_iter(av.clone().drain(0..3)), vec![1, 2, 3]); + assert_eq!(Vec::from_iter(av.clone().drain(1..2)), vec![2]); + assert_eq!(Vec::from_iter(av.clone().drain(1..3)), vec![2, 3]); + + assert_eq!(Vec::from_iter(av.clone().drain(0..=1)), vec![1, 2]); + assert_eq!(Vec::from_iter(av.clone().drain(0..=2)), vec![1, 2, 3]); + assert_eq!(Vec::from_iter(av.clone().drain(1..=1)), vec![2]); + assert_eq!(Vec::from_iter(av.clone().drain(1..=2)), vec![2, 3]); +}