@@ -3,18 +3,18 @@ use super::collections::{ListMap, Equality, DefaultEquality};
33use std:: fmt:: { Debug , Display , Formatter } ;
44use itertools:: Itertools ;
55
6- pub fn compare_vec_no_order < ' a , T , A , B , E > ( actual : A , expected : B , _cmp : E ) -> VecDiff < ' a , T , E >
6+ pub fn compare_vec_no_order < T , A , B , E > ( actual : A , expected : B , _cmp : E ) -> VecDiff < T , E >
77where
8- A : Iterator < Item =& ' a T > ,
9- B : Iterator < Item =& ' a T > ,
10- E : Equality < & ' a T > ,
8+ A : Iterator < Item =T > ,
9+ B : Iterator < Item =T > ,
10+ E : Equality < T > ,
1111{
12- let mut diff: ListMap < & T , Count , E > = ListMap :: new ( ) ;
12+ let mut diff: ListMap < T , Count , E > = ListMap :: new ( ) ;
1313 for i in actual {
14- diff. entry ( & i) . or_default ( ) . actual += 1 ;
14+ diff. entry ( i) . or_default ( ) . actual += 1 ;
1515 }
1616 for i in expected {
17- diff. entry ( & i) . or_default ( ) . expected += 1 ;
17+ diff. entry ( i) . or_default ( ) . expected += 1 ;
1818 }
1919 diff = diff. into_iter ( ) . filter ( |( _v, c) | c. actual != c. expected ) . collect ( ) ;
2020 VecDiff { diff }
@@ -26,8 +26,8 @@ struct Count {
2626 expected : usize ,
2727}
2828
29- pub struct VecDiff < ' a , T , E : Equality < & ' a T > > {
30- diff : ListMap < & ' a T , Count , E > ,
29+ pub struct VecDiff < T , E : Equality < T > > {
30+ diff : ListMap < T , Count , E > ,
3131}
3232
3333struct FormatAsDebug < T : Debug > ( T ) ;
@@ -44,7 +44,7 @@ impl<T: Display> Display for FormatAsDisplay<T> {
4444 }
4545}
4646
47- impl < ' a , T , E : Equality < & ' a T > > VecDiff < ' a , T , E > {
47+ impl < T , E : Equality < T > > VecDiff < T , E > {
4848 pub fn has_diff ( & self ) -> bool {
4949 !self . diff . is_empty ( )
5050 }
@@ -57,20 +57,20 @@ impl<'a, T, E: Equality<&'a T>> VecDiff<'a, T, E> {
5757 self . as_string ( FormatAsDebug )
5858 }
5959
60- fn as_string < F , I : Display > ( & self , f : F ) -> Option < String >
61- where F : Fn ( & ' a T ) -> I
60+ fn as_string < ' a , F , I : ' a + Display > ( & ' a self , f : F ) -> Option < String >
61+ where F : Copy + Fn ( & ' a T ) -> I
6262 {
6363 let mut diff = String :: new ( ) ;
6464 if self . has_diff ( ) {
6565 let mut missed = self . diff . iter ( )
6666 . filter ( |( _v, c) | c. actual < c. expected )
6767 . flat_map ( |( v, c) | std:: iter:: repeat_n ( v, c. expected - c. actual ) )
68- . map ( |v| f ( v ) )
68+ . map ( f )
6969 . peekable ( ) ;
7070 let mut excessive = self . diff . iter ( )
7171 . filter ( |( _v, c) | c. actual > c. expected )
7272 . flat_map ( |( v, c) | std:: iter:: repeat_n ( v, c. actual - c. expected ) )
73- . map ( |v| f ( v ) )
73+ . map ( f )
7474 . peekable ( ) ;
7575 if missed. peek ( ) . is_some ( ) {
7676 diff. push_str ( format ! ( "Missed results: {}" , missed. format( ", " ) ) . as_str ( ) ) ;
0 commit comments