bounds/
lib.rs

1mod bound;
2mod bounds;
3mod comparison;
4pub(crate) mod sign_bounds;
5
6pub use crate::bound::{Bound, BoundType};
7pub use crate::bounds::Bounds;
8pub use crate::comparison::Comparison;
9
10#[cfg(test)]
11mod test;
12
13#[macro_export]
14macro_rules! bounds {
15    ($val:expr) => {
16        $crate::Bounds::Exact($val)
17    };
18    ($a:expr,$b:expr) => {
19        $crate::Bounds::Range(
20            Some($crate::Bound::inclusive($a)),
21            Some($crate::Bound::inclusive($b)),
22        )
23    };
24    (~$a:expr,$b:expr) => {
25        $crate::Bounds::Range(
26            Some($crate::Bound::exclusive($a)),
27            Some($crate::Bound::inclusive($b)),
28        )
29    };
30    ($a:expr,~$b:expr) => {
31        $crate::Bounds::Range(
32            Some($crate::Bound::inclusive($a)),
33            Some($crate::Bound::exclusive($b)),
34        )
35    };
36    (~$a:expr,~$b:expr) => {
37        $crate::Bounds::Range(
38            Some($crate::Bound::exclusive($a)),
39            Some($crate::Bound::exclusive($b)),
40        )
41    };
42    (,$b:expr) => {
43        $crate::Bounds::Range(None, Some($crate::Bound::inclusive($b)))
44    };
45    (,~$b:expr) => {
46        $crate::Bounds::Range(None, Some($crate::Bound::exclusive($b)))
47    };
48    ($a:expr,) => {
49        $crate::Bounds::Range(Some($crate::Bound::inclusive($a)), None)
50    };
51    (~$a:expr,) => {
52        $crate::Bounds::Range(Some($crate::Bound::exclusive($a)), None)
53    };
54    (,) => {
55        $crate::Bounds::Range(None, None)
56    };
57}
58
59#[test]
60fn test_macro() {
61    assert_eq!(bounds!(3), Bounds::Exact(3));
62    assert_eq!(
63        bounds!(1, 2),
64        Bounds::Range(Some(Bound::inclusive(1)), Some(Bound::inclusive(2)))
65    );
66    assert_eq!(
67        bounds!(~1, 2),
68        Bounds::Range(Some(Bound::exclusive(1)), Some(Bound::inclusive(2)))
69    );
70    assert_eq!(
71        bounds!(1, ~2),
72        Bounds::Range(Some(Bound::inclusive(1)), Some(Bound::exclusive(2)))
73    );
74    assert_eq!(
75        bounds!(~1, ~2),
76        Bounds::Range(Some(Bound::exclusive(1)), Some(Bound::exclusive(2)))
77    );
78    assert_eq!(bounds!(,2), Bounds::Range(None, Some(Bound::inclusive(2))));
79    assert_eq!(bounds!(,~2), Bounds::Range(None, Some(Bound::exclusive(2))));
80    assert_eq!(bounds!(1,), Bounds::Range(Some(Bound::inclusive(1)), None));
81    assert_eq!(bounds!(,), Bounds::<u32>::Range(None, None));
82}