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 Chateletbool 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 Chateletvoid 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 Chateletvoid 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 Chateletvoid 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