blob: cac8a271e7d88a3e5c8e021bd659d2ec3e7806f5 [file] [edit]
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// C wrappers for libc unittests
///
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIBC_TEST_UNITTEST_LIBCCTEST_H
#define LLVM_LIBC_TEST_UNITTEST_LIBCCTEST_H
#include "include/__llvm-libc-common.h"
__BEGIN_C_DECLS
// These symbols are implementation details of the test macros. Do not reference
// them directly.
void libc_c_test_fail(const char *cond, int expected, const char *file,
int line);
extern const char LIBC_C_TEST_NAME[];
void libc_c_test_run(void);
void libc_c_test_anchor(void);
__END_C_DECLS
// Use LibcTest.h in C++ code.
#ifndef __cplusplus
#define TEST(name) \
const char LIBC_C_TEST_NAME[] = "LlvmLibcCTest." #name; \
void libc_c_test_run_impl(void); \
void libc_c_test_run(void) { \
libc_c_test_anchor(); /* Force a reference to the C test framework. */ \
libc_c_test_run_impl(); \
} \
void libc_c_test_run_impl(void)
#define LIBC_C_TEST_SCAFFOLDING_(cond, expected, ret_or_empty) \
do { \
if (!(cond) != !(expected)) { \
libc_c_test_fail(#cond, (expected), __FILE__, __LINE__); \
ret_or_empty; \
} \
} while (0)
#define EXPECT_TRUE(cond) LIBC_C_TEST_SCAFFOLDING_(cond, 1, )
#define ASSERT_TRUE(cond) LIBC_C_TEST_SCAFFOLDING_(cond, 1, return)
#define EXPECT_FALSE(cond) LIBC_C_TEST_SCAFFOLDING_(cond, 0, )
#define ASSERT_FALSE(cond) LIBC_C_TEST_SCAFFOLDING_(cond, 0, return)
#endif
#endif // LLVM_LIBC_TEST_UNITTEST_LIBCCTEST_H