]> git.lizzy.rs Git - rust.git/blob - library/core/tests/ops.rs
Merge commit '03f01bbe901d60b71cf2c5ec766aef5e532ab79d' into update_cg_clif-2020...
[rust.git] / library / core / 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     assert!(!(0.0..10.0).is_empty());
65     assert!((-0.0..0.0).is_empty());
66     assert!((10.0..0.0).is_empty());
67
68     assert!(!(f32::NEG_INFINITY..f32::INFINITY).is_empty());
69     assert!((f32::EPSILON..f32::NAN).is_empty());
70     assert!((f32::NAN..f32::EPSILON).is_empty());
71     assert!((f32::NAN..f32::NAN).is_empty());
72
73     assert!(!(0.0..=10.0).is_empty());
74     assert!(!(-0.0..=0.0).is_empty());
75     assert!((10.0..=0.0).is_empty());
76
77     assert!(!(f32::NEG_INFINITY..=f32::INFINITY).is_empty());
78     assert!((f32::EPSILON..=f32::NAN).is_empty());
79     assert!((f32::NAN..=f32::EPSILON).is_empty());
80     assert!((f32::NAN..=f32::NAN).is_empty());
81 }
82
83 #[test]
84 fn test_bound_cloned_unbounded() {
85     assert_eq!(Bound::<&u32>::Unbounded.cloned(), Bound::Unbounded);
86 }
87
88 #[test]
89 fn test_bound_cloned_included() {
90     assert_eq!(Bound::Included(&3).cloned(), Bound::Included(3));
91 }
92
93 #[test]
94 fn test_bound_cloned_excluded() {
95     assert_eq!(Bound::Excluded(&3).cloned(), Bound::Excluded(3));
96 }