hydro2_basic_operators/
merge2_op.rs

1// ---------------- [ File: src/merge2_op.rs ]
2crate::ix!();
3
4// --------------------------------------
5// Merge2Op
6// --------------------------------------
7#[derive(NamedItem, Operator, Debug)]
8#[operator(
9    execute="merge_op",
10    opcode="BasicOpCode::Merge2Op",
11    input0="i32",
12    input1="i32",
13    output0="i32"
14)]
15pub struct Merge2Op {
16    name: String,
17}
18
19impl Default for Merge2Op {
20    fn default() -> Self {
21        Self { name: "Merge2Op".to_string() }
22    }
23}
24
25impl Merge2Op {
26
27    async fn merge_op(&self, a: &i32, b: &i32) -> NetResult<i32> {
28        let sum = *a + *b;
29        info!("Merge2Op => a={}, b={}, sum={}", a, b, sum);
30        Ok(sum)
31    }
32}
33
34#[cfg(test)]
35mod merge2_op_tests {
36    use super::*;
37
38    #[tokio::test]
39    async fn test_merge2_op_basic() -> Result<(), NetworkError> {
40        let op = Merge2Op::default();
41        let i0 = Merge2OpIO::Input0(12);
42        let i1 = Merge2OpIO::Input1(8);
43        let input = [Some(&i0), Some(&i1), None, None];
44        let mut out = [None,None,None,None];
45        op.execute(input, &mut out).await?;
46        assert_eq!(out[0], Some(Merge2OpIO::Output0(20)));
47        Ok(())
48    }
49
50    #[tokio::test]
51    async fn test_merge2_op_negatives() -> Result<(), NetworkError> {
52        let op = Merge2Op::default();
53        let in0 = Merge2OpIO::Input0(-5);
54        let in1 = Merge2OpIO::Input1(-10);
55        let input = [Some(&in0), Some(&in1), None, None];
56        let mut out = [None,None,None,None];
57        op.execute(input, &mut out).await?;
58        assert_eq!(out[0], Some(Merge2OpIO::Output0(-15)));
59        Ok(())
60    }
61}