summaryrefslogtreecommitdiff
path: root/deps/jemalloc/test/unit/ticker.c
diff options
context:
space:
mode:
Diffstat (limited to 'deps/jemalloc/test/unit/ticker.c')
-rw-r--r--deps/jemalloc/test/unit/ticker.c65
1 files changed, 46 insertions, 19 deletions
diff --git a/deps/jemalloc/test/unit/ticker.c b/deps/jemalloc/test/unit/ticker.c
index e5790a316..0dd778619 100644
--- a/deps/jemalloc/test/unit/ticker.c
+++ b/deps/jemalloc/test/unit/ticker.c
@@ -11,16 +11,16 @@ TEST_BEGIN(test_ticker_tick) {
ticker_init(&ticker, NTICKS);
for (i = 0; i < NREPS; i++) {
for (j = 0; j < NTICKS; j++) {
- assert_u_eq(ticker_read(&ticker), NTICKS - j,
+ expect_u_eq(ticker_read(&ticker), NTICKS - j,
"Unexpected ticker value (i=%d, j=%d)", i, j);
- assert_false(ticker_tick(&ticker),
+ expect_false(ticker_tick(&ticker),
"Unexpected ticker fire (i=%d, j=%d)", i, j);
}
- assert_u32_eq(ticker_read(&ticker), 0,
+ expect_u32_eq(ticker_read(&ticker), 0,
"Expected ticker depletion");
- assert_true(ticker_tick(&ticker),
+ expect_true(ticker_tick(&ticker),
"Expected ticker fire (i=%d)", i);
- assert_u32_eq(ticker_read(&ticker), NTICKS,
+ expect_u32_eq(ticker_read(&ticker), NTICKS,
"Expected ticker reset");
}
#undef NTICKS
@@ -33,14 +33,14 @@ TEST_BEGIN(test_ticker_ticks) {
ticker_init(&ticker, NTICKS);
- assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
- assert_false(ticker_ticks(&ticker, NTICKS), "Unexpected ticker fire");
- assert_u_eq(ticker_read(&ticker), 0, "Unexpected ticker value");
- assert_true(ticker_ticks(&ticker, NTICKS), "Expected ticker fire");
- assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
+ expect_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
+ expect_false(ticker_ticks(&ticker, NTICKS), "Unexpected ticker fire");
+ expect_u_eq(ticker_read(&ticker), 0, "Unexpected ticker value");
+ expect_true(ticker_ticks(&ticker, NTICKS), "Expected ticker fire");
+ expect_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
- assert_true(ticker_ticks(&ticker, NTICKS + 1), "Expected ticker fire");
- assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
+ expect_true(ticker_ticks(&ticker, NTICKS + 1), "Expected ticker fire");
+ expect_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
#undef NTICKS
}
TEST_END
@@ -51,23 +51,50 @@ TEST_BEGIN(test_ticker_copy) {
ticker_init(&ta, NTICKS);
ticker_copy(&tb, &ta);
- assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
- assert_true(ticker_ticks(&tb, NTICKS + 1), "Expected ticker fire");
- assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
+ expect_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
+ expect_true(ticker_ticks(&tb, NTICKS + 1), "Expected ticker fire");
+ expect_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
ticker_tick(&ta);
ticker_copy(&tb, &ta);
- assert_u_eq(ticker_read(&tb), NTICKS - 1, "Unexpected ticker value");
- assert_true(ticker_ticks(&tb, NTICKS), "Expected ticker fire");
- assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
+ expect_u_eq(ticker_read(&tb), NTICKS - 1, "Unexpected ticker value");
+ expect_true(ticker_ticks(&tb, NTICKS), "Expected ticker fire");
+ expect_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
#undef NTICKS
}
TEST_END
+TEST_BEGIN(test_ticker_geom) {
+ const int32_t ticks = 100;
+ const uint64_t niters = 100 * 1000;
+
+ ticker_geom_t ticker;
+ ticker_geom_init(&ticker, ticks);
+ uint64_t total_ticks = 0;
+ /* Just some random constant. */
+ uint64_t prng_state = 0x343219f93496db9fULL;
+ for (uint64_t i = 0; i < niters; i++) {
+ while(!ticker_geom_tick(&ticker, &prng_state)) {
+ total_ticks++;
+ }
+ }
+ /*
+ * In fact, with this choice of random seed and the PRNG implementation
+ * used at the time this was tested, total_ticks is 95.1% of the
+ * expected ticks.
+ */
+ expect_u64_ge(total_ticks , niters * ticks * 9 / 10,
+ "Mean off by > 10%%");
+ expect_u64_le(total_ticks , niters * ticks * 11 / 10,
+ "Mean off by > 10%%");
+}
+TEST_END
+
int
main(void) {
return test(
test_ticker_tick,
test_ticker_ticks,
- test_ticker_copy);
+ test_ticker_copy,
+ test_ticker_geom);
}