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