in arrow-ord/src/sort.rs [1686:1931]
fn test_sort_list_of_booleans() {
// These are all the possible combinations of boolean values
// There are 3^3 + 1 = 28 possible combinations (3 values to permutate - [true, false, null] and 1 None value)
#[rustfmt::skip]
let mut cases = vec![
Some(vec![Some(true), Some(true), Some(true)]),
Some(vec![Some(true), Some(true), Some(false)]),
Some(vec![Some(true), Some(true), None]),
Some(vec![Some(true), Some(false), Some(true)]),
Some(vec![Some(true), Some(false), Some(false)]),
Some(vec![Some(true), Some(false), None]),
Some(vec![Some(true), None, Some(true)]),
Some(vec![Some(true), None, Some(false)]),
Some(vec![Some(true), None, None]),
Some(vec![Some(false), Some(true), Some(true)]),
Some(vec![Some(false), Some(true), Some(false)]),
Some(vec![Some(false), Some(true), None]),
Some(vec![Some(false), Some(false), Some(true)]),
Some(vec![Some(false), Some(false), Some(false)]),
Some(vec![Some(false), Some(false), None]),
Some(vec![Some(false), None, Some(true)]),
Some(vec![Some(false), None, Some(false)]),
Some(vec![Some(false), None, None]),
Some(vec![None, Some(true), Some(true)]),
Some(vec![None, Some(true), Some(false)]),
Some(vec![None, Some(true), None]),
Some(vec![None, Some(false), Some(true)]),
Some(vec![None, Some(false), Some(false)]),
Some(vec![None, Some(false), None]),
Some(vec![None, None, Some(true)]),
Some(vec![None, None, Some(false)]),
Some(vec![None, None, None]),
None,
];
cases.shuffle(&mut StdRng::seed_from_u64(42));
// The order is false, true, null
#[rustfmt::skip]
let expected_descending_false_nulls_first_false = vec![
Some(vec![Some(false), Some(false), Some(false)]),
Some(vec![Some(false), Some(false), Some(true)]),
Some(vec![Some(false), Some(false), None]),
Some(vec![Some(false), Some(true), Some(false)]),
Some(vec![Some(false), Some(true), Some(true)]),
Some(vec![Some(false), Some(true), None]),
Some(vec![Some(false), None, Some(false)]),
Some(vec![Some(false), None, Some(true)]),
Some(vec![Some(false), None, None]),
Some(vec![Some(true), Some(false), Some(false)]),
Some(vec![Some(true), Some(false), Some(true)]),
Some(vec![Some(true), Some(false), None]),
Some(vec![Some(true), Some(true), Some(false)]),
Some(vec![Some(true), Some(true), Some(true)]),
Some(vec![Some(true), Some(true), None]),
Some(vec![Some(true), None, Some(false)]),
Some(vec![Some(true), None, Some(true)]),
Some(vec![Some(true), None, None]),
Some(vec![None, Some(false), Some(false)]),
Some(vec![None, Some(false), Some(true)]),
Some(vec![None, Some(false), None]),
Some(vec![None, Some(true), Some(false)]),
Some(vec![None, Some(true), Some(true)]),
Some(vec![None, Some(true), None]),
Some(vec![None, None, Some(false)]),
Some(vec![None, None, Some(true)]),
Some(vec![None, None, None]),
None,
];
test_every_config_sort_boolean_list_arrays(
cases.clone(),
Some(SortOptions {
descending: false,
nulls_first: false,
}),
expected_descending_false_nulls_first_false,
);
// The order is null, false, true
#[rustfmt::skip]
let expected_descending_false_nulls_first_true = vec![
None,
Some(vec![None, None, None]),
Some(vec![None, None, Some(false)]),
Some(vec![None, None, Some(true)]),
Some(vec![None, Some(false), None]),
Some(vec![None, Some(false), Some(false)]),
Some(vec![None, Some(false), Some(true)]),
Some(vec![None, Some(true), None]),
Some(vec![None, Some(true), Some(false)]),
Some(vec![None, Some(true), Some(true)]),
Some(vec![Some(false), None, None]),
Some(vec![Some(false), None, Some(false)]),
Some(vec![Some(false), None, Some(true)]),
Some(vec![Some(false), Some(false), None]),
Some(vec![Some(false), Some(false), Some(false)]),
Some(vec![Some(false), Some(false), Some(true)]),
Some(vec![Some(false), Some(true), None]),
Some(vec![Some(false), Some(true), Some(false)]),
Some(vec![Some(false), Some(true), Some(true)]),
Some(vec![Some(true), None, None]),
Some(vec![Some(true), None, Some(false)]),
Some(vec![Some(true), None, Some(true)]),
Some(vec![Some(true), Some(false), None]),
Some(vec![Some(true), Some(false), Some(false)]),
Some(vec![Some(true), Some(false), Some(true)]),
Some(vec![Some(true), Some(true), None]),
Some(vec![Some(true), Some(true), Some(false)]),
Some(vec![Some(true), Some(true), Some(true)]),
];
test_every_config_sort_boolean_list_arrays(
cases.clone(),
Some(SortOptions {
descending: false,
nulls_first: true,
}),
expected_descending_false_nulls_first_true,
);
// The order is true, false, null
#[rustfmt::skip]
let expected_descending_true_nulls_first_false = vec![
Some(vec![Some(true), Some(true), Some(true)]),
Some(vec![Some(true), Some(true), Some(false)]),
Some(vec![Some(true), Some(true), None]),
Some(vec![Some(true), Some(false), Some(true)]),
Some(vec![Some(true), Some(false), Some(false)]),
Some(vec![Some(true), Some(false), None]),
Some(vec![Some(true), None, Some(true)]),
Some(vec![Some(true), None, Some(false)]),
Some(vec![Some(true), None, None]),
Some(vec![Some(false), Some(true), Some(true)]),
Some(vec![Some(false), Some(true), Some(false)]),
Some(vec![Some(false), Some(true), None]),
Some(vec![Some(false), Some(false), Some(true)]),
Some(vec![Some(false), Some(false), Some(false)]),
Some(vec![Some(false), Some(false), None]),
Some(vec![Some(false), None, Some(true)]),
Some(vec![Some(false), None, Some(false)]),
Some(vec![Some(false), None, None]),
Some(vec![None, Some(true), Some(true)]),
Some(vec![None, Some(true), Some(false)]),
Some(vec![None, Some(true), None]),
Some(vec![None, Some(false), Some(true)]),
Some(vec![None, Some(false), Some(false)]),
Some(vec![None, Some(false), None]),
Some(vec![None, None, Some(true)]),
Some(vec![None, None, Some(false)]),
Some(vec![None, None, None]),
None,
];
test_every_config_sort_boolean_list_arrays(
cases.clone(),
Some(SortOptions {
descending: true,
nulls_first: false,
}),
expected_descending_true_nulls_first_false,
);
// The order is null, true, false
#[rustfmt::skip]
let expected_descending_true_nulls_first_true = vec![
None,
Some(vec![None, None, None]),
Some(vec![None, None, Some(true)]),
Some(vec![None, None, Some(false)]),
Some(vec![None, Some(true), None]),
Some(vec![None, Some(true), Some(true)]),
Some(vec![None, Some(true), Some(false)]),
Some(vec![None, Some(false), None]),
Some(vec![None, Some(false), Some(true)]),
Some(vec![None, Some(false), Some(false)]),
Some(vec![Some(true), None, None]),
Some(vec![Some(true), None, Some(true)]),
Some(vec![Some(true), None, Some(false)]),
Some(vec![Some(true), Some(true), None]),
Some(vec![Some(true), Some(true), Some(true)]),
Some(vec![Some(true), Some(true), Some(false)]),
Some(vec![Some(true), Some(false), None]),
Some(vec![Some(true), Some(false), Some(true)]),
Some(vec![Some(true), Some(false), Some(false)]),
Some(vec![Some(false), None, None]),
Some(vec![Some(false), None, Some(true)]),
Some(vec![Some(false), None, Some(false)]),
Some(vec![Some(false), Some(true), None]),
Some(vec![Some(false), Some(true), Some(true)]),
Some(vec![Some(false), Some(true), Some(false)]),
Some(vec![Some(false), Some(false), None]),
Some(vec![Some(false), Some(false), Some(true)]),
Some(vec![Some(false), Some(false), Some(false)]),
];
// Testing with limit false and fixed_length None
test_every_config_sort_boolean_list_arrays(
cases.clone(),
Some(SortOptions {
descending: true,
nulls_first: true,
}),
expected_descending_true_nulls_first_true,
);
}