@@ -136,3 +136,63 @@ where
136136 }
137137 }
138138}
139+
140+ #[ cfg( test) ]
141+ mod tests {
142+ use super :: { Interpolate , Interpolated } ;
143+
144+ #[ test]
145+ fn test_no_interpolation ( ) {
146+ let v = vec ! [ ( "a" , 1.0 ) , ( "b" , 2.0 ) ] ;
147+ let mut iter = Interpolate :: new ( v. into_iter ( ) ) ;
148+
149+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "a" , 1.0 ) , Interpolated :: No ) ) ;
150+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "b" , 2.0 ) , Interpolated :: No ) ) ;
151+ assert ! ( iter. next( ) . is_none( ) ) ;
152+ }
153+
154+ #[ test]
155+ fn test_leading_interpolation ( ) {
156+ let v = vec ! [ ( "a" , None ) , ( "b" , None ) , ( "c" , Some ( 3.0 ) ) , ( "d" , Some ( 4.0 ) ) ] ;
157+ let mut iter = Interpolate :: new ( v. into_iter ( ) ) ;
158+
159+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "a" , Some ( 3.0 ) ) , Interpolated :: Yes ) ) ;
160+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "b" , Some ( 3.0 ) ) , Interpolated :: Yes ) ) ;
161+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "c" , Some ( 3.0 ) ) , Interpolated :: No ) ) ;
162+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "d" , Some ( 4.0 ) ) , Interpolated :: No ) ) ;
163+ assert ! ( iter. next( ) . is_none( ) ) ;
164+ }
165+
166+ #[ test]
167+ fn test_inner_interpolation ( ) {
168+ let v = vec ! [
169+ ( "a" , Some ( 1.0 ) ) ,
170+ ( "b" , Some ( 2.0 ) ) ,
171+ ( "c" , None ) ,
172+ ( "d" , None ) ,
173+ ( "e" , Some ( 5.0 ) ) ,
174+ ( "f" , Some ( 6.0 ) ) ,
175+ ] ;
176+ let mut iter = Interpolate :: new ( v. into_iter ( ) ) ;
177+
178+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "a" , Some ( 1.0 ) ) , Interpolated :: No ) ) ;
179+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "b" , Some ( 2.0 ) ) , Interpolated :: No ) ) ;
180+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "c" , Some ( 2.0 ) ) , Interpolated :: Yes ) ) ;
181+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "d" , Some ( 2.0 ) ) , Interpolated :: Yes ) ) ;
182+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "e" , Some ( 5.0 ) ) , Interpolated :: No ) ) ;
183+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "f" , Some ( 6.0 ) ) , Interpolated :: No ) ) ;
184+ assert ! ( iter. next( ) . is_none( ) ) ;
185+ }
186+
187+ #[ test]
188+ fn test_trailing_interpolation ( ) {
189+ let v = vec ! [ ( "a" , Some ( 1.0 ) ) , ( "b" , Some ( 2.0 ) ) , ( "c" , None ) , ( "d" , None ) ] ;
190+ let mut iter = Interpolate :: new ( v. into_iter ( ) ) ;
191+
192+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "a" , Some ( 1.0 ) ) , Interpolated :: No ) ) ;
193+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "b" , Some ( 2.0 ) ) , Interpolated :: No ) ) ;
194+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "c" , Some ( 2.0 ) ) , Interpolated :: Yes ) ) ;
195+ assert_eq ! ( iter. next( ) . unwrap( ) , ( ( "d" , Some ( 2.0 ) ) , Interpolated :: Yes ) ) ;
196+ assert ! ( iter. next( ) . is_none( ) ) ;
197+ }
198+ }
0 commit comments