#ifndef MARISA_ASSERT_H_
#define MARISA_ASSERT_H_

#include <stdio.h>
#include <stdlib.h>

#define ASSERT(cond) (void)((!!(cond)) || \
  (printf("%d: Assertion `%s' failed.\n", __LINE__, #cond), exit(-1), 0))

#define EXCEPT(code, expected_status) try { \
  code; \
  printf("%d: Exception `%s' failed.\n", __LINE__, #code); \
  exit(-1); \
} catch (const marisa::Exception &ex) { \
  ASSERT(ex.status() == expected_status); \
}

#define TEST_START() \
  printf("%s:%d: %s(): ", __FILE__, __LINE__, __FUNCTION__)

#define TEST_END() \
  printf("ok\n")

#endif  // MARISA_ASSERT_H_