hydro2_basic_operators/
tri_to_single_op.rs1crate::ix!();
3
4#[derive(NamedItem, Operator, Debug)]
8#[operator(
9 execute="tri_sum",
10 opcode="BasicOpCode::TriToSingleOp",
11 input0="i32",
12 input1="i32",
13 input2="i32",
14 output0="i32"
15)]
16pub struct TriToSingleOp {
17 name: String,
18}
19
20impl TriToSingleOp {
21 pub fn new() -> Self {
22 Self { name: "TriToSingleOp".into() }
23 }
24
25 async fn tri_sum(&self, a: &i32, b: &i32, c: &i32) -> NetResult<i32> {
26 let sum = *a + *b + *c;
27 info!("TriToSingleOp => a={}, b={}, c={} => sum={}", a, b, c, sum);
28 Ok(sum)
29 }
30}
31
32#[cfg(test)]
33mod tri_to_single_op_tests {
34 use super::*;
35
36 #[tokio::test]
37 async fn test_tri_to_single_op_basic() -> Result<(), NetworkError> {
38 let op = TriToSingleOp::new();
39 let i0 = TriToSingleOpIO::Input0(2);
40 let i1 = TriToSingleOpIO::Input1(3);
41 let i2 = TriToSingleOpIO::Input2(4);
42 let input = [Some(&i0), Some(&i1), Some(&i2), None];
43 let mut out = [None,None,None,None];
44 op.execute(input, &mut out).await?;
45 assert_eq!(out[0], Some(TriToSingleOpIO::Output0(9)));
46 Ok(())
47 }
48}