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