#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SearchMode {
Set,
Both,
SetRange,
BothRange,
}
impl SearchMode {
pub fn is_exact_search(&self) -> bool {
matches!(self, SearchMode::Set | SearchMode::Both)
}
pub fn is_data_search(&self) -> bool {
matches!(self, SearchMode::Both | SearchMode::BothRange)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_is_exact_search() {
assert!(SearchMode::Set.is_exact_search());
assert!(SearchMode::Both.is_exact_search());
assert!(!SearchMode::SetRange.is_exact_search());
assert!(!SearchMode::BothRange.is_exact_search());
}
#[test]
fn test_is_data_search() {
assert!(!SearchMode::Set.is_data_search());
assert!(SearchMode::Both.is_data_search());
assert!(!SearchMode::SetRange.is_data_search());
assert!(SearchMode::BothRange.is_data_search());
}
#[test]
fn test_equality() {
assert_eq!(SearchMode::Set, SearchMode::Set);
assert_ne!(SearchMode::Set, SearchMode::SetRange);
}
#[test]
fn test_all_variants() {
let modes = [
SearchMode::Set,
SearchMode::Both,
SearchMode::SetRange,
SearchMode::BothRange,
];
assert_eq!(modes.len(), 4);
assert!(SearchMode::Set.is_exact_search());
assert!(SearchMode::Both.is_exact_search());
assert!(!SearchMode::SetRange.is_exact_search());
assert!(!SearchMode::BothRange.is_exact_search());
assert!(!SearchMode::Set.is_data_search());
assert!(SearchMode::Both.is_data_search());
assert!(!SearchMode::SetRange.is_data_search());
assert!(SearchMode::BothRange.is_data_search());
}
}