1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
// SPDX-License-Identifier: LGPL-2.1-or-later
#include <stdio.h>
#include "../binary_search.h"
#suite binary_search
#test-loop(0, 6) binary_search_ge_basic
{
const int arr[] = { 10, 20, 30, 40, 50 };
ck_assert_uint_eq(binary_search_ge(arr, _i, &(int){5}, scalar_less), 0);
for (int i = 1; i <= _i; i++) {
ck_assert_uint_eq(binary_search_ge(arr, _i, &(int){i * 10},
scalar_less), i - 1);
ck_assert_uint_eq(binary_search_ge(arr, _i, &(int){i * 10 + 5},
scalar_less), i);
}
}
#test binary_search_ge_duplicates
{
const int arr[] = { 10, 10, 10 };
ck_assert_uint_eq(binary_search_ge(arr, 3, &(int){10}, scalar_less), 0);
}
#test binary_search_ge_custom_less
{
const struct {
int value;
const char *str;
} arr[] = {
{ 10, "ten" },
{ 20, "twenty" },
};
#define my_less(a, b) ((a)->value < *(b))
ck_assert_uint_eq(binary_search_ge(arr, 2, &(int){20}, my_less), 1);
#undef my_less
}
#test-loop(0, 6) binary_search_gt_basic
{
const int arr[] = { 10, 20, 30, 40, 50 };
ck_assert_uint_eq(binary_search_gt(arr, _i, &(int){5}, scalar_less), 0);
for (int i = 1; i <= _i; i++) {
ck_assert_uint_eq(binary_search_gt(arr, _i, &(int){i * 10},
scalar_less), i);
ck_assert_uint_eq(binary_search_gt(arr, _i, &(int){i * 10 + 5},
scalar_less), i);
}
}
#test binary_search_gt_duplicates
{
const int arr[] = { 10, 10, 10 };
ck_assert_uint_eq(binary_search_gt(arr, 3, &(int){10}, scalar_less), 3);
}
#test binary_search_gt_custom_less
{
const struct {
int value;
const char *str;
} arr[] = {
{ 10, "ten" },
{ 20, "twenty" },
};
#define my_less(a, b) (*(a) < (b)->value)
ck_assert_uint_eq(binary_search_gt(arr, 2, &(int){20}, my_less), 2);
#undef my_less
}
|