module threadgroup_test;
import std::atomic, std::thread::experimental::threadgroup;

alias VoidGroup = ThreadGroup{int, void};

fn void increment_task(int task, void* ctx)
{
	Atomic{int}* counter = ctx;
	counter.add(1);
}

fn void void_result_runs_tasks() @test
{
	Atomic{int} counter;
	VoidGroup group;
	group.init(mem, &increment_task, thread_count: 4, context: &counter)!!;
	group.start()!!;
	for (int i = 0; i < 100; i++) group.add_task(i);
	group.join();
	group.destroy();
	assert(counter.load() == 100, "expected 100 tasks to run, got %d", counter.load());
}