#include <atomic>

#include "CountingPrivateSemaphore.hpp"
#include "emper.hpp"

static std::atomic_uint counter;

static void increaseCounterByOne() { counter++; }

static void mainFiber(void) {
	const unsigned int FIBER_COUNT = 100;

	CountingPrivateSemaphore cps;

	for (unsigned int i = 0; i < FIBER_COUNT; ++i) {
		spawn(&increaseCounterByOne, cps);
	}

	cps.wait();

	if (counter != FIBER_COUNT) {
		exit(EXIT_FAILURE);
	}

	exit(EXIT_SUCCESS);
}

int main(UNUSED_ARG int arg, UNUSED_ARG char *argv[]) {
	Runtime runtime;

	async(&mainFiber);

	runtime.waitUntilFinished();

	return EXIT_FAILURE;
}