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