brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 405f226 Raw
86 lines · cpp
1//===-- MemoryMatcher.cpp ---------------------------------------*- 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#include "MemoryMatcher.h"10 11#include "src/__support/ctype_utils.h"12#include "src/__support/macros/config.h"13#include "test/UnitTest/Test.h"14 15#if LIBC_TEST_HAS_MATCHERS()16 17using LIBC_NAMESPACE::testing::tlog;18 19namespace LIBC_NAMESPACE_DECL {20namespace testing {21 22template <typename T>23bool equals(const cpp::span<T> &Span1, const cpp::span<T> &Span2,24            bool &mismatch_size, size_t &mismatch_index) {25  if (Span1.size() != Span2.size()) {26    mismatch_size = true;27    return false;28  }29  for (size_t Index = 0; Index < Span1.size(); ++Index)30    if (Span1[Index] != Span2[Index]) {31      mismatch_index = Index;32      return false;33    }34  return true;35}36 37bool MemoryMatcher::match(MemoryView actualValue) {38  actual = actualValue;39  return equals(expected, actual, mismatch_size, mismatch_index);40}41 42static void display(char C) {43  const auto print = [](unsigned char i) {44    tlog << LIBC_NAMESPACE::internal::toupper(45        LIBC_NAMESPACE::internal::int_to_b36_char(i));46  };47  print(static_cast<unsigned char>(C) / 16);48  print(static_cast<unsigned char>(C) & 15);49}50 51static void display(MemoryView View) {52  for (auto C : View) {53    tlog << ' ';54    display(C);55  }56}57 58void MemoryMatcher::explainError() {59  if (mismatch_size) {60    tlog << "Size mismatch :";61    tlog << "expected : ";62    tlog << expected.size();63    tlog << '\n';64    tlog << "actual   : ";65    tlog << actual.size();66    tlog << '\n';67  } else {68    tlog << "Mismatch at position : ";69    tlog << mismatch_index;70    tlog << " / ";71    tlog << expected.size();72    tlog << "\n";73    tlog << "expected :";74    display(expected);75    tlog << '\n';76    tlog << "actual   :";77    display(actual);78    tlog << '\n';79  }80}81 82} // namespace testing83} // namespace LIBC_NAMESPACE_DECL84 85#endif // LIBC_TEST_HAS_MATCHERS()86