73 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIBC_TEST_UNITTEST_MEMORYMATCHER_H10#define LLVM_LIBC_TEST_UNITTEST_MEMORYMATCHER_H11 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 testing23} // namespace LIBC_NAMESPACE_DECL24 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 testing63} // namespace LIBC_NAMESPACE_DECL64 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_H73