11794532bSEllis Hoag //===- BPFunctionNodeTest.cpp - BPFunctionNode tests ----------------------===//
21794532bSEllis Hoag //
31794532bSEllis Hoag // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
41794532bSEllis Hoag // See https://llvm.org/LICENSE.txt for license information.
51794532bSEllis Hoag // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
61794532bSEllis Hoag //
71794532bSEllis Hoag //===----------------------------------------------------------------------===//
81794532bSEllis Hoag
91794532bSEllis Hoag #include "llvm/ProfileData/InstrProf.h"
101794532bSEllis Hoag #include "llvm/Support/BalancedPartitioning.h"
111794532bSEllis Hoag #include "gmock/gmock.h"
121794532bSEllis Hoag #include "gtest/gtest.h"
131794532bSEllis Hoag
141794532bSEllis Hoag using testing::Field;
151794532bSEllis Hoag using testing::UnorderedElementsAre;
1630aa9fb4Sspupyrev using testing::UnorderedElementsAreArray;
171794532bSEllis Hoag
181794532bSEllis Hoag namespace llvm {
191794532bSEllis Hoag
PrintTo(const BPFunctionNode & Node,std::ostream * OS)201794532bSEllis Hoag void PrintTo(const BPFunctionNode &Node, std::ostream *OS) {
211794532bSEllis Hoag raw_os_ostream ROS(*OS);
221794532bSEllis Hoag Node.dump(ROS);
231794532bSEllis Hoag }
241794532bSEllis Hoag
TEST(BPFunctionNodeTest,Basic)251794532bSEllis Hoag TEST(BPFunctionNodeTest, Basic) {
261794532bSEllis Hoag auto NodeIs = [](BPFunctionNode::IDT Id,
2730aa9fb4Sspupyrev ArrayRef<BPFunctionNode::UtilityNodeT> UNs) {
2830aa9fb4Sspupyrev return AllOf(Field("Id", &BPFunctionNode::Id, Id),
2930aa9fb4Sspupyrev Field("UtilityNodes", &BPFunctionNode::UtilityNodes,
3030aa9fb4Sspupyrev UnorderedElementsAreArray(UNs)));
311794532bSEllis Hoag };
321794532bSEllis Hoag
33*73eb9b33SEllis Hoag std::vector<BPFunctionNode> Nodes;
34*73eb9b33SEllis Hoag TemporalProfTraceTy::createBPFunctionNodes(
35*73eb9b33SEllis Hoag {TemporalProfTraceTy({0, 1, 2, 3})}, Nodes, /*RemoveOutlierUNs=*/false);
36*73eb9b33SEllis Hoag // Utility nodes that are too infrequent or too prevalent are filtered out.
3730aa9fb4Sspupyrev EXPECT_THAT(Nodes,
3830aa9fb4Sspupyrev UnorderedElementsAre(NodeIs(0, {0, 1, 2}), NodeIs(1, {1, 2}),
39*73eb9b33SEllis Hoag NodeIs(2, {2}), NodeIs(3, {2})));
400c6dc805SFangrui Song
41*73eb9b33SEllis Hoag Nodes.clear();
42*73eb9b33SEllis Hoag TemporalProfTraceTy::createBPFunctionNodes(
43*73eb9b33SEllis Hoag {TemporalProfTraceTy({0, 1, 2, 3, 4}), TemporalProfTraceTy({4, 2})},
44*73eb9b33SEllis Hoag Nodes, /*RemoveOutlierUNs=*/false);
450c6dc805SFangrui Song
4630aa9fb4Sspupyrev EXPECT_THAT(Nodes,
47*73eb9b33SEllis Hoag UnorderedElementsAre(NodeIs(0, {0, 1, 2, 3}),
48*73eb9b33SEllis Hoag NodeIs(1, {1, 2, 3}), NodeIs(2, {2, 3, 5}),
49*73eb9b33SEllis Hoag NodeIs(3, {2, 3}), NodeIs(4, {3, 4, 5})));
50*73eb9b33SEllis Hoag
51*73eb9b33SEllis Hoag Nodes.clear();
52*73eb9b33SEllis Hoag TemporalProfTraceTy::createBPFunctionNodes(
53*73eb9b33SEllis Hoag {TemporalProfTraceTy({0, 1, 2, 3, 4}), TemporalProfTraceTy({4, 2})},
54*73eb9b33SEllis Hoag Nodes, /*RemoveOutlierUNs=*/true);
55*73eb9b33SEllis Hoag
56*73eb9b33SEllis Hoag EXPECT_THAT(Nodes, UnorderedElementsAre(NodeIs(0, {1}), NodeIs(1, {1}),
57*73eb9b33SEllis Hoag NodeIs(2, {5}), NodeIs(3, {}),
58*73eb9b33SEllis Hoag NodeIs(4, {5})));
591794532bSEllis Hoag }
601794532bSEllis Hoag
611794532bSEllis Hoag } // end namespace llvm
62