19998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#include "test/jemalloc_test.h"
29998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
39998000b2b77205a37ae630d5fd1ec9ee4569476Jason EvansTEST_BEGIN(test_ticker_tick)
49998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans{
59998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#define	NREPS 2
69998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#define	NTICKS 3
79998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_t ticker;
89998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	int32_t i, j;
99998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
109998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_init(&ticker, NTICKS);
119998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	for (i = 0; i < NREPS; i++) {
129998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		for (j = 0; j < NTICKS; j++) {
139998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans			assert_u_eq(ticker_read(&ticker), NTICKS - j,
149998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans			    "Unexpected ticker value (i=%d, j=%d)", i, j);
159998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans			assert_false(ticker_tick(&ticker),
169998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans			    "Unexpected ticker fire (i=%d, j=%d)", i, j);
179998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		}
189998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		assert_u32_eq(ticker_read(&ticker), 0,
199998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		    "Expected ticker depletion");
209998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		assert_true(ticker_tick(&ticker),
219998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		    "Expected ticker fire (i=%d)", i);
229998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		assert_u32_eq(ticker_read(&ticker), NTICKS,
239998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans		    "Expected ticker reset");
249998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	}
259998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#undef NTICKS
269998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans}
279998000b2b77205a37ae630d5fd1ec9ee4569476Jason EvansTEST_END
289998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
299998000b2b77205a37ae630d5fd1ec9ee4569476Jason EvansTEST_BEGIN(test_ticker_ticks)
309998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans{
319998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#define	NTICKS 3
329998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_t ticker;
339998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
349998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_init(&ticker, NTICKS);
359998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
369998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
379998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_false(ticker_ticks(&ticker, NTICKS), "Unexpected ticker fire");
389998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&ticker), 0, "Unexpected ticker value");
399998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_true(ticker_ticks(&ticker, NTICKS), "Expected ticker fire");
409998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
419998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
429998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_true(ticker_ticks(&ticker, NTICKS + 1), "Expected ticker fire");
439998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
449998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#undef NTICKS
459998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans}
469998000b2b77205a37ae630d5fd1ec9ee4569476Jason EvansTEST_END
479998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
489998000b2b77205a37ae630d5fd1ec9ee4569476Jason EvansTEST_BEGIN(test_ticker_copy)
499998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans{
509998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#define	NTICKS 3
519998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_t ta, tb;
529998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
539998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_init(&ta, NTICKS);
549998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_copy(&tb, &ta);
559998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
569998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_true(ticker_ticks(&tb, NTICKS + 1), "Expected ticker fire");
579998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
589998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
599998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_tick(&ta);
609998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	ticker_copy(&tb, &ta);
619998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&tb), NTICKS - 1, "Unexpected ticker value");
629998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_true(ticker_ticks(&tb, NTICKS), "Expected ticker fire");
639998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	assert_u_eq(ticker_read(&tb), NTICKS, "Unexpected ticker value");
649998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans#undef NTICKS
659998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans}
669998000b2b77205a37ae630d5fd1ec9ee4569476Jason EvansTEST_END
679998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
689998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evansint
699998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evansmain(void)
709998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans{
719998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans
729998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	return (test(
739998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	    test_ticker_tick,
749998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	    test_ticker_ticks,
759998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans	    test_ticker_copy));
769998000b2b77205a37ae630d5fd1ec9ee4569476Jason Evans}
77