#include "test/jemalloc_test.h"

#define	NTHREADS	2
#define	NINCRS		2000000

TEST_BEGIN(test_mtx_basic)
{
	mtx_t mtx;

	assert_false(mtx_init(&mtx), "Unexpected mtx_init() failure");
	mtx_lock(&mtx);
	mtx_unlock(&mtx);
	mtx_fini(&mtx);
}
TEST_END

typedef struct {
	mtx_t		mtx;
	unsigned	x;
} thd_start_arg_t;

static void *
thd_start(void *varg)
{
	thd_start_arg_t *arg = (thd_start_arg_t *)varg;
	unsigned i;

	for (i = 0; i < NINCRS; i++) {
		mtx_lock(&arg->mtx);
		arg->x++;
		mtx_unlock(&arg->mtx);
	}
	return (NULL);
}

TEST_BEGIN(test_mtx_race)
{
	thd_start_arg_t arg;
	thd_t thds[NTHREADS];
	unsigned i;

	assert_false(mtx_init(&arg.mtx), "Unexpected mtx_init() failure");
	arg.x = 0;
	for (i = 0; i < NTHREADS; i++)
		thd_create(&thds[i], thd_start, (void *)&arg);
	for (i = 0; i < NTHREADS; i++)
		thd_join(thds[i], NULL);
	assert_u_eq(arg.x, NTHREADS * NINCRS,
	    "Race-related counter corruption");
}
TEST_END

int
main(void)
{

	return (test(
	    test_mtx_basic,
	    test_mtx_race));
}
