xref: /aosp_15_r20/external/llvm-libc/test/UnitTest/MemoryMatcher.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1 //===-- MemoryMatcher.h -----------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_LIBC_TEST_UNITTEST_MEMORYMATCHER_H
10 #define LLVM_LIBC_TEST_UNITTEST_MEMORYMATCHER_H
11 
12 #include "src/__support/CPP/span.h"
13 
14 #include "src/__support/macros/config.h"
15 #include "test/UnitTest/Test.h"
16 
17 namespace LIBC_NAMESPACE_DECL {
18 namespace testing {
19 
20 using MemoryView = LIBC_NAMESPACE::cpp::span<const char>;
21 
22 } // namespace testing
23 } // namespace LIBC_NAMESPACE_DECL
24 
25 #if !LIBC_TEST_HAS_MATCHERS()
26 
27 #define EXPECT_MEM_EQ(expected, actual)                                        \
28   do {                                                                         \
29     LIBC_NAMESPACE::testing::MemoryView e = (expected);                        \
30     LIBC_NAMESPACE::testing::MemoryView a = (actual);                          \
31     ASSERT_EQ(e.size(), a.size());                                             \
32     EXPECT_BYTES_EQ(e.data(), a.data(), e.size());                             \
33   } while (0)
34 
35 #define ASSERT_MEM_EQ(expected, actual)                                        \
36   do {                                                                         \
37     LIBC_NAMESPACE::testing::MemoryView e = (expected);                        \
38     LIBC_NAMESPACE::testing::MemoryView a = (actual);                          \
39     ASSERT_EQ(e.size(), a.size());                                             \
40     ASSERT_BYTES_EQ(e.data(), a.data(), e.size());                             \
41   } while (0)
42 
43 #else // LIBC_TEST_HAS_MATCHERS()
44 
45 namespace LIBC_NAMESPACE_DECL {
46 namespace testing {
47 
48 class MemoryMatcher : public Matcher<MemoryView> {
49   MemoryView expected;
50   MemoryView actual;
51   bool mismatch_size = false;
52   size_t mismatch_index = -1;
53 
54 public:
MemoryMatcher(MemoryView expectedValue)55   MemoryMatcher(MemoryView expectedValue) : expected(expectedValue) {}
56 
57   bool match(MemoryView actualValue);
58 
59   void explainError() override;
60 };
61 
62 } // namespace testing
63 } // namespace LIBC_NAMESPACE_DECL
64 
65 #define EXPECT_MEM_EQ(expected, actual)                                        \
66   EXPECT_THAT(actual, LIBC_NAMESPACE::testing::MemoryMatcher(expected))
67 #define ASSERT_MEM_EQ(expected, actual)                                        \
68   ASSERT_THAT(actual, LIBC_NAMESPACE::testing::MemoryMatcher(expected))
69 
70 #endif // !LIBC_TEST_HAS_MATCHERS()
71 
72 #endif // LLVM_LIBC_TEST_UNITTEST_MEMORYMATCHER_H
73