@@ -632,3 +632,90 @@ fn test_ptr_range_zero_sized() {
632
632
assert_eq ! ( range. advance_back_by( 1 ) , Ok ( ( ) ) ) ;
633
633
assert_eq ! ( range, start..end) ;
634
634
}
635
+
636
+ #[ test]
637
+ fn test_ptr_range_reversed ( ) {
638
+ let start = 2222 as * const i32 ;
639
+ let end = 1111 as * const i32 ;
640
+ let range = start..end;
641
+ assert ! ( range. is_empty( ) ) ;
642
+ assert_eq ! ( range. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
643
+ assert_eq ! ( range. clone( ) . next( ) , None ) ;
644
+ assert_eq ! ( range. clone( ) . nth( 0 ) , None ) ;
645
+ assert_eq ! ( range. clone( ) . nth( 1 ) , None ) ;
646
+ assert_eq ! ( range. clone( ) . advance_by( 0 ) , Ok ( ( ) ) ) ; // Err(0) would be equally fine
647
+ assert_eq ! ( range. clone( ) . advance_by( 1 ) , Err ( 0 ) ) ;
648
+ assert_eq ! ( range. clone( ) . next_back( ) , None ) ;
649
+ assert_eq ! ( range. clone( ) . nth_back( 0 ) , None ) ;
650
+ assert_eq ! ( range. clone( ) . nth_back( 1 ) , None ) ;
651
+ assert_eq ! ( range. clone( ) . advance_back_by( 0 ) , Ok ( ( ) ) ) ; // Err(0) would be equally fine
652
+ assert_eq ! ( range. clone( ) . advance_back_by( 1 ) , Err ( 0 ) ) ;
653
+
654
+ let start = 2222 as * const ( ) ;
655
+ let end = 1111 as * const ( ) ;
656
+ let range = start..end;
657
+ assert ! ( range. is_empty( ) ) ;
658
+ assert_eq ! ( range. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
659
+ assert_eq ! ( range. clone( ) . next( ) , None ) ;
660
+ assert_eq ! ( range. clone( ) . nth( 0 ) , None ) ;
661
+ assert_eq ! ( range. clone( ) . nth( 1 ) , None ) ;
662
+ assert_eq ! ( range. clone( ) . advance_by( 0 ) , Ok ( ( ) ) ) ;
663
+ assert_eq ! ( range. clone( ) . advance_by( 1 ) , Err ( 0 ) ) ;
664
+ assert_eq ! ( range. clone( ) . next_back( ) , None ) ;
665
+ assert_eq ! ( range. clone( ) . nth_back( 0 ) , None ) ;
666
+ assert_eq ! ( range. clone( ) . nth_back( 1 ) , None ) ;
667
+ assert_eq ! ( range. clone( ) . advance_back_by( 0 ) , Ok ( ( ) ) ) ;
668
+ assert_eq ! ( range. clone( ) . advance_back_by( 1 ) , Err ( 0 ) ) ;
669
+ }
670
+
671
+ #[ test]
672
+ fn test_ptr_range_underflow ( ) {
673
+ let start = 1 as * const [ u8 ; 100 ] ;
674
+ let end = 2 as * const [ u8 ; 100 ] ;
675
+
676
+ let mut range = start..end;
677
+ assert_eq ! ( range. next_back( ) , Some ( start) ) ;
678
+ assert_eq ! ( range, start..start) ;
679
+
680
+ let mut range = start..end;
681
+ assert_eq ! ( range. nth_back( 0 ) , Some ( start) ) ;
682
+ assert_eq ! ( range, start..start) ;
683
+
684
+ let mut range = start..end;
685
+ assert_eq ! ( range. nth_back( 1 ) , None ) ;
686
+ assert_eq ! ( range, start..start) ;
687
+
688
+ let mut range = start..end;
689
+ assert_eq ! ( range. advance_back_by( 0 ) , Ok ( ( ) ) ) ;
690
+ assert_eq ! ( range, start..end) ;
691
+
692
+ let mut range = start..end;
693
+ assert_eq ! ( range. advance_back_by( 1 ) , Ok ( ( ) ) ) ;
694
+ assert_eq ! ( range, start..start) ;
695
+ }
696
+
697
+ #[ test]
698
+ fn test_ptr_range_overflow ( ) {
699
+ let start = ( usize:: MAX - 2 ) as * const [ u8 ; 100 ] ;
700
+ let end = usize:: MAX as * const [ u8 ; 100 ] ;
701
+
702
+ let mut range = start..end;
703
+ assert_eq ! ( range. next( ) , Some ( start) ) ;
704
+ assert_eq ! ( range, end..end) ;
705
+
706
+ let mut range = start..end;
707
+ assert_eq ! ( range. nth( 0 ) , Some ( start) ) ;
708
+ assert_eq ! ( range, end..end) ;
709
+
710
+ let mut range = start..end;
711
+ assert_eq ! ( range. nth( 1 ) , None ) ;
712
+ assert_eq ! ( range, end..end) ;
713
+
714
+ let mut range = start..end;
715
+ assert_eq ! ( range. advance_by( 0 ) , Ok ( ( ) ) ) ;
716
+ assert_eq ! ( range, start..end) ;
717
+
718
+ let mut range = start..end;
719
+ assert_eq ! ( range. advance_by( 1 ) , Ok ( ( ) ) ) ;
720
+ assert_eq ! ( range, end..end) ;
721
+ }
0 commit comments