diff --git a/newbrt/tests/sort-test.c b/newbrt/tests/sort-test.c index bf59aa7735b426f5a4327a68bc5cbfdfefbfa2f4..84faade2383c79b061af5440f8b970d20248be5b 100644 --- a/newbrt/tests/sort-test.c +++ b/newbrt/tests/sort-test.c @@ -11,16 +11,21 @@ const int MAX_NUM = 0x0fffffffL; int MAGIC_EXTRA = 0xd3adb00f; +static int +int_qsort_cmp(const void *va, const void *vb) { + const int *a = va, *b = vb; + assert(*a < MAX_NUM); + assert(*b < MAX_NUM); + return (*a > *b) - (*a < *b); +} + static int int_cmp(void *ve, const void *va, const void *vb) { int *e = ve; assert(e); assert(*e == MAGIC_EXTRA); - const int *a = va, *b = vb; - assert(*a < MAX_NUM); - assert(*b < MAX_NUM); - return (*a > *b) - (*a < *b); + return int_qsort_cmp(va, vb); } static void @@ -67,12 +72,50 @@ static void random_array_test(int nelts) { int *MALLOC_N(nelts, a); + int *MALLOC_N(nelts, b); for (int i = 0; i < nelts; ++i) { a[i] = rand() % MAX_NUM; + b[i] = a[i]; } mergesort_r(a, nelts, sizeof a[0], &MAGIC_EXTRA, int_cmp); check_int_array(a, nelts); + qsort(b, nelts, sizeof b[0], int_qsort_cmp); + for (int i = 0; i < nelts; ++i) + assert(a[i] == b[i]); + toku_free(a); + toku_free(b); +} + +static int +uint64_qsort_cmp(const void *va, const void *vb) { + const uint64_t *a = va, *b = vb; + return (*a > *b) - (*a < *b); +} + +static int +uint64_cmp(void *ve, const void *va, const void *vb) +{ + int *e = ve; + assert(e); + assert(*e == MAGIC_EXTRA); + return uint64_qsort_cmp(va, vb); +} + +static void +random_array_test_64(int nelts) +{ + uint64_t *MALLOC_N(nelts, a); + uint64_t *MALLOC_N(nelts, b); + for (int i = 0; i < nelts; ++i) { + a[i] = ((uint64_t)rand() << 32ULL) | rand(); + b[i] = a[i]; + } + mergesort_r(a, nelts, sizeof a[0], &MAGIC_EXTRA, uint64_cmp); + qsort(b, nelts, sizeof b[0], uint64_qsort_cmp); + for (int i = 0; i < nelts; ++i) + assert(a[i] == b[i]); toku_free(a); + toku_free(b); } int @@ -83,6 +126,7 @@ test_main(int argc __attribute__((__unused__)), const char *argv[] __attribute__ random_array_test(1000); random_array_test(10001); random_array_test(10000000); + random_array_test_64(10000000); dup_array_test(10); dup_array_test(1000); dup_array_test(10001); diff --git a/newbrt/tests/test.h b/newbrt/tests/test.h index c6b629c22c15c89a37f9037ea75787354bcc9930..e7f66771b58bdad56be84911ce19b7841b819af2 100644 --- a/newbrt/tests/test.h +++ b/newbrt/tests/test.h @@ -162,6 +162,7 @@ static UU() BOOL def_pf_req_callback(void* UU(brtnode_pv), void* UU(read_extraar static UU() int def_pf_callback(void* UU(brtnode_pv), void* UU(read_extraargs), int UU(fd), PAIR_ATTR* UU(sizep)) { assert(FALSE); + return 0; } static UU() int