pub fn find_any<'a, 'b, T: PartialEq>(
input: &'a [T],
check_set: &'b [T],
) -> Option<(&'a T, usize)> {
for i in 0..input.len() {
if value_in(&input[i], check_set) {
return Some((&input[i], i));
}
}
None
}
#[inline]
pub fn value_in<T: PartialEq>(value: &T, set: &[T]) -> bool {
for v in set {
if v == value {
return true;
}
}
false
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_value_in() {
let set = [1, 2, 3, 4, 5];
assert!(value_in(&1, &set));
assert!(value_in(&3, &set));
assert!(value_in(&5, &set));
assert!(!value_in(&0, &set));
assert!(!value_in(&6, &set));
assert!(!value_in(&10, &set));
let empty_set: [i32; 0] = [];
assert!(!value_in(&1, &empty_set));
}
#[test]
fn test_value_in_strings() {
let set = ["hello", "world", "test"];
assert!(value_in(&"hello", &set));
assert!(value_in(&"world", &set));
assert!(value_in(&"test", &set));
assert!(!value_in(&"not_in_set", &set));
}
#[test]
fn test_find_any() {
let input = [1, 2, 3, 4, 5, 6];
let check_set = [3, 7, 9];
let result = find_any(&input, &check_set);
assert!(result.is_some());
let (value, index) = result.unwrap();
assert_eq!(*value, 3);
assert_eq!(index, 2);
}
#[test]
fn test_find_any_not_found() {
let input = [1, 2, 3, 4, 5];
let check_set = [6, 7, 8];
let result = find_any(&input, &check_set);
assert!(result.is_none());
}
#[test]
fn test_find_any_empty_input() {
let input: [i32; 0] = [];
let check_set = [1, 2, 3];
let result = find_any(&input, &check_set);
assert!(result.is_none());
}
#[test]
fn test_find_any_empty_check_set() {
let input = [1, 2, 3, 4, 5];
let check_set: [i32; 0] = [];
let result = find_any(&input, &check_set);
assert!(result.is_none());
}
#[test]
fn test_find_any_first_match() {
let input = [1, 2, 3, 4, 5];
let check_set = [2, 3, 4];
let result = find_any(&input, &check_set);
assert!(result.is_some());
let (value, index) = result.unwrap();
assert_eq!(*value, 2);
assert_eq!(index, 1);
}
#[test]
fn test_find_any_strings() {
let input = ["hello", "world", "test", "rust"];
let check_set = ["test", "python"];
let result = find_any(&input, &check_set);
assert!(result.is_some());
let (value, index) = result.unwrap();
assert_eq!(*value, "test");
assert_eq!(index, 2);
}
}