#define CEIL(v, k) (((v) + (1 << (k)) - 1) >> (k))
#define ICEIL(x, y) ((x) / (y) + ((x) % (y) != 0))
#define CEIL(v, k) (((v) + (1 << (k)) - 1) >> (k))
#define ICEIL(x, y) ((x) / (y) + ((x) % (y) != 0))
#define ROUNDDOWN(v, k) ((v) & ~((k)-1))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define ROUNDDOWN(v, k) ((v) & ~((k)-1))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
void
__assert_fail(const char* expr, const char* file, unsigned int line)
__attribute__((noinline, noreturn));
#else
#define assert(cond) (void)(cond); // assert nothing
#define assert_msg(cond, msg) (void)(cond); // assert nothing
void
__assert_fail(const char* expr, const char* file, unsigned int line)
__attribute__((noinline, noreturn));
#else
#define assert(cond) (void)(cond); // assert nothing
#define assert_msg(cond, msg) (void)(cond); // assert nothing