1
1
2
2
use std;
3
3
import std:: ivec;
4
+ import std:: ivec:: * ;
4
5
import std:: option;
5
6
import std:: option:: none;
6
7
import std:: option:: some;
@@ -235,6 +236,17 @@ fn test_map() {
235
236
assert ( w. ( 4 ) == 25 u) ;
236
237
}
237
238
239
+ #[ test]
240
+ fn test_map2 ( ) {
241
+ fn times ( x : & int , y : & int ) -> int { ret x * y; }
242
+ let f = times;
243
+ let v0 = ~[ 1 , 2 , 3 , 4 , 5 ] ;
244
+ let v1 = ~[ 5 , 4 , 3 , 2 , 1 ] ;
245
+ let u = ivec:: map2[ int, int, int] ( f, v0, v1) ;
246
+ let i = 0 ;
247
+ while i < 5 { assert ( v0. ( i ) * v1. ( i) == u. ( i) ) ; i += 1 ; }
248
+ }
249
+
238
250
#[ test]
239
251
fn test_filter_map ( ) {
240
252
// Test on-stack filter-map.
@@ -251,6 +263,23 @@ fn test_filter_map() {
251
263
assert ( w. ( 0 ) == 1 u) ;
252
264
assert ( w. ( 1 ) == 9 u) ;
253
265
assert ( w. ( 2 ) == 25 u) ;
266
+
267
+ fn halve ( i : & int ) -> option:: t [ int ] {
268
+ if i % 2 == 0 {
269
+ ret option:: some[ int] ( i / 2 ) ;
270
+ } else { ret option:: none[ int] ; }
271
+ }
272
+ fn halve_for_sure ( i : & int ) -> int { ret i / 2 ; }
273
+ let all_even: [ int ] = ~[ 0 , 2 , 8 , 6 ] ;
274
+ let all_odd1: [ int ] = ~[ 1 , 7 , 3 ] ;
275
+ let all_odd2: [ int ] = ~[ ] ;
276
+ let mix: [ int ] = ~[ 9 , 2 , 6 , 7 , 1 , 0 , 0 , 3 ] ;
277
+ let mix_dest: [ int ] = ~[ 1 , 3 , 0 , 0 ] ;
278
+ assert ( filter_map ( halve, all_even) == map ( halve_for_sure, all_even) ) ;
279
+ assert ( filter_map ( halve, all_odd1) == ~[ ] ) ;
280
+ assert ( filter_map ( halve, all_odd2) == ~[ ] ) ;
281
+ assert ( filter_map ( halve, mix) == mix_dest) ;
282
+
254
283
}
255
284
256
285
#[ test]
@@ -296,6 +325,24 @@ fn test_zip_unzip() {
296
325
assert ( { _0: 3 , _1: 6 } == { _0: u1. _0 . ( 2 ) , _1: u1. _1 . ( 2 ) } ) ;
297
326
}
298
327
328
+ #[ test]
329
+ fn test_position ( ) {
330
+ let v1: [ int ] = ~[ 1 , 2 , 3 , 3 , 2 , 5 ] ;
331
+ assert ( position ( 1 , v1) == option:: some[ uint] ( 0 u) ) ;
332
+ assert ( position ( 2 , v1) == option:: some[ uint] ( 1 u) ) ;
333
+ assert ( position ( 5 , v1) == option:: some[ uint] ( 5 u) ) ;
334
+ assert ( position ( 4 , v1) == option:: none[ uint] ) ;
335
+ }
336
+
337
+ #[ test]
338
+ fn test_position_pred ( ) {
339
+ fn less_than_three ( i : & int ) -> bool { ret i < 3 ; }
340
+ fn is_eighteen ( i : & int ) -> bool { ret i == 18 ; }
341
+ let v1: [ int ] = ~[ 5 , 4 , 3 , 2 , 1 ] ;
342
+ assert ( position_pred ( less_than_three, v1) == option:: some[ uint] ( 3 u) ) ;
343
+ assert ( position_pred ( is_eighteen, v1) == option:: none[ uint] ) ;
344
+ }
345
+
299
346
// Local Variables:
300
347
// mode: rust;
301
348
// fill-column: 78;
0 commit comments