mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 18:51:21 +02:00
bcachefs: add eytzinger0_find_ge self test
Add an eytzinger0_find_ge() self test similar to eytzinger0_find_gt(). Note that this test requires eytzinger0_find_ge() to return the first matching element in the array in case of duplicates. To prevent bisection errors, we only add this test after strenghening the original implementation (see the previous commit). Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
11223d0e7b
commit
63ce189b00
|
|
@ -862,10 +862,48 @@ static void eytzinger0_find_test_gt(u16 *test_array, unsigned nr, u16 search)
|
|||
}
|
||||
}
|
||||
|
||||
static void eytzinger0_find_test_ge(u16 *test_array, unsigned nr, u16 search)
|
||||
{
|
||||
int r, s;
|
||||
bool bad;
|
||||
|
||||
r = eytzinger0_find_ge(test_array, nr,
|
||||
sizeof(test_array[0]),
|
||||
cmp_u16, &search);
|
||||
if (r >= 0) {
|
||||
if (test_array[r] < search) {
|
||||
bad = true;
|
||||
} else {
|
||||
s = eytzinger0_prev(r, nr);
|
||||
bad = s >= 0 && test_array[s] >= search;
|
||||
}
|
||||
} else {
|
||||
s = eytzinger0_first(nr);
|
||||
bad = s >= 0 && test_array[s] >= search;
|
||||
}
|
||||
|
||||
if (bad) {
|
||||
s = -1;
|
||||
eytzinger0_for_each(j, nr) {
|
||||
if (test_array[j] >= search) {
|
||||
s = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
eytzinger0_for_each(j, nr)
|
||||
pr_info("[%3u] = %12u\n", j, test_array[j]);
|
||||
pr_info("find_ge(%12u) = %3i should be %3i\n",
|
||||
search, r, s);
|
||||
BUG();
|
||||
}
|
||||
}
|
||||
|
||||
static void eytzinger0_find_test_val(u16 *test_array, unsigned nr, u16 search)
|
||||
{
|
||||
eytzinger0_find_test_le(test_array, nr, search);
|
||||
eytzinger0_find_test_gt(test_array, nr, search);
|
||||
eytzinger0_find_test_ge(test_array, nr, search);
|
||||
}
|
||||
|
||||
void eytzinger0_find_test(void)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user