ctoolbox/formats/eite/util/
math.rs

1// Numeric predicates for i32
2pub fn is_nonnegative_i32(n: i32) -> bool {
3    n >= 0
4}
5pub fn is_negative_i32(n: i32) -> bool {
6    n < 0
7}
8pub fn is_positive_i32(n: i32) -> bool {
9    n > 0
10}
11pub fn is_nonpositive_i32(n: i32) -> bool {
12    n <= 0
13}
14pub fn is_even_i32(n: i32) -> bool {
15    n % 2 == 0
16}
17pub fn is_odd_i32(n: i32) -> bool {
18    n % 2 != 0
19}
20
21pub fn int_is_between_i32(n: i32, a: i32, b: i32) -> bool {
22    n >= a && n <= b
23}
24
25// Numeric predicates for u32
26pub fn is_nonnegative_u32(_n: u32) -> bool {
27    true
28} // Always true for u32
29pub fn is_negative_u32(_n: u32) -> bool {
30    false
31} // Always false for u32
32pub fn is_positive_u32(n: u32) -> bool {
33    n > 0
34}
35pub fn is_nonpositive_u32(n: u32) -> bool {
36    n == 0
37}
38pub fn is_even_u32(n: u32) -> bool {
39    n.is_multiple_of(2)
40}
41pub fn is_odd_u32(n: u32) -> bool {
42    !n.is_multiple_of(2)
43}
44
45pub fn int_is_between_u32(n: u32, a: u32, b: u32) -> bool {
46    n >= a && n <= b
47}
48
49// ---------------
50// Inequality wrappers
51// ---------------
52
53pub fn ge_int(a: i32, b: i32) -> bool {
54    a >= b
55}
56pub fn le_int(a: i32, b: i32) -> bool {
57    a <= b
58}
59pub fn ngt_int(a: i32, b: i32) -> bool {
60    a <= b
61}
62pub fn nlt_int(a: i32, b: i32) -> bool {
63    a >= b
64}
65pub fn nge_int(a: i32, b: i32) -> bool {
66    a < b
67}
68pub fn nle_int(a: i32, b: i32) -> bool {
69    a > b
70}
71
72#[cfg(test)]
73mod tests {
74    use super::*;
75
76    #[crate::ctb_test]
77    fn test_number_predicates() {
78        assert!(is_nonnegative_u32(0));
79        assert!(!is_negative_u32(0));
80        assert!(is_positive_u32(5));
81        assert!(is_nonpositive_u32(0));
82        assert!(is_even_u32(4));
83        assert!(is_odd_u32(5));
84        assert!(int_is_between_u32(5, 1, 10));
85        assert!(!int_is_between_u32(0, 1, 10));
86
87        assert!(is_nonnegative_i32(0));
88        assert!(is_negative_i32(-1));
89        assert!(!is_negative_i32(0));
90        assert!(is_positive_i32(5));
91        assert!(is_nonpositive_i32(0));
92        assert!(is_even_i32(4));
93        assert!(is_odd_i32(5));
94        assert!(int_is_between_i32(5, 1, 10));
95        assert!(!int_is_between_i32(0, 1, 10));
96    }
97}