#ifndef __TEST_H__
#define __TEST_H__

static int test_passed = 0;
static int test_failed = 0;

/* Terminate current test with error */
#define fail() return __LINE__

/* Successful end of the test case */
#define done() return 0

/* Check single condition */
#define check(cond)                                                            \
  do {                                                                         \
    if (!(cond))                                                               \
      fail();                                                                  \
  } while (0)

/* Test runner */
static void test(int (*func)(void), const char *name) {
  int r = func();
  if (r == 0) {
    test_passed++;
  } else {
    test_failed++;
    printf("FAILED: %s (at line %d)\n", name, r);
  }
}

#endif /* __TEST_H__ */
