Generates BooleanArrays with different true/false distributions for benchmarking. Returns a vector of tuples containing scenario name and corresponding BooleanArray. # Arguments - `TEST_ALL_FALSE` - Used to generate what kind of test data - `len` - Length of the BooleanArray to generate
(
len: usize,
)
| 38 | /// - `TEST_ALL_FALSE` - Used to generate what kind of test data |
| 39 | /// - `len` - Length of the BooleanArray to generate |
| 40 | fn generate_boolean_cases<const TEST_ALL_FALSE: bool>( |
| 41 | len: usize, |
| 42 | ) -> Vec<(String, BooleanArray)> { |
| 43 | let mut cases = Vec::with_capacity(6); |
| 44 | |
| 45 | // Scenario 1: All elements false or all elements true |
| 46 | if TEST_ALL_FALSE { |
| 47 | let all_false = BooleanArray::from(vec![false; len]); |
| 48 | cases.push(("all_false".to_string(), all_false)); |
| 49 | } else { |
| 50 | let all_true = BooleanArray::from(vec![true; len]); |
| 51 | cases.push(("all_true".to_string(), all_true)); |
| 52 | } |
| 53 | |
| 54 | // Scenario 2: Single true at first position or single false at first position |
| 55 | if TEST_ALL_FALSE { |
| 56 | let mut first_true = vec![false; len]; |
| 57 | first_true[0] = true; |
| 58 | cases.push(("one_true_first".to_string(), BooleanArray::from(first_true))); |
| 59 | } else { |
| 60 | let mut first_false = vec![true; len]; |
| 61 | first_false[0] = false; |
| 62 | cases.push(( |
| 63 | "one_false_first".to_string(), |
| 64 | BooleanArray::from(first_false), |
| 65 | )); |
| 66 | } |
| 67 | |
| 68 | // Scenario 3: Single true at last position or single false at last position |
| 69 | if TEST_ALL_FALSE { |
| 70 | let mut last_true = vec![false; len]; |
| 71 | last_true[len - 1] = true; |
| 72 | cases.push(("one_true_last".to_string(), BooleanArray::from(last_true))); |
| 73 | } else { |
| 74 | let mut last_false = vec![true; len]; |
| 75 | last_false[len - 1] = false; |
| 76 | cases.push(("one_false_last".to_string(), BooleanArray::from(last_false))); |
| 77 | } |
| 78 | |
| 79 | // Scenario 4: Single true at exact middle or single false at exact middle |
| 80 | let mid = len / 2; |
| 81 | if TEST_ALL_FALSE { |
| 82 | let mut mid_true = vec![false; len]; |
| 83 | mid_true[mid] = true; |
| 84 | cases.push(("one_true_middle".to_string(), BooleanArray::from(mid_true))); |
| 85 | } else { |
| 86 | let mut mid_false = vec![true; len]; |
| 87 | mid_false[mid] = false; |
| 88 | cases.push(( |
| 89 | "one_false_middle".to_string(), |
| 90 | BooleanArray::from(mid_false), |
| 91 | )); |
| 92 | } |
| 93 | |
| 94 | // Scenario 5: Single true at 25% position or single false at 25% position |
| 95 | let mid_left = len / 4; |
| 96 | if TEST_ALL_FALSE { |
| 97 | let mut mid_left_true = vec![false; len]; |