1#include "test/jemalloc_test.h"
2
3#include "jemalloc/internal/ticker.h"
4
5TEST_BEGIN(test_ticker_tick) {
6#define NREPS 2
7#define NTICKS 3
8	ticker_t ticker;
9	int32_t i, j;
10
11	ticker_init(&ticker, NTICKS);
12	for (i = 0; i < NREPS; i++) {
13		for (j = 0; j < NTICKS; j++) {
14			assert_u_eq(ticker_read(&ticker), NTICKS - j,
15			    "Unexpected ticker value (i=%d, j=%d)", i, j);
16			assert_false(ticker_tick(&ticker),
17			    "Unexpected ticker fire (i=%d, j=%d)", i, j);
18		}
19		assert_u32_eq(ticker_read(&ticker), 0,
20		    "Expected ticker depletion");
21		assert_true(ticker_tick(&ticker),
22		    "Expected ticker fire (i=%d)", i);
23		assert_u32_eq(ticker_read(&ticker), NTICKS,
24		    "Expected ticker reset");
25	}
26#undef NTICKS
27}
28TEST_END
29
30TEST_BEGIN(test_ticker_ticks) {
31#define NTICKS 3
32	ticker_t ticker;
33
34	ticker_init(&ticker, NTICKS);
35
36	assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
37	assert_false(ticker_ticks(&ticker, NTICKS), "Unexpected ticker fire");
38	assert_u_eq(ticker_read(&ticker), 0, "Unexpected ticker value");
39	assert_true(ticker_ticks(&ticker, NTICKS), "Expected ticker fire");
40	assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
41
42	assert_true(ticker_ticks(&ticker, NTICKS + 1), "Expected ticker fire");
43	assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
44#undef NTICKS
45}
46TEST_END
47
48TEST_BEGIN(test_ticker_copy) {
49#define NTICKS 3
50	ticker_t ta, tb;
51
52	ticker_init(&ta, NTICKS);
53	ticker_copy(&tb, &ta);
54	assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
55	assert_true(ticker_ticks(&tb, NTICKS + 1), "Expected ticker fire");
56	assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
57
58	ticker_tick(&ta);
59	ticker_copy(&tb, &ta);
60	assert_u_eq(ticker_read(&tb), NTICKS - 1, "Unexpected ticker value");
61	assert_true(ticker_ticks(&tb, NTICKS), "Expected ticker fire");
62	assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
63#undef NTICKS
64}
65TEST_END
66
67int
68main(void) {
69	return test(
70	    test_ticker_tick,
71	    test_ticker_ticks,
72	    test_ticker_copy);
73}
74