xref: /aosp_15_r20/external/llvm-libc/test/IntegrationTest/test.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- Simple checkers for integrations tests ------------------*- C++ -*-===//
2*71db0c75SAndroid Build Coastguard Worker //
3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*71db0c75SAndroid Build Coastguard Worker //
7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*71db0c75SAndroid Build Coastguard Worker 
9*71db0c75SAndroid Build Coastguard Worker #ifndef LLVM_LIBC_UTILS_INTEGRATION_TEST_TEST_H
10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_UTILS_INTEGRATION_TEST_TEST_H
11*71db0c75SAndroid Build Coastguard Worker 
12*71db0c75SAndroid Build Coastguard Worker #include "src/__support/OSUtil/exit.h"
13*71db0c75SAndroid Build Coastguard Worker #include "src/__support/OSUtil/io.h"
14*71db0c75SAndroid Build Coastguard Worker 
15*71db0c75SAndroid Build Coastguard Worker #define __AS_STRING(val) #val
16*71db0c75SAndroid Build Coastguard Worker #define __CHECK_TRUE(file, line, val, should_exit)                             \
17*71db0c75SAndroid Build Coastguard Worker   if (!(val)) {                                                                \
18*71db0c75SAndroid Build Coastguard Worker     LIBC_NAMESPACE::write_to_stderr(file ":" __AS_STRING(                      \
19*71db0c75SAndroid Build Coastguard Worker         line) ": Expected '" #val "' to be true, but is false\n");             \
20*71db0c75SAndroid Build Coastguard Worker     if (should_exit)                                                           \
21*71db0c75SAndroid Build Coastguard Worker       LIBC_NAMESPACE::internal::exit(127);                                     \
22*71db0c75SAndroid Build Coastguard Worker   }
23*71db0c75SAndroid Build Coastguard Worker 
24*71db0c75SAndroid Build Coastguard Worker #define __CHECK_FALSE(file, line, val, should_exit)                            \
25*71db0c75SAndroid Build Coastguard Worker   if (val) {                                                                   \
26*71db0c75SAndroid Build Coastguard Worker     LIBC_NAMESPACE::write_to_stderr(file ":" __AS_STRING(                      \
27*71db0c75SAndroid Build Coastguard Worker         line) ": Expected '" #val "' to be false, but is true\n");             \
28*71db0c75SAndroid Build Coastguard Worker     if (should_exit)                                                           \
29*71db0c75SAndroid Build Coastguard Worker       LIBC_NAMESPACE::internal::exit(127);                                     \
30*71db0c75SAndroid Build Coastguard Worker   }
31*71db0c75SAndroid Build Coastguard Worker 
32*71db0c75SAndroid Build Coastguard Worker #define __CHECK_EQ(file, line, val1, val2, should_exit)                        \
33*71db0c75SAndroid Build Coastguard Worker   if ((val1) != (val2)) {                                                      \
34*71db0c75SAndroid Build Coastguard Worker     LIBC_NAMESPACE::write_to_stderr(file ":" __AS_STRING(                      \
35*71db0c75SAndroid Build Coastguard Worker         line) ": Expected '" #val1 "' to be equal to '" #val2 "'\n");          \
36*71db0c75SAndroid Build Coastguard Worker     if (should_exit)                                                           \
37*71db0c75SAndroid Build Coastguard Worker       LIBC_NAMESPACE::internal::exit(127);                                     \
38*71db0c75SAndroid Build Coastguard Worker   }
39*71db0c75SAndroid Build Coastguard Worker 
40*71db0c75SAndroid Build Coastguard Worker #define __CHECK_NE(file, line, val1, val2, should_exit)                        \
41*71db0c75SAndroid Build Coastguard Worker   if ((val1) == (val2)) {                                                      \
42*71db0c75SAndroid Build Coastguard Worker     LIBC_NAMESPACE::write_to_stderr(file ":" __AS_STRING(                      \
43*71db0c75SAndroid Build Coastguard Worker         line) ": Expected '" #val1 "' to not be equal to '" #val2 "'\n");      \
44*71db0c75SAndroid Build Coastguard Worker     if (should_exit)                                                           \
45*71db0c75SAndroid Build Coastguard Worker       LIBC_NAMESPACE::internal::exit(127);                                     \
46*71db0c75SAndroid Build Coastguard Worker   }
47*71db0c75SAndroid Build Coastguard Worker 
48*71db0c75SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
49*71db0c75SAndroid Build Coastguard Worker // Boolean checks are handled as comparison to the true / false values.
50*71db0c75SAndroid Build Coastguard Worker 
51*71db0c75SAndroid Build Coastguard Worker #define EXPECT_TRUE(val) __CHECK_TRUE(__FILE__, __LINE__, val, false)
52*71db0c75SAndroid Build Coastguard Worker #define ASSERT_TRUE(val) __CHECK_TRUE(__FILE__, __LINE__, val, true)
53*71db0c75SAndroid Build Coastguard Worker #define EXPECT_FALSE(val) __CHECK_FALSE(__FILE__, __LINE__, val, false)
54*71db0c75SAndroid Build Coastguard Worker #define ASSERT_FALSE(val) __CHECK_FALSE(__FILE__, __LINE__, val, true)
55*71db0c75SAndroid Build Coastguard Worker 
56*71db0c75SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
57*71db0c75SAndroid Build Coastguard Worker // Binary equality / inequality.
58*71db0c75SAndroid Build Coastguard Worker 
59*71db0c75SAndroid Build Coastguard Worker #define EXPECT_EQ(val1, val2)                                                  \
60*71db0c75SAndroid Build Coastguard Worker   __CHECK_EQ(__FILE__, __LINE__, (val1), (val2), false)
61*71db0c75SAndroid Build Coastguard Worker #define ASSERT_EQ(val1, val2)                                                  \
62*71db0c75SAndroid Build Coastguard Worker   __CHECK_EQ(__FILE__, __LINE__, (val1), (val2), true)
63*71db0c75SAndroid Build Coastguard Worker #define EXPECT_NE(val1, val2)                                                  \
64*71db0c75SAndroid Build Coastguard Worker   __CHECK_NE(__FILE__, __LINE__, (val1), (val2), false)
65*71db0c75SAndroid Build Coastguard Worker #define ASSERT_NE(val1, val2)                                                  \
66*71db0c75SAndroid Build Coastguard Worker   __CHECK_NE(__FILE__, __LINE__, (val1), (val2), true)
67*71db0c75SAndroid Build Coastguard Worker 
68*71db0c75SAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
69*71db0c75SAndroid Build Coastguard Worker // Errno checks.
70*71db0c75SAndroid Build Coastguard Worker 
71*71db0c75SAndroid Build Coastguard Worker #define ASSERT_ERRNO_EQ(VAL)                                                   \
72*71db0c75SAndroid Build Coastguard Worker   ASSERT_EQ(VAL, static_cast<int>(LIBC_NAMESPACE::libc_errno))
73*71db0c75SAndroid Build Coastguard Worker #define ASSERT_ERRNO_SUCCESS()                                                 \
74*71db0c75SAndroid Build Coastguard Worker   ASSERT_EQ(0, static_cast<int>(LIBC_NAMESPACE::libc_errno))
75*71db0c75SAndroid Build Coastguard Worker #define ASSERT_ERRNO_FAILURE()                                                 \
76*71db0c75SAndroid Build Coastguard Worker   ASSERT_NE(0, static_cast<int>(LIBC_NAMESPACE::libc_errno))
77*71db0c75SAndroid Build Coastguard Worker 
78*71db0c75SAndroid Build Coastguard Worker // Integration tests are compiled with -ffreestanding which stops treating
79*71db0c75SAndroid Build Coastguard Worker // the main function as a non-overloadable special function. Hence, we use a
80*71db0c75SAndroid Build Coastguard Worker // convenience macro which declares it 'extern "C"'.
81*71db0c75SAndroid Build Coastguard Worker //
82*71db0c75SAndroid Build Coastguard Worker // When we are able to reuse the unit test infrastructure for integration
83*71db0c75SAndroid Build Coastguard Worker // tests, then we should not need to explicitly declare/define the main
84*71db0c75SAndroid Build Coastguard Worker // function in individual integration tests. We will not need this macro
85*71db0c75SAndroid Build Coastguard Worker // then.
86*71db0c75SAndroid Build Coastguard Worker #define TEST_MAIN extern "C" int main
87*71db0c75SAndroid Build Coastguard Worker 
88*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_UTILS_INTEGRATION_TEST_TEST_H
89