#include "test/jemalloc_test.h"

TEST_BEGIN(test_ticker_tick)
{
#define	NREPS 2
#define	NTICKS 3
	ticker_t ticker;
	int32_t i, j;

	ticker_init(&ticker, NTICKS);
	for (i = 0; i < NREPS; i++) {
		for (j = 0; j < NTICKS; j++) {
			assert_u_eq(ticker_read(&ticker), NTICKS - j,
			    "Unexpected ticker value (i=%d, j=%d)", i, j);
			assert_false(ticker_tick(&ticker),
			    "Unexpected ticker fire (i=%d, j=%d)", i, j);
		}
		assert_u32_eq(ticker_read(&ticker), 0,
		    "Expected ticker depletion");
		assert_true(ticker_tick(&ticker),
		    "Expected ticker fire (i=%d)", i);
		assert_u32_eq(ticker_read(&ticker), NTICKS,
		    "Expected ticker reset");
	}
#undef NTICKS
}
TEST_END

TEST_BEGIN(test_ticker_ticks)
{
#define	NTICKS 3
	ticker_t ticker;

	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");

	assert_true(ticker_ticks(&ticker, NTICKS + 1), "Expected ticker fire");
	assert_u_eq(ticker_read(&ticker), NTICKS, "Unexpected ticker value");
#undef NTICKS
}
TEST_END

TEST_BEGIN(test_ticker_copy)
{
#define	NTICKS 3
	ticker_t ta, tb;

	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");

	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");
#undef NTICKS
}
TEST_END

int
main(void)
{

	return (test(
	    test_ticker_tick,
	    test_ticker_ticks,
	    test_ticker_copy));
}
