Fix ArrayishVec::drain implementation

The end bound was off by one
This commit is contained in:
Wim Looman
2020-01-12 13:44:53 +01:00
parent a69a5aab0d
commit 5567e85dc7
2 changed files with 32 additions and 2 deletions
+2 -2
View File
@@ -200,8 +200,8 @@ impl<A: Arrayish> ArrayishVec<A> {
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!(
+30
View File
@@ -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]);
}