Skip to content

Commit 7ac5ca3

Browse files
committed
More ptr range test cases
1 parent 88150bd commit 7ac5ca3

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

library/core/tests/iter/range.rs

+87
Original file line numberDiff line numberDiff line change
@@ -632,3 +632,90 @@ fn test_ptr_range_zero_sized() {
632632
assert_eq!(range.advance_back_by(1), Ok(()));
633633
assert_eq!(range, start..end);
634634
}
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

Comments
 (0)