#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CounterComparator {
Eq(i64),
Lt(i64),
Gt(i64),
Ne(i64),
Nil,
}
impl CounterComparator {
pub fn matches(self, current: i64) -> bool {
match self {
Self::Eq(expected) => current == expected,
Self::Lt(expected) => current < expected,
Self::Gt(expected) => current > expected,
Self::Ne(expected) => current != expected,
Self::Nil => true,
}
}
pub(crate) fn as_lua_parts(self) -> (&'static str, i64) {
match self {
Self::Eq(expected) => ("eq", expected),
Self::Lt(expected) => ("lt", expected),
Self::Gt(expected) => ("gt", expected),
Self::Ne(expected) => ("ne", expected),
Self::Nil => ("nil", 0),
}
}
}
#[cfg(test)]
mod tests {
use super::CounterComparator;
#[test]
fn matches_uses_embedded_operand_and_nil_always_matches() {
assert!(CounterComparator::Eq(5).matches(5));
assert!(CounterComparator::Lt(5).matches(4));
assert!(CounterComparator::Gt(5).matches(6));
assert!(CounterComparator::Ne(5).matches(4));
assert!(CounterComparator::Nil.matches(-99));
assert!(!CounterComparator::Eq(5).matches(4));
assert!(!CounterComparator::Lt(5).matches(5));
assert!(!CounterComparator::Gt(5).matches(5));
assert!(!CounterComparator::Ne(5).matches(5));
}
}