reference_interval/
reference_interval.rs1pub trait ReferenceInterval<T: PartialOrd> {
3 fn lower(&self) -> &T;
5
6 fn upper(&self) -> &T;
8
9 fn includes(&self, value: T) -> bool {
11 value >= *self.lower() && value <= *self.upper()
12 }
13
14 fn excludes(&self, value: T) -> bool {
16 value < *self.lower() || value > *self.upper()
17 }
18
19 fn excludes_lower(&self, value: T) -> bool {
21 value < *self.lower()
22 }
23
24 fn excludes_upper(&self, value: T) -> bool {
26 value > *self.upper()
27 }
28
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 struct ReferenceIntervalStruct<T: PartialOrd> {
36 pub lower: T,
37 pub upper: T,
38 }
39
40 impl<T: PartialOrd> ReferenceInterval<T> for ReferenceIntervalStruct<T> {
41 fn lower(&self) -> &T {
42 &self.lower
43 }
44 fn upper(&self) -> &T {
45 &self.upper
46 }
47 }
48
49 #[test]
50 fn test_includes() {
51 let x = ReferenceIntervalStruct {
52 lower: 11,
53 upper: 97,
54 };
55 assert_eq!(x.includes(10), false);
57 assert_eq!(x.includes(11), true);
58 assert_eq!(x.includes(12), true);
59 assert_eq!(x.includes(96), true);
61 assert_eq!(x.includes(97), true);
62 assert_eq!(x.includes(98), false);
63 }
64
65 #[test]
66 fn test_excludes() {
67 let x = ReferenceIntervalStruct {
68 lower: 11,
69 upper: 97,
70 };
71 assert_eq!(x.excludes(10), true);
73 assert_eq!(x.excludes(11), false);
74 assert_eq!(x.excludes(12), false);
75 assert_eq!(x.excludes(96), false);
77 assert_eq!(x.excludes(97), false);
78 assert_eq!(x.excludes(98), true);
79 }
80
81 #[test]
82 fn test_excludes_lower() {
83 let x = ReferenceIntervalStruct {
84 lower: 11,
85 upper: 97,
86 };
87 assert_eq!(x.excludes_lower(10), true);
89 assert_eq!(x.excludes_lower(11), false);
90 assert_eq!(x.excludes_lower(12), false);
91 assert_eq!(x.excludes_lower(96), false);
93 assert_eq!(x.excludes_lower(97), false);
94 assert_eq!(x.excludes_lower(98), false);
95 }
96
97 #[test]
98 fn test_excludes_upper() {
99 let x = ReferenceIntervalStruct {
100 lower: 11,
101 upper: 97,
102 };
103 assert_eq!(x.excludes_upper(10), false);
105 assert_eq!(x.excludes_upper(11), false);
106 assert_eq!(x.excludes_upper(12), false);
107 assert_eq!(x.excludes_upper(96), false);
109 assert_eq!(x.excludes_upper(97), false);
110 assert_eq!(x.excludes_upper(98), true);
111 }
112
113}