hydro2_basic_operators/
split_and_double_op.rs1crate::ix!();
3
4#[derive(NamedItem, Operator, Debug)]
8#[operator(
9 execute="split_and_double",
10 opcode="BasicOpCode::SplitAndDoubleOp",
11 input0="i32",
12 output0="i32",
13 output1="i32"
14)]
15pub struct SplitAndDoubleOp {
16 name: String,
17}
18
19impl Default for SplitAndDoubleOp {
20 fn default() -> Self {
21 Self { name: "SplitAndDoubleOp".into() }
22 }
23}
24
25impl SplitAndDoubleOp {
26
27 async fn split_and_double(&self, val: &i32) -> NetResult<(i32,i32)> {
28 let out0 = *val;
29 let out1 = *val * 2;
30 Ok((out0, out1))
31 }
32}
33
34#[cfg(test)]
35mod split_and_double_op_tests {
36 use super::*;
37
38 #[tokio::test]
39 async fn test_split_and_double() -> Result<(), NetworkError> {
40 let op = SplitAndDoubleOp::default();
41 let i0 = SplitAndDoubleOpIO::Input0(10);
42 let input = [Some(&i0), None, None, None];
43 let mut out = [None, None, None, None];
44 op.execute(input, &mut out).await?;
45
46 assert_eq!(out[0], Some(SplitAndDoubleOpIO::Output0(10)));
47 assert_eq!(out[1], Some(SplitAndDoubleOpIO::Output1(20)));
48 Ok(())
49 }
50}