Vec::dedup optimization - add tests
This commit is contained in:
parent
c114894b90
commit
2abab1f688
2 changed files with 74 additions and 0 deletions
|
@ -21,6 +21,7 @@
|
|||
#![feature(vecdeque_binary_search)]
|
||||
#![feature(slice_group_by)]
|
||||
#![feature(vec_extend_from_within)]
|
||||
#![feature(slice_partition_dedup)]
|
||||
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
use std::hash::{Hash, Hasher};
|
||||
|
|
|
@ -2096,3 +2096,76 @@ fn test_extend_from_within() {
|
|||
|
||||
assert_eq!(v, ["a", "b", "c", "b", "c", "a", "b"]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_vec_dedup_by() {
|
||||
let mut vec: Vec<i32> = vec![1, -1, 2, 3, 1, -5, 5, -2, 2];
|
||||
|
||||
vec.dedup_by(|a, b| a.abs() == b.abs());
|
||||
|
||||
assert_eq!(vec, [1, 2, 3, 1, -5, -2]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_vec_dedup_empty() {
|
||||
let mut vec: Vec<i32> = Vec::new();
|
||||
|
||||
vec.dedup();
|
||||
|
||||
assert_eq!(vec, []);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_vec_dedup_one() {
|
||||
let mut vec = vec![12i32];
|
||||
|
||||
vec.dedup();
|
||||
|
||||
assert_eq!(vec, [12]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_vec_dedup_multiple_ident() {
|
||||
let mut vec = vec![12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11];
|
||||
|
||||
vec.dedup();
|
||||
|
||||
assert_eq!(vec, [12, 11]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_vec_dedup_partialeq() {
|
||||
#[derive(Debug)]
|
||||
struct Foo(i32, i32);
|
||||
|
||||
impl PartialEq for Foo {
|
||||
fn eq(&self, other: &Foo) -> bool {
|
||||
self.0 == other.0
|
||||
}
|
||||
}
|
||||
|
||||
let mut vec = vec![Foo(0, 1), Foo(0, 5), Foo(1, 7), Foo(1, 9)];
|
||||
|
||||
vec.dedup();
|
||||
assert_eq!(vec, [Foo(0, 1), Foo(1, 7)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_vec_dedup() {
|
||||
let mut vec: Vec<bool> = Vec::with_capacity(8);
|
||||
let mut template = vec.clone();
|
||||
|
||||
for x in 0u8..255u8 {
|
||||
vec.clear();
|
||||
template.clear();
|
||||
|
||||
let iter = (0..8).map(move |bit| (x >> bit) & 1 == 1);
|
||||
vec.extend(iter);
|
||||
template.extend_from_slice(&vec);
|
||||
|
||||
let (dedup, _) = template.partition_dedup();
|
||||
vec.dedup();
|
||||
|
||||
assert_eq!(vec, dedup);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue