@@ -379,6 +379,13 @@ impl<'self, A> Iterator<&'self A> for OptionIterator<'self, A> {
379
379
fn next ( & mut self ) -> Option < & ' self A > {
380
380
util:: replace ( & mut self . opt , None )
381
381
}
382
+
383
+ fn size_hint ( & self ) -> ( uint , Option < uint > ) {
384
+ match self . opt {
385
+ Some ( _) => ( 1 , Some ( 1 ) ) ,
386
+ None => ( 0 , Some ( 0 ) ) ,
387
+ }
388
+ }
382
389
}
383
390
384
391
/// Mutable iterator over an `Option<A>`
@@ -390,6 +397,13 @@ impl<'self, A> Iterator<&'self mut A> for OptionMutIterator<'self, A> {
390
397
fn next ( & mut self ) -> Option < & ' self mut A > {
391
398
util:: replace ( & mut self . opt , None )
392
399
}
400
+
401
+ fn size_hint ( & self ) -> ( uint , Option < uint > ) {
402
+ match self . opt {
403
+ Some ( _) => ( 1 , Some ( 1 ) ) ,
404
+ None => ( 0 , Some ( 0 ) ) ,
405
+ }
406
+ }
393
407
}
394
408
395
409
#[ test]
@@ -487,3 +501,39 @@ fn test_filtered() {
487
501
assert_eq ! ( some_stuff. get( ) , 42 ) ;
488
502
assert ! ( modified_stuff. is_none( ) ) ;
489
503
}
504
+
505
+ #[ test ]
506
+ fn test_iter ( ) {
507
+ let val = 5 ;
508
+
509
+ let x = Some ( val) ;
510
+ let mut it = x. iter ( ) ;
511
+
512
+ assert_eq ! ( it. size_hint( ) , ( 1 , Some ( 1 ) ) ) ;
513
+ assert_eq ! ( it. next( ) , Some ( & val) ) ;
514
+ assert_eq ! ( it. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
515
+ assert ! ( it. next( ) . is_none( ) ) ;
516
+ }
517
+
518
+ #[ test]
519
+ fn test_mut_iter ( ) {
520
+ let val = 5 ;
521
+ let new_val = 11 ;
522
+
523
+ let mut x = Some ( val) ;
524
+ let mut it = x. mut_iter ( ) ;
525
+
526
+ assert_eq ! ( it. size_hint( ) , ( 1 , Some ( 1 ) ) ) ;
527
+
528
+ match it. next ( ) {
529
+ Some ( interior) => {
530
+ assert_eq ! ( * interior, val) ;
531
+ * interior = new_val;
532
+ assert_eq ! ( x, Some ( new_val) ) ;
533
+ }
534
+ None => assert ! ( false ) ,
535
+ }
536
+
537
+ assert_eq ! ( it. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
538
+ assert ! ( it. next( ) . is_none( ) ) ;
539
+ }
0 commit comments