#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <emscripten/emscripten.h>

bool doneCallback = false;

void myatexit() {
  printf("myatexit\n");
  assert(doneCallback);
}

void callback(void *arg) {
  printf("callback\n");
  doneCallback = true;
  assert(arg == (void *)42);
  // Runtime should exit after this callback returns
}

int main() {
  atexit(myatexit);
  // The runtime should stay alive long enough for the callback
  // to run.
  emscripten_async_call(callback, (void*)42, 500);
  printf("returning from main\n");
  return 0;
}
