#include <algorithm>
#include <cmath>
#include <emscripten.h>

extern "C" {

int EMSCRIPTEN_KEEPALIVE check_if(int x) {
  if (x < 10)
    x++;
  return x;
}

int EMSCRIPTEN_KEEPALIVE check_loop(int x) {
  while (x < 100)
    x *= 2;
  return x;
}

int EMSCRIPTEN_KEEPALIVE check_loop_break(int x) {
  while (x < 100) {
    x *= 2;
    if (x > 30)
      break;
    x++;
  }
  return x;
}

int EMSCRIPTEN_KEEPALIVE check_loop_continue(int x) {
  while (x < 100) {
    x *= 2;
    if (x > 30)
      continue;
    x++;
  }
  return x;
}

int EMSCRIPTEN_KEEPALIVE check_do_loop(int x) {
  do {
    x *= 2;
    if (x > 1000)
      break;
    x--;
    if (x > 30)
      continue;
    x++;
  } while (x < 100);
  return x;
}

int EMSCRIPTEN_KEEPALIVE check_do_once(int x) {
  do {
    x *= 2;
    if (x > 1000)
      break;
    x--;
    if (x > 30)
      continue;
    x++;
  } while (0);
  return x;
}

int EMSCRIPTEN_KEEPALIVE check_while_forever(int x) {
  while (1) {
    x *= 2;
    if (x > 1000)
      break;
    x--;
    if (x > 30)
      continue;
    x++;
  }
  return x;
}

int EMSCRIPTEN_KEEPALIVE check_switch(int x) {
  switch (x) {
    case 1:
      return 10;
    case 3:
      return 20;
    case 5:
      return 30;
    case 10:
      return 40;
    case 11:
      return 50;
    default:
      return 60;
  }
  return 70;
}

int EMSCRIPTEN_KEEPALIVE check_switch_nodefault(int x) {
  switch (x) {
    case 1:
      return 10;
    case 3:
      return 20;
    case 5:
      return 30;
    case 10:
      return 40;
    case 11:
      return 50;
  }
  return 70;
}

int EMSCRIPTEN_KEEPALIVE check_switch_rdefault(int x) {
  switch (x) {
    default:
      return -60;
    case 1:
      return 10;
    case 3:
      return 20;
    case 5:
      return 30;
    case 10:
      return 40;
    case 11:
      return 50;
  }
  return 70;
}

int EMSCRIPTEN_KEEPALIVE check_switch_fallthrough(int x) {
  switch (x) {
    case 1:
      return 10;
    case 2:
    case 3:
      x++;
    case 5:
      return x;
    case 10:
      return 40;
    case 11:
      return 50;
    default:
      return 60;
  }
  return 70;
}
}