rbatis_codegen/
ops_bit_and.rs1use crate::ops::{AsProxy, BitAnd};
2use crate::ops_macros::{
3 impl_bool_scalar_binary_op, impl_bool_value_binary_op, impl_numeric_binary_op,
4 impl_same_type_binary_op,
5};
6use rbs::Value;
7
8fn op_bit_and_u64(value: &Value, other: u64) -> u64 {
9 value.u64() & other
10}
11
12fn op_bit_and_i64(value: &Value, other: i64) -> i64 {
13 value.i64() & other
14}
15
16impl_bool_value_binary_op!(BitAnd, op_bitand, &);
17impl_bool_scalar_binary_op!(BitAnd, op_bitand, &);
18impl_numeric_binary_op!(
19 BitAnd,
20 op_bitand,
21 op_bit_and_u64,
22 op_bit_and_u64,
23 [u8, u16, u32, u64],
24 u64
25);
26impl_numeric_binary_op!(
27 BitAnd,
28 op_bitand,
29 op_bit_and_i64,
30 op_bit_and_i64,
31 [i8, i16, i32, i64, isize, usize],
32 i64
33);
34impl_same_type_binary_op!(
35 BitAnd,
36 op_bitand,
37 &,
38 [u8, u16, u32, u64, i8, i16, i32, i64, isize, usize, bool]
39);
40
41#[cfg(test)]
42mod test {
43 use crate::ops::BitAnd;
44 use rbs::Value;
45
46 #[test]
47 fn test_bitand() {
48 assert_eq!(Value::I32(5).op_bitand(3i32), 1i64);
49 assert_eq!((&Value::I32(5)).op_bitand(&3i32), 1i64);
50 assert!(Value::Bool(true).op_bitand(&&Value::Bool(true)));
51 assert!(!true.op_bitand(&false));
52 }
53}