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