Skip to content

Commit

Permalink
Fix TinyVec::drain implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Nemo157 committed Jan 12, 2020
1 parent 16de650 commit 95c991d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,7 @@ all-features = true

[workspace]
members = ["fuzz"]

[[test]]
name = "tinyvec"
required-features = ["extern_crate_alloc"]
4 changes: 2 additions & 2 deletions src/tiny_vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,8 @@ impl<A: Arrayish> TinyVec<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!(
Expand Down
33 changes: 33 additions & 0 deletions tests/tinyvec.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#![allow(bad_style)]

use tinyvec::*;
use std::iter::FromIterator;

#[test]
fn TinyVec_drain() {
let mut tv: TinyVec<[i32; 10]> = Default::default();
tv.push(1);
tv.push(2);
tv.push(3);

assert_eq!(Vec::from_iter(tv.clone().drain(..)), vec![1, 2, 3]);

assert_eq!(Vec::from_iter(tv.clone().drain(..2)), vec![1, 2]);
assert_eq!(Vec::from_iter(tv.clone().drain(..3)), vec![1, 2, 3]);

assert_eq!(Vec::from_iter(tv.clone().drain(..=1)), vec![1, 2]);
assert_eq!(Vec::from_iter(tv.clone().drain(..=2)), vec![1, 2, 3]);

assert_eq!(Vec::from_iter(tv.clone().drain(0..)), vec![1, 2, 3]);
assert_eq!(Vec::from_iter(tv.clone().drain(1..)), vec![2, 3]);

assert_eq!(Vec::from_iter(tv.clone().drain(0..2)), vec![1, 2]);
assert_eq!(Vec::from_iter(tv.clone().drain(0..3)), vec![1, 2, 3]);
assert_eq!(Vec::from_iter(tv.clone().drain(1..2)), vec![2]);
assert_eq!(Vec::from_iter(tv.clone().drain(1..3)), vec![2, 3]);

assert_eq!(Vec::from_iter(tv.clone().drain(0..=1)), vec![1, 2]);
assert_eq!(Vec::from_iter(tv.clone().drain(0..=2)), vec![1, 2, 3]);
assert_eq!(Vec::from_iter(tv.clone().drain(1..=1)), vec![2]);
assert_eq!(Vec::from_iter(tv.clone().drain(1..=2)), vec![2, 3]);
}

0 comments on commit 95c991d

Please sign in to comment.