summaryrefslogtreecommitdiffstats
path: root/test/btree_test.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-07-02 13:54:45 -0400
committerDavid Robillard <d@drobilla.net>2021-07-17 19:58:17 -0400
commit5942e985c6ac9b18090ec92b11aa8a586b6365c5 (patch)
treece66d68e863df9ecba01c16dfe1a5bc7100068f0 /test/btree_test.c
parentbc264ab6f58177124d49a72b4a808eb97fa2cb25 (diff)
downloadzix-5942e985c6ac9b18090ec92b11aa8a586b6365c5.tar.gz
zix-5942e985c6ac9b18090ec92b11aa8a586b6365c5.tar.bz2
zix-5942e985c6ac9b18090ec92b11aa8a586b6365c5.zip
Avoid use of rand()
Diffstat (limited to 'test/btree_test.c')
-rw-r--r--test/btree_test.c19
1 files changed, 2 insertions, 17 deletions
diff --git a/test/btree_test.c b/test/btree_test.c
index ccb0cbc..5184392 100644
--- a/test/btree_test.c
+++ b/test/btree_test.c
@@ -18,6 +18,7 @@
#include "zix/btree.h"
+#include "test_data.h"
#include "test_malloc.h"
#include "zix/common.h"
@@ -32,22 +33,6 @@
static bool expect_failure = false;
-// Return a pseudo-pseudo-pseudo-random-ish integer with no duplicates
-static uintptr_t
-unique_rand(size_t i)
-{
- i ^= 0x00005CA1Eu; // Juggle bits to avoid linear clumps
-
- // Largest prime < 2^32 which satisfies (2^32 = 3 mod 4)
- static const uint32_t prime = 4294967291;
- if (i >= prime) {
- return i; // Values >= prime are mapped to themselves
- }
-
- const uint64_t residue = ((uint64_t)i * i) % prime;
- return (uintptr_t)((i <= prime / 2) ? residue : prime - residue);
-}
-
static int
int_cmp(const void* a, const void* b, const void* ZIX_UNUSED(user_data))
{
@@ -413,7 +398,7 @@ stress(const unsigned test_num, const size_t n_elems)
// Delete some elements in a random order
for (size_t e = 0; e < zix_btree_size(t) / 2; e++) {
- r = ith_elem(test_num, n_elems, rand() % n_elems);
+ r = ith_elem(test_num, n_elems, unique_rand(e) % n_elems);
uintptr_t removed = 0;
ZixStatus rst = zix_btree_remove(t, (void*)r, (void**)&removed, &next);