diff options
Diffstat (limited to 'test/unit/prng.c')
-rw-r--r-- | test/unit/prng.c | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/test/unit/prng.c b/test/unit/prng.c index b22bd2f..f323445 100644 --- a/test/unit/prng.c +++ b/test/unit/prng.c @@ -1,33 +1,34 @@ #include "test/jemalloc_test.h" -TEST_BEGIN(test_prng_lg_range) +static void +test_prng_lg_range(bool atomic) { uint64_t sa, sb, ra, rb; unsigned lg_range; sa = 42; - ra = prng_lg_range(&sa, 64); + ra = prng_lg_range(&sa, 64, atomic); sa = 42; - rb = prng_lg_range(&sa, 64); + rb = prng_lg_range(&sa, 64, atomic); assert_u64_eq(ra, rb, "Repeated generation should produce repeated results"); sb = 42; - rb = prng_lg_range(&sb, 64); + rb = prng_lg_range(&sb, 64, atomic); assert_u64_eq(ra, rb, "Equivalent generation should produce equivalent results"); sa = 42; - ra = prng_lg_range(&sa, 64); - rb = prng_lg_range(&sa, 64); + ra = prng_lg_range(&sa, 64, atomic); + rb = prng_lg_range(&sa, 64, atomic); assert_u64_ne(ra, rb, "Full-width results must not immediately repeat"); sa = 42; - ra = prng_lg_range(&sa, 64); + ra = prng_lg_range(&sa, 64, atomic); for (lg_range = 63; lg_range > 0; lg_range--) { sb = 42; - rb = prng_lg_range(&sb, lg_range); + rb = prng_lg_range(&sb, lg_range, atomic); assert_u64_eq((rb & (UINT64_C(0xffffffffffffffff) << lg_range)), 0, "High order bits should be 0, lg_range=%u", lg_range); assert_u64_eq(rb, (ra >> (64 - lg_range)), @@ -35,9 +36,23 @@ TEST_BEGIN(test_prng_lg_range) "lg_range=%u", lg_range); } } + +TEST_BEGIN(test_prng_lg_range_nonatomic) +{ + + test_prng_lg_range(false); +} +TEST_END + +TEST_BEGIN(test_prng_lg_range_atomic) +{ + + test_prng_lg_range(true); +} TEST_END -TEST_BEGIN(test_prng_range) +static void +test_prng_range(bool atomic) { uint64_t range; #define MAX_RANGE 10000000 @@ -50,12 +65,25 @@ TEST_BEGIN(test_prng_range) s = range; for (rep = 0; rep < NREPS; rep++) { - uint64_t r = prng_range(&s, range); + uint64_t r = prng_range(&s, range, atomic); assert_u64_lt(r, range, "Out of range"); } } } + +TEST_BEGIN(test_prng_range_nonatomic) +{ + + test_prng_range(false); +} +TEST_END + +TEST_BEGIN(test_prng_range_atomic) +{ + + test_prng_range(true); +} TEST_END int @@ -63,6 +91,8 @@ main(void) { return (test( - test_prng_lg_range, - test_prng_range)); + test_prng_lg_range_nonatomic, + test_prng_lg_range_atomic, + test_prng_range_nonatomic, + test_prng_range_atomic)); } |