/* libmisc/tests/test_assert.c - Tests for * * Copyright (C) 2024 Luke T. Shumaker * SPDX-License-Identifier: AGPL-3.0-or-later */ #include #include #include "test.h" /* Intercept failures *********************************************************/ bool global_failed = false; bool global_unreachable = false; void __assert_msg_fail(const char *expr, const char *file, unsigned int line, const char *func, const char *msg) { static bool in_fail = false; if (!in_fail) { in_fail = true; printf("error: %s:%u:%s(): assertion \"%s\" failed%s%s\n", file, line, func, expr, msg ? ": " : "", msg); } global_failed = true; } #define __builtin_unreachable() do { global_unreachable = true; } while (0) /* Utilities ******************************************************************/ #define test_should_succeed(test) do { \ global_failed = false; \ test; \ test_assert(global_failed == false); \ } while (0) #define test_should_fail(test) do { \ global_failed = false; \ test; \ test_assert(global_failed == true); \ } while (0) /* Actual tests ***************************************************************/ static_assert(sizeof(char) == 1); int main() { test_should_succeed(assert(true)); test_should_fail(assert(false)); test_should_succeed(assert_msg(true, "foo")); test_should_fail(assert_msg(false, "foo")); test_should_succeed(assert_msg(true, NULL)); test_should_fail(assert_msg(false, NULL)); test_should_fail(assert_notreached("")); test_assert(global_unreachable == true); return 0; }