@@ -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