# 1) if false

a = 5;
if (0 == 1) a = 6;

if (a != 5) exit(1);


# 2) if true

a = 5;
if (1 == 1) a = 6;

if (a != 6) exit(2);


# 3) if else false

a = 5;
if (0 == 1) a = 6; else a = 7;

if (a != 7) exit(3);


# 4) if else true

a = 5;
if (1 == 1) a = 6; else a = 7;

if (a != 6) exit(4);


# 5) while false

a = 5;
while (0 == 1) {
  ++a;
}

if (a != 5) exit(5);


# 6) while true

a = 5;
while (a < 20) {
  ++a;
}

if (a != 20) exit(6);


# 7) do false

a = 5;
do {
  ++a;
} while (0 == 1);

if (a != 6) exit(7);


# 8) do true

a = 5;
do {
  ++a;
} while (a < 10);

if (a != 10) exit(8);


# 9) for loop

for (a = 5; a < 20; ++a);

if (a != 20) exit(9);


# 10) continue

a = b = 0;
do {
  if (++a % 2 == 0) continue;
  b++;
} while (a < 10);

if (b != 5) exit(10);


# 11) break

a = 0;
while (1 == 1) {
  ++a;
  break;
  ++a;
}

if (a != 1) exit(11);


# 12) return

void foo()
{
  return;
  exit(12);
}
foo();


# 13) return value

int foo()
{
  return 12;
}
a = foo();

if (a != 12) exit(13);


# 14) switch with fall through and default case

a = 0;

for (x = 0; x < 8; x++) {
  switch (x % 4) {
    case 0:
      a[0]++;
      break;
    case 1:
      a[1]++;
      /* fall thru */
    default:
      a[3]++;
    case 2:
      a[2]++;
      break;
  }
}

if (a[0] != 2 || a[1] != 2 || a[2] != 2 || a[3] != 4) exit(14);


# 15) switch with empty case and case containing only break

a = 0;
for (x = 0; x < 4; x++) {
  switch (x % 3) {
    case 1:
    case 2:
      break;
    default:
      a++;
  }
}

if (a != 2) exit(15);


# 16) try-catch without exception

a = 12;
try {
  ++a;
} catch (e) {
  ++a;
}

if (a != 13) exit(16);


# 17) try-catch with exception

a = 12;
try {
  ++a;
  throw ();
  ++a;
} catch (e) {
  --a;
}

if (a != 12) exit(17);


# 18) try-catch with exception in function

a = 12;
int foo(int a)
{
  ++a;
  throw ();
  ++a;
  return a;
}
try {
  a = foo(a);
} catch (e) {
  ;
}

if (a != 12) exit(18);


# 19) conditional expression

even = odd = 0;
for (i = 0; i < 10; i++) {
  i % 2 == 0 ? ++even : ++odd;
}

if (even != 5 || odd != 5) exit(19);


# 20) continue in nested block

a = b = 0;
do {
  if (++a % 2 == 0) {
    continue;
  }
  b++;
} while (a < 10);

if (b != 5) exit(20);


# 21) break out of infinite for loop

for (;;) {
  break;
}


# 22) locality of break in for loop

a = 0;
for (i = 0; i < 10; i++) {
  break;
  a++;
}
for (i = 0; i < 10; i++) {
  a++;
}

if (a != 10) exit(22);


# 23) locality of continue in for loop

a = 0;
for (i = 0; i < 10; i++) {
  continue;
  a++;
}
for (i = 0; i < 10; i++) {
  a++;
}

if (a != 10) exit(23);


print("23 subtests ");
