]> git.lizzy.rs Git - rust.git/blob - src/libcore/tests/ops.rs
Auto merge of #68363 - Dylan-DPC:rollup-33enndv, r=Dylan-DPC
[rust.git] / src / libcore / tests / ops.rs
1 use core::ops::{Bound, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo};
2
3 // Test the Range structs without the syntactic sugar.
4
5 #[test]
6 fn test_range() {
7     let r = Range { start: 2, end: 10 };
8     let mut count = 0;
9     for (i, ri) in r.enumerate() {
10         assert_eq!(ri, i + 2);
11         assert!(ri >= 2 && ri < 10);
12         count += 1;
13     }
14     assert_eq!(count, 8);
15 }
16
17 #[test]
18 fn test_range_from() {
19     let r = RangeFrom { start: 2 };
20     let mut count = 0;
21     for (i, ri) in r.take(10).enumerate() {
22         assert_eq!(ri, i + 2);
23         assert!(ri >= 2 && ri < 12);
24         count += 1;
25     }
26     assert_eq!(count, 10);
27 }
28
29 #[test]
30 fn test_range_to() {
31     // Not much to test.
32     let _ = RangeTo { end: 42 };
33 }
34
35 #[test]
36 fn test_full_range() {
37     // Not much to test.
38     let _ = RangeFull;
39 }
40
41 #[test]
42 fn test_range_inclusive() {
43     let mut r = RangeInclusive::new(1i8, 2);
44     assert_eq!(r.next(), Some(1));
45     assert_eq!(r.next(), Some(2));
46     assert_eq!(r.next(), None);
47
48     r = RangeInclusive::new(127i8, 127);
49     assert_eq!(r.next(), Some(127));
50     assert_eq!(r.next(), None);
51
52     r = RangeInclusive::new(-128i8, -128);
53     assert_eq!(r.next_back(), Some(-128));
54     assert_eq!(r.next_back(), None);
55
56     // degenerate
57     r = RangeInclusive::new(1, -1);
58     assert_eq!(r.size_hint(), (0, Some(0)));
59     assert_eq!(r.next(), None);
60 }
61
62 #[test]
63 fn test_range_is_empty() {
64     use core::f32::*;
65
66     assert!(!(0.0..10.0).is_empty());
67     assert!((-0.0..0.0).is_empty());
68     assert!((10.0..0.0).is_empty());
69
70     assert!(!(NEG_INFINITY..INFINITY).is_empty());
71     assert!((EPSILON..NAN).is_empty());
72     assert!((NAN..EPSILON).is_empty());
73     assert!((NAN..NAN).is_empty());
74
75     assert!(!(0.0..=10.0).is_empty());
76     assert!(!(-0.0..=0.0).is_empty());
77     assert!((10.0..=0.0).is_empty());
78
79     assert!(!(NEG_INFINITY..=INFINITY).is_empty());
80     assert!((EPSILON..=NAN).is_empty());
81     assert!((NAN..=EPSILON).is_empty());
82     assert!((NAN..=NAN).is_empty());
83 }
84
85 #[test]
86 fn test_bound_cloned_unbounded() {
87     assert_eq!(Bound::<&u32>::Unbounded.cloned(), Bound::Unbounded);
88 }
89
90 #[test]
91 fn test_bound_cloned_included() {
92     assert_eq!(Bound::Included(&3).cloned(), Bound::Included(3));
93 }
94
95 #[test]
96 fn test_bound_cloned_excluded() {
97     assert_eq!(Bound::Excluded(&3).cloned(), Bound::Excluded(3));
98 }