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
17namespace LIBC_NAMESPACE_DECL {
18namespace testing {
19
20using 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
45namespace LIBC_NAMESPACE_DECL {
46namespace testing {
47
48class MemoryMatcher : public Matcher<MemoryView> {
49 MemoryView expected;
50 MemoryView actual;
51 bool mismatch_size = false;
52 size_t mismatch_index = cpp::numeric_limits<size_t>::max();
53
54public:
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

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

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