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}