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 "test/UnitTest/Test.h"
15
16namespace LIBC_NAMESPACE {
17namespace testing {
18
19using MemoryView = LIBC_NAMESPACE::cpp::span<const char>;
20
21} // namespace testing
22} // namespace LIBC_NAMESPACE
23
24#if !LIBC_TEST_HAS_MATCHERS()
25
26#define EXPECT_MEM_EQ(expected, actual) \
27 do { \
28 LIBC_NAMESPACE::testing::MemoryView e = (expected); \
29 LIBC_NAMESPACE::testing::MemoryView a = (actual); \
30 ASSERT_EQ(e.size(), a.size()); \
31 EXPECT_BYTES_EQ(e.data(), a.data(), e.size()); \
32 } while (0)
33
34#define ASSERT_MEM_EQ(expected, actual) \
35 do { \
36 LIBC_NAMESPACE::testing::MemoryView e = (expected); \
37 LIBC_NAMESPACE::testing::MemoryView a = (actual); \
38 ASSERT_EQ(e.size(), a.size()); \
39 ASSERT_BYTES_EQ(e.data(), a.data(), e.size()); \
40 } while (0)
41
42#else // LIBC_TEST_HAS_MATCHERS()
43
44namespace LIBC_NAMESPACE::testing {
45
46class MemoryMatcher : public Matcher<MemoryView> {
47 MemoryView expected;
48 MemoryView actual;
49 bool mismatch_size = false;
50 size_t mismatch_index = -1;
51
52public:
53 MemoryMatcher(MemoryView expectedValue) : expected(expectedValue) {}
54
55 bool match(MemoryView actualValue);
56
57 void explainError() override;
58};
59
60} // namespace LIBC_NAMESPACE::testing
61
62#define EXPECT_MEM_EQ(expected, actual) \
63 EXPECT_THAT(actual, LIBC_NAMESPACE::testing::MemoryMatcher(expected))
64#define ASSERT_MEM_EQ(expected, actual) \
65 ASSERT_THAT(actual, LIBC_NAMESPACE::testing::MemoryMatcher(expected))
66
67#endif // !LIBC_TEST_HAS_MATCHERS()
68
69#endif // LLVM_LIBC_TEST_UNITTEST_MEMORYMATCHER_H
70

source code of libc/test/UnitTest/MemoryMatcher.h