@@ -136,3 +136,63 @@ where
136
136
}
137
137
}
138
138
}
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