summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/btree_test.c2
-rw-r--r--test/test_data.h13
-rw-r--r--test/tree_test.c50
3 files changed, 40 insertions, 25 deletions
diff --git a/test/btree_test.c b/test/btree_test.c
index 5184392..6914053 100644
--- a/test/btree_test.c
+++ b/test/btree_test.c
@@ -515,7 +515,7 @@ main(int argc, char** argv)
const unsigned n_tests = 3u;
const size_t n_elems = (argc > 1) ? strtoul(argv[1], NULL, 10) : 524288u;
- printf("Running %u tests with %lu elements", n_tests, n_elems);
+ printf("Running %u tests with %" PRIuPTR " elements", n_tests, n_elems);
for (unsigned i = 0; i < n_tests; ++i) {
printf(".");
fflush(stdout);
diff --git a/test/test_data.h b/test/test_data.h
index 9c9a51d..405b716 100644
--- a/test/test_data.h
+++ b/test/test_data.h
@@ -40,6 +40,17 @@ lcg64(const uint64_t i)
return (a * i) + c;
}
+/// Linear Congruential Generator for making random pointer-sized integers
+static inline uintptr_t
+lcg(const uintptr_t i)
+{
+#if UINTPTR_MAX >= UINT64_MAX
+ return lcg64(i);
+#else
+ return lcg32(i);
+#endif
+}
+
/// Return a pseudo-pseudo-pseudo-random-ish integer with no duplicates
static inline size_t
unique_rand(size_t i)
@@ -52,7 +63,7 @@ unique_rand(size_t i)
return i; // Values >= prime are mapped to themselves
}
- const size_t residue = ((uint64_t)i * i) % prime;
+ const size_t residue = (size_t)(((uint64_t)i * i) % prime);
return (i <= prime / 2) ? residue : prime - residue;
}
diff --git a/test/tree_test.c b/test/tree_test.c
index 4b044a1..7368e10 100644
--- a/test/tree_test.c
+++ b/test/tree_test.c
@@ -31,8 +31,8 @@ static unsigned seed = 1;
static int
int_cmp(const void* a, const void* b, const void* ZIX_UNUSED(user_data))
{
- const intptr_t ia = (intptr_t)a;
- const intptr_t ib = (intptr_t)b;
+ const uintptr_t ia = (uintptr_t)a;
+ const uintptr_t ib = (uintptr_t)b;
return ia < ib ? -1 : ia > ib ? 1 : 0;
}
@@ -47,7 +47,7 @@ ith_elem(unsigned test_num, size_t n_elems, size_t i)
return n_elems - i; // Decreasing (worse case)
case 2:
default:
- return lcg64(seed + i) % 100; // Random
+ return lcg(seed + i) % 100u; // Random
}
}
@@ -60,22 +60,24 @@ test_fail(void)
static int
stress(unsigned test_num, size_t n_elems)
{
- intptr_t r = 0;
+ uintptr_t r = 0u;
ZixTreeIter* ti = NULL;
ZixTree* t = zix_tree_new(true, int_cmp, NULL, NULL);
// Insert n_elems elements
for (size_t i = 0; i < n_elems; ++i) {
- r = ith_elem(test_num, n_elems, i);
- int status = zix_tree_insert(t, (void*)r, &ti);
+ r = ith_elem(test_num, n_elems, i);
+
+ ZixStatus status = zix_tree_insert(t, (void*)r, &ti);
if (status) {
fprintf(stderr, "Insert failed\n");
return test_fail();
}
- if ((intptr_t)zix_tree_get(ti) != r) {
+
+ if ((uintptr_t)zix_tree_get(ti) != r) {
fprintf(stderr,
- "Data corrupt (%" PRIdPTR " != %" PRIdPTR ")\n",
- (intptr_t)zix_tree_get(ti),
+ "Data corrupt (%" PRIuPTR " != %" PRIuPTR ")\n",
+ (uintptr_t)zix_tree_get(ti),
r);
return test_fail();
}
@@ -97,24 +99,24 @@ stress(unsigned test_num, size_t n_elems)
fprintf(stderr, "Find failed\n");
return test_fail();
}
- if ((intptr_t)zix_tree_get(ti) != r) {
+ if ((uintptr_t)zix_tree_get(ti) != r) {
fprintf(stderr,
- "Data corrupt (%" PRIdPTR " != %" PRIdPTR ")\n",
- (intptr_t)zix_tree_get(ti),
+ "Data corrupt (%" PRIuPTR " != %" PRIuPTR ")\n",
+ (uintptr_t)zix_tree_get(ti),
r);
return test_fail();
}
}
// Iterate over all elements
- size_t i = 0;
- intptr_t last = -1;
+ size_t i = 0;
+ uintptr_t last = 0;
for (ZixTreeIter* iter = zix_tree_begin(t); !zix_tree_iter_is_end(iter);
iter = zix_tree_iter_next(iter), ++i) {
- const intptr_t iter_data = (intptr_t)zix_tree_get(iter);
+ const uintptr_t iter_data = (uintptr_t)zix_tree_get(iter);
if (iter_data < last) {
fprintf(stderr,
- "Iter corrupt (%" PRIdPTR " < %" PRIdPTR ")\n",
+ "Iter corrupt (%" PRIuPTR " < %" PRIuPTR ")\n",
iter_data,
last);
return test_fail();
@@ -134,10 +136,10 @@ stress(unsigned test_num, size_t n_elems)
last = INTPTR_MAX;
for (ZixTreeIter* iter = zix_tree_rbegin(t); !zix_tree_iter_is_rend(iter);
iter = zix_tree_iter_prev(iter), ++i) {
- const intptr_t iter_data = (intptr_t)zix_tree_get(iter);
+ const uintptr_t iter_data = (uintptr_t)zix_tree_get(iter);
if (iter_data > last) {
fprintf(stderr,
- "Iter corrupt (%" PRIdPTR " < %" PRIdPTR ")\n",
+ "Iter corrupt (%" PRIuPTR " < %" PRIuPTR ")\n",
iter_data,
last);
return test_fail();
@@ -167,16 +169,18 @@ stress(unsigned test_num, size_t n_elems)
// Insert n_elems elements again (to test non-empty destruction)
for (size_t e = 0; e < n_elems; ++e) {
- r = ith_elem(test_num, n_elems, e);
- int status = zix_tree_insert(t, (void*)r, &ti);
+ r = ith_elem(test_num, n_elems, e);
+
+ ZixStatus status = zix_tree_insert(t, (void*)r, &ti);
if (status) {
fprintf(stderr, "Insert failed\n");
return test_fail();
}
- if ((intptr_t)zix_tree_get(ti) != r) {
+
+ if ((uintptr_t)zix_tree_get(ti) != r) {
fprintf(stderr,
- "Data corrupt (%" PRIdPTR " != %" PRIdPTR ")\n",
- (intptr_t)zix_tree_get(ti),
+ "Data corrupt (%" PRIuPTR " != %" PRIuPTR ")\n",
+ (uintptr_t)zix_tree_get(ti),
r);
return test_fail();
}