#[test]
fn test_eval_if_step_then_branch() {
let if_step = V2IfStep {
cond: V2Condition::Comparison(V2Comparison {
op: V2ComparisonOp::Gt,
args: vec![
V2Expr::Pipe(V2Pipe {
start: V2Start::PipeValue,
steps: vec![],
}),
V2Expr::Pipe(V2Pipe {
start: V2Start::Literal(json!(10)),
steps: vec![],
}),
],
}),
then_branch: V2Pipe {
start: V2Start::PipeValue,
steps: vec![V2Step::Op(V2OpStep {
op: "multiply".to_string(),
args: vec![V2Expr::Pipe(V2Pipe {
start: V2Start::Literal(json!(2)),
steps: vec![],
})],
})],
},
else_branch: None,
};
let record = json!({});
let out = json!({});
let ctx = V2EvalContext::new();
let result = eval_v2_if_step(
&if_step,
EvalValue::Value(json!(20)),
&record,
None,
&out,
"test",
&ctx,
);
assert!(matches!(result, Ok(EvalValue::Value(v)) if v == json!(40.0)));
}
#[test]
fn test_eval_if_step_else_branch() {
let if_step = V2IfStep {
cond: V2Condition::Comparison(V2Comparison {
op: V2ComparisonOp::Gt,
args: vec![
V2Expr::Pipe(V2Pipe {
start: V2Start::PipeValue,
steps: vec![],
}),
V2Expr::Pipe(V2Pipe {
start: V2Start::Literal(json!(10)),
steps: vec![],
}),
],
}),
then_branch: V2Pipe {
start: V2Start::PipeValue,
steps: vec![V2Step::Op(V2OpStep {
op: "multiply".to_string(),
args: vec![V2Expr::Pipe(V2Pipe {
start: V2Start::Literal(json!(2)),
steps: vec![],
})],
})],
},
else_branch: Some(V2Pipe {
start: V2Start::PipeValue,
steps: vec![V2Step::Op(V2OpStep {
op: "multiply".to_string(),
args: vec![V2Expr::Pipe(V2Pipe {
start: V2Start::Literal(json!(0.5)),
steps: vec![],
})],
})],
}),
};
let record = json!({});
let out = json!({});
let ctx = V2EvalContext::new();
let result = eval_v2_if_step(
&if_step,
EvalValue::Value(json!(5)),
&record,
None,
&out,
"test",
&ctx,
);
assert!(matches!(result, Ok(EvalValue::Value(v)) if v == json!(2.5)));
}
#[test]
fn test_eval_if_step_no_else_returns_pipe_value() {
let if_step = V2IfStep {
cond: V2Condition::Comparison(V2Comparison {
op: V2ComparisonOp::Gt,
args: vec![
V2Expr::Pipe(V2Pipe {
start: V2Start::PipeValue,
steps: vec![],
}),
V2Expr::Pipe(V2Pipe {
start: V2Start::Literal(json!(10)),
steps: vec![],
}),
],
}),
then_branch: V2Pipe {
start: V2Start::PipeValue,
steps: vec![V2Step::Op(V2OpStep {
op: "multiply".to_string(),
args: vec![V2Expr::Pipe(V2Pipe {
start: V2Start::Literal(json!(2)),
steps: vec![],
})],
})],
},
else_branch: None,
};
let record = json!({});
let out = json!({});
let ctx = V2EvalContext::new();
let result = eval_v2_if_step(
&if_step,
EvalValue::Value(json!(5)),
&record,
None,
&out,
"test",
&ctx,
);
assert!(matches!(result, Ok(EvalValue::Value(v)) if v == json!(5)));
}