Skip to content

Tracking: Refactor existing fuzz unit tests to FuzzTest trait #27082

Open

Description

@2010YOUY01

Fuzz tests should have configurable time budgets, be easy to reproduce, and explore new seeds over time. Existing implementations often miss one or more of these properties.

Adopt the centralized FuzzTest trait and driver from #27048 to:

  • Make these conventions a required contract for every fuzzer.
  • Share repetition, budgets, seed reporting, and replay, keeping implementations simple.

Spill pool will be migrated in the initial PR. The later plan is

  • Refactor other existing fuzzing UTs to use the centralized trait and runner
  • Require new fuzz tests follow this convention

Tracker

  • Add documentation for fuzzing UTs and new trait
    The remaining 30 suite groups below cover 152 test definitions, grouped by source file.

  • Aggregation — async fn test_min() { (source).
    Also: test_first_val, test_last_val, test_max, test_sum, test_count, test_median,
    streaming_aggregate_test, group_by_strings.

  • String DISTINCT counts — async fn distinct_count_string_test() { (source).

  • Equivalence: ordering — fn test_ordering_satisfy_with_equivalence_random() -> Result<()> { (source).
    Also: test_ordering_satisfy_with_equivalence_complex_random,
    test_ordering_satisfy_with_casts_and_windows_random.

  • Equivalence: projection — fn project_orderings_random() -> Result<()> { (source).
    Also: ordering_satisfy_after_projection_random.

  • Equivalence: properties — fn test_find_longest_permutation_random() -> Result<()> { (source).
    Also: test_find_longest_permutation_with_casts_and_windows_random.

  • Joins — async fn test_inner_join_1k_filtered() { (source).
    Also: test_inner_join_1k, test_left_join_1k, test_left_join_1k_filtered, test_right_join_1k,
    test_right_join_1k_filtered, test_full_join_1k, test_full_join_1k_filtered, test_left_semi_join_1k,
    test_left_semi_join_1k_filtered, test_right_semi_join_1k, test_right_semi_join_1k_filtered,
    test_left_anti_join_1k, test_left_anti_join_1k_filtered, test_right_anti_join_1k,
    test_right_anti_join_1k_filtered, test_left_mark_join_1k, test_left_mark_join_1k_filtered,
    test_right_mark_join_1k, test_right_mark_join_1k_filtered, test_inner_join_1k_binary_filtered,
    test_inner_join_1k_binary, test_left_join_1k_binary, test_left_join_1k_binary_filtered,
    test_right_join_1k_binary, test_right_join_1k_binary_filtered, test_full_join_1k_binary,
    test_full_join_1k_binary_filtered, test_left_semi_join_1k_binary,
    test_left_semi_join_1k_binary_filtered, test_right_semi_join_1k_binary,
    test_right_semi_join_1k_binary_filtered, test_left_anti_join_1k_binary,
    test_left_anti_join_1k_binary_filtered, test_right_anti_join_1k_binary,
    test_right_anti_join_1k_binary_filtered, test_left_mark_join_1k_binary,
    test_left_mark_join_1k_binary_filtered, test_right_mark_join_1k_binary,
    test_right_mark_join_1k_binary_filtered, test_inner_join_1k_low_cardinality,
    test_inner_join_1k_low_cardinality_filtered, test_left_join_1k_low_cardinality,
    test_left_join_1k_low_cardinality_filtered, test_right_join_1k_low_cardinality,
    test_right_join_1k_low_cardinality_filtered, test_full_join_1k_low_cardinality,
    test_full_join_1k_low_cardinality_filtered, test_filtered_join_spill_fuzz,
    test_nested_loop_join_spill_fuzz, fuzz_pwmj_matches_nested_loop.

  • Leaf-expression pushdown — async fn leaf_pushdown_fuzz() { (source).
    Also: leaf_pushdown_parquet_fuzz, leaf_pushdown_fuzz_extended.

  • Sort / Top-K limits — async fn test_sort_topk_i32() { (source).
    Also: test_sort_topk_f64, test_sort_topk_str, test_sort_topk_i64str.

  • Stream merging — async fn test_merge_2() { (source).
    Also: test_merge_2_no_overlap, test_merge_3, test_merge_3_gaps.

  • Null-aware joins — async fn null_aware_join_matches_reference() { (source).

  • UTF-8 pruning — async fn test_utf8_eq() { (source).
    Also: test_utf8_not_eq, test_utf8_lt, test_utf8_lt_eq, test_utf8_gt, test_utf8_gt_eq,
    test_utf8_like, test_utf8_not_like, test_utf8_like_prefix, test_utf8_like_suffix,
    test_utf8_not_like_prefix, test_utf8_not_like_ecsape, test_utf8_not_like_suffix,
    test_utf8_not_like_suffix_one.

  • ScalarValue conversions — fn scalar_value_eq_array_consistency() { (source).
    Also: scalar_value_iter_to_array_roundtrip,
    scalar_value_iter_to_array_rejects_mixed_parameterized_types, scalar_value_to_array_roundtrip.

  • Sorting and spilling — async fn test_sort_10k_mem() { (source).
    Also: test_sort_100k_mem, test_sort_strings_100k_mem, test_sort_multi_columns_100k_mem,
    test_sort_unlimited_mem.

  • Sort-preserving repartition — async fn stream_merge_multi_order_preserve() -> Result<()> { (source).
    Also: sort_preserving_repartition_test.

  • Sort queries — async fn sort_query_fuzzer_runner() { (source).

  • Top-K filter pushdown — async fn test_fuzz_topk_filter_pushdown() { (source).

  • Window aggregation — async fn window_bounded_window_random_comparison() -> Result<()> { (source).

  • Timestamp arithmetic — fn timestamp_op_random_tests() { (source).

  • Memory accounting — fn test_randomized_count_uncount_sequence() { (source).

  • LRU cache — fn test_fuzzy() { (source).

  • Grouped accumulation — fn accumulate_fuzz() { (source).

  • Moving min/max — fn moving_min_tests() -> Result<()> { (source).
    Also: moving_max_tests.

  • List filtering — fn list_filter_matches_reference_on_random_lists() { (source).

  • Boolean conjunctions — fn test_conjunction_matches_kleene_and() -> Result<()> { (source).

  • Unmarked join pairs — fn unmarked_pairs_match_brute_force() -> Result<()> { (source).

  • Routed hash lookups — fn routed_lookup_fuzz() -> Result<()> { (source).

  • Key-range bitmap union — fn union_fuzz() { (source).

  • Partitioned Top-K — async fn test_partitioned_topk_matches_bruteforce() -> Result<()> { (source).
    Also: test_partitioned_topk_store_bookkeeping_holds_under_stress,
    test_partitioned_topk_dense_rank_matches_bruteforce,
    test_partitioned_topk_dense_rank_contents_bytes_tracks_recompute,
    test_partitioned_topk_rank_bookkeeping_tracks_recompute.

  • Symmetric hash joins — async fn complex_join_all_one_ascending_numeric( (source).
    Also: join_all_one_ascending_numeric, join_without_sort_information, join_without_filter,
    join_all_one_descending_numeric_particular, testing_with_temporal_columns, test_with_interval_columns,
    testing_ascending_float_pruning.

  • Interval constraint propagation — integer_float_case_1!(case_1_i32, generate_case_i32, i32, Int32); (source).
    Also: case_1_i64, case_1_f64, case_1_f32, case_2_i32, case_2_i64, case_2_f64, case_2_f32,
    case_3_i32, case_3_i64, case_3_f64, case_3_f32, case_4_i32, case_4_i64, case_4_f64,
    case_4_f32, case_5_i32, case_5_i64, case_5_f64, case_5_f32.

Activity

  1. self-assigned this
    on Nov 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions