Skip to content

Commit 2abab1f

Browse files
committed
Vec::dedup optimization - add tests
1 parent c114894 commit 2abab1f

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

library/alloc/tests/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#![feature(vecdeque_binary_search)]
2222
#![feature(slice_group_by)]
2323
#![feature(vec_extend_from_within)]
24+
#![feature(slice_partition_dedup)]
2425

2526
use std::collections::hash_map::DefaultHasher;
2627
use std::hash::{Hash, Hasher};

library/alloc/tests/vec.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,3 +2096,76 @@ fn test_extend_from_within() {
20962096

20972097
assert_eq!(v, ["a", "b", "c", "b", "c", "a", "b"]);
20982098
}
2099+
2100+
#[test]
2101+
fn test_vec_dedup_by() {
2102+
let mut vec: Vec<i32> = vec![1, -1, 2, 3, 1, -5, 5, -2, 2];
2103+
2104+
vec.dedup_by(|a, b| a.abs() == b.abs());
2105+
2106+
assert_eq!(vec, [1, 2, 3, 1, -5, -2]);
2107+
}
2108+
2109+
#[test]
2110+
fn test_vec_dedup_empty() {
2111+
let mut vec: Vec<i32> = Vec::new();
2112+
2113+
vec.dedup();
2114+
2115+
assert_eq!(vec, []);
2116+
}
2117+
2118+
#[test]
2119+
fn test_vec_dedup_one() {
2120+
let mut vec = vec![12i32];
2121+
2122+
vec.dedup();
2123+
2124+
assert_eq!(vec, [12]);
2125+
}
2126+
2127+
#[test]
2128+
fn test_vec_dedup_multiple_ident() {
2129+
let mut vec = vec![12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11];
2130+
2131+
vec.dedup();
2132+
2133+
assert_eq!(vec, [12, 11]);
2134+
}
2135+
2136+
#[test]
2137+
fn test_vec_dedup_partialeq() {
2138+
#[derive(Debug)]
2139+
struct Foo(i32, i32);
2140+
2141+
impl PartialEq for Foo {
2142+
fn eq(&self, other: &Foo) -> bool {
2143+
self.0 == other.0
2144+
}
2145+
}
2146+
2147+
let mut vec = vec![Foo(0, 1), Foo(0, 5), Foo(1, 7), Foo(1, 9)];
2148+
2149+
vec.dedup();
2150+
assert_eq!(vec, [Foo(0, 1), Foo(1, 7)]);
2151+
}
2152+
2153+
#[test]
2154+
fn test_vec_dedup() {
2155+
let mut vec: Vec<bool> = Vec::with_capacity(8);
2156+
let mut template = vec.clone();
2157+
2158+
for x in 0u8..255u8 {
2159+
vec.clear();
2160+
template.clear();
2161+
2162+
let iter = (0..8).map(move |bit| (x >> bit) & 1 == 1);
2163+
vec.extend(iter);
2164+
template.extend_from_slice(&vec);
2165+
2166+
let (dedup, _) = template.partition_dedup();
2167+
vec.dedup();
2168+
2169+
assert_eq!(vec, dedup);
2170+
}
2171+
}

0 commit comments

Comments
 (0)