in crates/datafusion/src/util/expr.rs [158:214]
fn test_convert_binary_expr_extensive() {
// list of test cases with different operators and data types
let test_cases = vec![
(
col("int32_col").eq(lit(42i32)),
Some(HudiFilter {
field_name: String::from("int32_col"),
operator: ExprOperator::Eq,
field_value: String::from("42"),
}),
),
(
col("int64_col").gt_eq(lit(100i64)),
Some(HudiFilter {
field_name: String::from("int64_col"),
operator: ExprOperator::Gte,
field_value: String::from("100"),
}),
),
(
col("float64_col").lt(lit(32.666)),
Some(HudiFilter {
field_name: String::from("float64_col"),
operator: ExprOperator::Lt,
field_value: "32.666".to_string(),
}),
),
(
col("string_col").not_eq(lit("test")),
Some(HudiFilter {
field_name: String::from("string_col"),
operator: ExprOperator::Ne,
field_value: String::from("test"),
}),
),
];
let filters: Vec<Expr> = test_cases.iter().map(|(expr, _)| expr.clone()).collect();
let result = exprs_to_filters(&filters);
let expected_filters: Vec<&HudiFilter> = test_cases
.iter()
.filter_map(|(_, opt_filter)| opt_filter.as_ref())
.collect();
assert_eq!(result.len(), expected_filters.len());
for (result, expected_filter) in result.iter().zip(expected_filters.iter()) {
assert_eq!(
result,
&(
expected_filter.field_name.clone(),
expected_filter.operator.to_string(),
expected_filter.field_value.clone()
)
);
}
}