in crates/iceberg/src/expr/visitors/inclusive_metrics_evaluator.rs [1222:1345]
fn test_string_starts_with() {
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "a"),
&get_test_file_1(),
true,
)
.unwrap();
assert!(result, "Should read: no stats");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "a"),
&get_test_file_2(),
true,
)
.unwrap();
assert!(result, "Should read: range matches");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "aa"),
&get_test_file_2(),
true,
)
.unwrap();
assert!(result, "Should read: range matches");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "aaa"),
&get_test_file_2(),
true,
)
.unwrap();
assert!(result, "Should read: range matches");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "1s"),
&get_test_file_3(),
true,
)
.unwrap();
assert!(result, "Should read: range matches");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "1str1x"),
&get_test_file_3(),
true,
)
.unwrap();
assert!(result, "Should read: range matches");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "ff"),
&get_test_file_4(),
true,
)
.unwrap();
assert!(result, "Should read: range matches");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "aB"),
&get_test_file_2(),
true,
)
.unwrap();
assert!(!result, "Should skip: range does not match");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "dWX"),
&get_test_file_2(),
true,
)
.unwrap();
assert!(!result, "Should skip: range does not match");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "5"),
&get_test_file_3(),
true,
)
.unwrap();
assert!(!result, "Should skip: range does not match");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", "3str3x"),
&get_test_file_3(),
true,
)
.unwrap();
assert!(!result, "Should skip: range does not match");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("some_empty", "房东整租霍"),
&get_test_file_1(),
true,
)
.unwrap();
assert!(result, "Should read: range does matches");
let result = InclusiveMetricsEvaluator::eval(
&starts_with("all_nulls", ""),
&get_test_file_1(),
true,
)
.unwrap();
assert!(!result, "Should skip: range does not match");
// Note: This string has been created manually by taking
// the string "イロハニホヘト", which is an upper bound in
// the datafile returned by get_test_file_4(), truncating it
// to four character, and then appending the "ボ" character,
// which occupies the next code point after the 5th
// character in the string above, "ホ".
// In the Java implementation of Iceberg, this is done by
// the `truncateStringMax` function, but we don't yet have
// this implemented in iceberg-rust.
let above_max = "イロハニボ";
let result = InclusiveMetricsEvaluator::eval(
&starts_with("required", above_max),
&get_test_file_4(),
true,
)
.unwrap();
assert!(!result, "Should skip: range does not match");
}