use crate::core::value::Value;
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "use_serde", derive(serde::Deserialize, serde::Serialize))]
pub enum Item<Op, Val = Value>
where
Op: core::fmt::Debug,
Val: core::fmt::Debug,
{
Operator(Op),
Value(Val),
}
#[cfg(test)]
mod tests {
use crate::core::item::Item::{self, *};
use crate::core::value::Value::*;
#[test]
fn test_eq() {
let op_item1: Item<u8> = Operator(u8::default());
let op_item2: Item<u8> = Operator(u8::default());
assert_eq!(op_item1, op_item2);
let val_item1: Item<u8> = Value(Integer(i128::default()));
let val_item2: Item<u8> = Value(Integer(i128::default()));
assert_eq!(val_item1, val_item2);
}
#[test]
fn test_ne() {
let op_item1: Item<u8> = Operator(u8::default());
let op_item2: Item<u8> = Operator(u8::default() + 1);
assert_ne!(op_item1, op_item2);
let val_item1: Item<u8> = Value(Integer(i128::default()));
let val_item2: Item<u8> = Value(Integer(i128::default() + 1));
assert_ne!(val_item1, val_item2);
assert_ne!(op_item1, val_item1);
assert_ne!(op_item1, val_item2);
assert_ne!(op_item2, val_item1);
assert_ne!(op_item2, val_item2);
}
}