1//===-- test_helpers.h ----------------------------------------------------===// 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-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file is a part of XRay, a function call tracing system. 10// 11//===----------------------------------------------------------------------===// 12#ifndef COMPILER_RT_LIB_XRAY_TESTS_TEST_HELPERS_H_ 13#define COMPILER_RT_LIB_XRAY_TESTS_TEST_HELPERS_H_ 14 15#include "xray_buffer_queue.h" 16#include "xray_segmented_array.h" 17#include "llvm/XRay/Trace.h" 18#include "llvm/XRay/XRayRecord.h" 19#include "gmock/gmock.h" 20 21// TODO: Move these to llvm/include/Testing/XRay/... 22namespace llvm { 23namespace xray { 24 25std::string RecordTypeAsString(RecordTypes T); 26void PrintTo(RecordTypes T, std::ostream *OS); 27void PrintTo(const XRayRecord &R, std::ostream *OS); 28void PrintTo(const Trace &T, std::ostream *OS); 29 30namespace testing { 31 32MATCHER_P(FuncId, F, "") { 33 *result_listener << "where the function id is " << F; 34 return arg.FuncId == F; 35} 36 37MATCHER_P(RecordType, T, "") { 38 *result_listener << "where the record type is " << RecordTypeAsString(T); 39 return arg.Type == T; 40} 41 42MATCHER_P(HasArg, A, "") { 43 *result_listener << "where args contains " << A; 44 return !arg.CallArgs.empty() && 45 std::any_of(arg.CallArgs.begin(), arg.CallArgs.end(), 46 [this](decltype(A) V) { return V == A; }); 47} 48 49MATCHER_P(TSCIs, M, std::string("TSC is ") + ::testing::PrintToString(M)) { 50 return ::testing::Matcher<decltype(arg.TSC)>(M).MatchAndExplain( 51 arg.TSC, result_listener); 52} 53 54} // namespace testing 55} // namespace xray 56} // namespace llvm 57 58namespace __xray { 59 60std::string serialize(BufferQueue &Buffers, int32_t Version); 61 62template <class T> void PrintTo(const Array<T> &A, std::ostream *OS) { 63 *OS << "["; 64 bool first = true; 65 for (const auto &E : A) { 66 if (!first) { 67 *OS << ", "; 68 } 69 PrintTo(E, OS); 70 first = false; 71 } 72 *OS << "]"; 73} 74 75} // namespace __xray 76 77#endif // COMPILER_RT_LIB_XRAY_TESTS_TEST_HELPERS_H_ 78