Skip to content
Snippets Groups Projects
CppApiTest.cpp 863 B
Newer Older
  • Learn to ignore specific revisions
  • #include <stdlib.h>	 // for exit, EXIT_FAILURE, EXIT_SUC...
    
    Florian Schmaus's avatar
    Florian Schmaus committed
    
    
    #include <atomic>	 // for atomic_uint, __atomic_base
    
    #include "CountingPrivateSemaphore.hpp"	 // for CountingPrivateSemaphore
    #include "Runtime.hpp"									 // for Runtime
    #include "emper-common.h"								 // for UNUSED_ARG
    #include "emper.hpp"										 // for async, spawn
    
    Florian Schmaus's avatar
    Florian Schmaus committed
    
    static std::atomic_uint counter;
    
    
    static void increaseCounterByOne() { counter++; }
    
    Florian Schmaus's avatar
    Florian Schmaus committed
    
    static void mainFiber(void) {
    	const unsigned int FIBER_COUNT = 100;
    
    	CountingPrivateSemaphore cps;
    
    	for (unsigned int i = 0; i < FIBER_COUNT; ++i) {
    		spawn(&increaseCounterByOne, cps);
    
    Florian Schmaus's avatar
    Florian Schmaus committed
    
    	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;
    }