1*83f9b13dSGuillaume Chatelet //===-- MemoryMatcher.cpp ---------------------------------------*- C++ -*-===//
2*83f9b13dSGuillaume Chatelet //
3*83f9b13dSGuillaume Chatelet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*83f9b13dSGuillaume Chatelet // See https://llvm.org/LICENSE.txt for license information.
5*83f9b13dSGuillaume Chatelet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*83f9b13dSGuillaume Chatelet //
7*83f9b13dSGuillaume Chatelet //===----------------------------------------------------------------------===//
8*83f9b13dSGuillaume Chatelet 
9*83f9b13dSGuillaume Chatelet #include "MemoryMatcher.h"
10*83f9b13dSGuillaume Chatelet 
11*83f9b13dSGuillaume Chatelet namespace __llvm_libc {
12*83f9b13dSGuillaume Chatelet namespace memory {
13*83f9b13dSGuillaume Chatelet namespace testing {
14*83f9b13dSGuillaume Chatelet 
match(MemoryView actualValue)15*83f9b13dSGuillaume Chatelet bool MemoryMatcher::match(MemoryView actualValue) {
16*83f9b13dSGuillaume Chatelet   actual = actualValue;
17*83f9b13dSGuillaume Chatelet   return expected.equals(actual);
18*83f9b13dSGuillaume Chatelet }
19*83f9b13dSGuillaume Chatelet 
display(testutils::StreamWrapper & Stream,char C)20*83f9b13dSGuillaume Chatelet void display(testutils::StreamWrapper &Stream, char C) {
21*83f9b13dSGuillaume Chatelet   const auto print = [&Stream](unsigned char I) {
22*83f9b13dSGuillaume Chatelet     Stream << static_cast<char>(I < 10 ? '0' + I : 'A' + I - 10);
23*83f9b13dSGuillaume Chatelet   };
24*83f9b13dSGuillaume Chatelet   print(static_cast<unsigned char>(C) / 16);
25*83f9b13dSGuillaume Chatelet   print(static_cast<unsigned char>(C) & 15);
26*83f9b13dSGuillaume Chatelet }
27*83f9b13dSGuillaume Chatelet 
display(testutils::StreamWrapper & Stream,MemoryView View)28*83f9b13dSGuillaume Chatelet void display(testutils::StreamWrapper &Stream, MemoryView View) {
29*83f9b13dSGuillaume Chatelet   for (auto C : View) {
30*83f9b13dSGuillaume Chatelet     Stream << ' ';
31*83f9b13dSGuillaume Chatelet     display(Stream, C);
32*83f9b13dSGuillaume Chatelet   }
33*83f9b13dSGuillaume Chatelet }
34*83f9b13dSGuillaume Chatelet 
explainError(testutils::StreamWrapper & Stream)35*83f9b13dSGuillaume Chatelet void MemoryMatcher::explainError(testutils::StreamWrapper &Stream) {
36*83f9b13dSGuillaume Chatelet   Stream << "expected :";
37*83f9b13dSGuillaume Chatelet   display(Stream, expected);
38*83f9b13dSGuillaume Chatelet   Stream << '\n';
39*83f9b13dSGuillaume Chatelet   Stream << "actual   :";
40*83f9b13dSGuillaume Chatelet   display(Stream, actual);
41*83f9b13dSGuillaume Chatelet   Stream << '\n';
42*83f9b13dSGuillaume Chatelet }
43*83f9b13dSGuillaume Chatelet 
44*83f9b13dSGuillaume Chatelet } // namespace testing
45*83f9b13dSGuillaume Chatelet } // namespace memory
46*83f9b13dSGuillaume Chatelet } // namespace __llvm_libc
47