use crate::basic::value::Value;
use std::hash::{Hash, Hasher};
#[derive(Clone, Debug, PartialEq)]
pub enum Assert {
Equals(Value),
NotEquals(Value),
GreaterThan(Value),
GreaterThanEquals(Value),
LessThan(Value),
LessThanEquals(Value),
}
impl Assert {
pub fn eq(value: impl Into<Value>) -> Self {
Assert::Equals(value.into())
}
pub fn not_eq(value: impl Into<Value>) -> Self {
Assert::NotEquals(value.into())
}
pub fn gt_eq(value: impl Into<Value>) -> Self {
Assert::GreaterThanEquals(value.into())
}
pub fn lt_eq(value: impl Into<Value>) -> Self {
Assert::LessThanEquals(value.into())
}
pub fn gt(value: impl Into<Value>) -> Self {
Assert::GreaterThan(value.into())
}
pub fn lt(value: impl Into<Value>) -> Self {
Assert::LessThan(value.into())
}
}
impl Assert {
pub fn value(&self) -> Value {
match self {
Assert::Equals(v)
| Assert::NotEquals(v)
| Assert::GreaterThan(v)
| Assert::LessThan(v)
| Assert::GreaterThanEquals(v)
| Assert::LessThanEquals(v) => *v,
}
}
}
impl Hash for Assert {
fn hash<H: Hasher>(&self, state: &mut H) {
match self {
Assert::Equals(v) => {
0_u8.hash(state);
v.hash(state);
},
Assert::NotEquals(v) => {
1_u8.hash(state);
v.hash(state);
},
Assert::GreaterThanEquals(v) => {
2_u8.hash(state);
v.hash(state);
},
Assert::LessThanEquals(v) => {
3_u8.hash(state);
v.hash(state);
},
Assert::GreaterThan(v) => {
4_u8.hash(state);
v.hash(state);
},
Assert::LessThan(v) => {
5_u8.hash(state);
v.hash(state);
},
}
}
}
pub fn compare_values(comparison: &Assert, value: &Value) -> bool {
match comparison {
Assert::Equals(v) => value == v,
Assert::NotEquals(v) => value != v,
Assert::GreaterThanEquals(v) => value >= v,
Assert::LessThan(v) => value < v,
Assert::GreaterThan(v) => value > v,
Assert::LessThanEquals(v) => value <= v,
}
}