diff --git a/tests/test_benchmark.c b/tests/test_benchmark.c new file mode 100644 index 00000000..f39495bb --- /dev/null +++ b/tests/test_benchmark.c @@ -0,0 +1,49 @@ + +/* + * machinarium. + * + * Cooperative multitasking engine. +*/ + +/* + * This example shows fiber context switch (yield) + * performance done in one second. +*/ + +#include + +static int csw = 0; + +static void +benchmark_worker(void *arg) +{ + mm_t env = arg; + printf("worker started.\n"); + while (mm_is_online(env)) { + csw++; + mm_sleep(env, 0); + } + printf("worker done.\n"); +} + +static void +benchmark_runner(void *arg) +{ + mm_t env = arg; + printf("benchmark started.\n"); + mm_create(env, benchmark_worker, env); + mm_sleep(env, 1000); + printf("done.\n"); + printf("context switches %d in 1 sec.\n", csw); + mm_stop(env); +} + +int +main(int argc, char *argv[]) +{ + mm_t env = mm_new(); + mm_create(env, benchmark_runner, env); + mm_start(env); + mm_free(env); + return 0; +}