1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use super::*;

//TODO: make trait and implement it

impl<T> Asserter<T>
where
    T: Copy + PartialOrd + std::fmt::Debug + std::fmt::Display,
{
    pub fn is_smaller_than(self, expected: T) {
        if self.value >= expected {
            panic!("The value {} is not smaller than {}", self.value, expected)
        }
    }

    pub fn is_smaller_than_or_equal_to(self, expected: T) {
        if self.value > expected {
            panic!(
                "The value {} is not smaller than or equal to {}",
                self.value, expected
            )
        }
    }

    pub fn is_greater_than(self, expected: T) {
        if self.value <= expected {
            panic!("The value {} is not greater than {}", self.value, expected)
        }
    }

    pub fn is_greater_than_or_equal_to(self, expected: T) {
        if self.value < expected {
            panic!("The value {} is not greater than {}", self.value, expected)
        }
    }

    pub fn is_in_range(self, expected_lower_range: T, expected_upper_range: T) {
        if self.value < expected_lower_range || self.value > expected_upper_range {
            panic!(
                "The value {} is not in range [{},{}]",
                self.value, expected_lower_range, expected_upper_range
            );
        }
    }

    pub fn is_not_in_range(self, expected_lower_range: T, expected_upper_range: T) {
        if self.value >= expected_lower_range && self.value <= expected_upper_range {
            panic!(
                "The value {} is unexpectedly in range [{},{}]",
                self.value, expected_lower_range, expected_upper_range
            );
        }
    }
}