simple_datetime_rs/utils/
parse_util.rs

1pub fn find_any<'a, 'b, T: PartialEq>(
2    input: &'a [T],
3    check_set: &'b [T],
4) -> Option<(&'a T, usize)> {
5    for i in 0..input.len() {
6        if value_in(&input[i], check_set) {
7            return Some((&input[i], i));
8        }
9    }
10    None
11}
12#[inline]
13pub fn value_in<T: PartialEq>(value: &T, set: &[T]) -> bool {
14    for v in set {
15        if v == value {
16            return true;
17        }
18    }
19    false
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test_value_in() {
28        let set = [1, 2, 3, 4, 5];
29
30        assert!(value_in(&1, &set));
31        assert!(value_in(&3, &set));
32        assert!(value_in(&5, &set));
33
34        assert!(!value_in(&0, &set));
35        assert!(!value_in(&6, &set));
36        assert!(!value_in(&10, &set));
37
38        let empty_set: [i32; 0] = [];
39        assert!(!value_in(&1, &empty_set));
40    }
41
42    #[test]
43    fn test_value_in_strings() {
44        let set = ["hello", "world", "test"];
45
46        assert!(value_in(&"hello", &set));
47        assert!(value_in(&"world", &set));
48        assert!(value_in(&"test", &set));
49        assert!(!value_in(&"not_in_set", &set));
50    }
51
52    #[test]
53    fn test_find_any() {
54        let input = [1, 2, 3, 4, 5, 6];
55        let check_set = [3, 7, 9];
56
57        let result = find_any(&input, &check_set);
58        assert!(result.is_some());
59        let (value, index) = result.unwrap();
60        assert_eq!(*value, 3);
61        assert_eq!(index, 2);
62    }
63
64    #[test]
65    fn test_find_any_not_found() {
66        let input = [1, 2, 3, 4, 5];
67        let check_set = [6, 7, 8];
68
69        let result = find_any(&input, &check_set);
70        assert!(result.is_none());
71    }
72
73    #[test]
74    fn test_find_any_empty_input() {
75        let input: [i32; 0] = [];
76        let check_set = [1, 2, 3];
77
78        let result = find_any(&input, &check_set);
79        assert!(result.is_none());
80    }
81
82    #[test]
83    fn test_find_any_empty_check_set() {
84        let input = [1, 2, 3, 4, 5];
85        let check_set: [i32; 0] = [];
86
87        let result = find_any(&input, &check_set);
88        assert!(result.is_none());
89    }
90
91    #[test]
92    fn test_find_any_first_match() {
93        let input = [1, 2, 3, 4, 5];
94        let check_set = [2, 3, 4];
95
96        let result = find_any(&input, &check_set);
97        assert!(result.is_some());
98        let (value, index) = result.unwrap();
99        assert_eq!(*value, 2);
100        assert_eq!(index, 1);
101    }
102
103    #[test]
104    fn test_find_any_strings() {
105        let input = ["hello", "world", "test", "rust"];
106        let check_set = ["test", "python"];
107
108        let result = find_any(&input, &check_set);
109        assert!(result.is_some());
110        let (value, index) = result.unwrap();
111        assert_eq!(*value, "test");
112        assert_eq!(index, 2);
113    }
114}