add the std::sort::binarysearch module

Signed-off-by: Pierre Curto <pierre.curto@gmail.com>
This commit is contained in:
Pierre Curto
2023-07-03 20:48:37 +02:00
committed by Christoffer Lerno
parent bbbcd9bf48
commit 55d17ec990
2 changed files with 103 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
module binarysearch_test @test;
import std::sort::binarysearch;
struct SearchTest
{
int[] data;
int x;
int index;
}
fn void search()
{
SearchTest[] tcases = {
{ {}, 0, 0 },
{ {1, 2, 3}, 1, 0 },
{ {1, 2, 3}, 2, 1 },
{ {1, 2, 3}, 3, 2 },
{ {1, 2, 3}, 4, 3 },
{ {10, 20, 30}, 14, 1 },
{ {10, 20, 30}, 26, 2 },
};
foreach (tc : tcases)
{
usz idx = binarysearch::search(tc.data, tc.x);
assert(idx == tc.index, "%s: got %d; want %d", tc.data, idx, tc.index);
usz cmp_idx = binarysearch::cmp_search(tc.data, tc.x, &cmp_int);
assert(cmp_idx == tc.index, "%s: got %d; want %d", tc.data, cmp_idx, tc.index);
}
}
module binarysearch_test;
fn int cmp_int(void* x, void* y) {
return *(int*)x - *(int*)y;
}