Skip to main content

rbatis_codegen/
ops_not.rs

1use crate::ops::Not;
2use crate::ops_macros::impl_value_unary_op;
3use rbs::Value;
4
5fn op_not(left: Value) -> Value {
6    match left {
7        Value::I32(value) => Value::I32(!value),
8        Value::I64(value) => Value::I64(!value),
9        Value::U32(value) => Value::U32(!value),
10        Value::U64(value) => Value::U64(!value),
11        Value::Bool(value) => Value::Bool(!value),
12        Value::Ext(_, value) => op_not(*value),
13        _ => Value::Null,
14    }
15}
16
17impl_value_unary_op!(Not, op_not, op_not);
18
19#[cfg(test)]
20mod test {
21    use crate::ops::Not;
22    use rbs::Value;
23
24    #[test]
25    fn test_not() {
26        assert_eq!(Value::Bool(true).op_not(), Value::Bool(false));
27        assert_eq!((&Value::I64(0)).op_not(), Value::I64(-1));
28        assert_eq!((&&Value::U32(0)).op_not(), Value::U32(u32::MAX));
29    }
30}