xref: /llvm-project/llvm/unittests/ProfileData/BPFunctionNodeTest.cpp (revision 30aa9fb4c1da33892a38f952fbdf6e7e45e5953a)
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 "llvm/Testing/Support/SupportHelpers.h"
121794532bSEllis Hoag #include "gmock/gmock.h"
131794532bSEllis Hoag #include "gtest/gtest.h"
141794532bSEllis Hoag 
151794532bSEllis Hoag using testing::Field;
161794532bSEllis Hoag using testing::UnorderedElementsAre;
17*30aa9fb4Sspupyrev using testing::UnorderedElementsAreArray;
181794532bSEllis Hoag 
191794532bSEllis Hoag namespace llvm {
201794532bSEllis Hoag 
211794532bSEllis Hoag void PrintTo(const BPFunctionNode &Node, std::ostream *OS) {
221794532bSEllis Hoag   raw_os_ostream ROS(*OS);
231794532bSEllis Hoag   Node.dump(ROS);
241794532bSEllis Hoag }
251794532bSEllis Hoag 
261794532bSEllis Hoag TEST(BPFunctionNodeTest, Basic) {
271794532bSEllis Hoag   auto NodeIs = [](BPFunctionNode::IDT Id,
28*30aa9fb4Sspupyrev                    ArrayRef<BPFunctionNode::UtilityNodeT> UNs) {
29*30aa9fb4Sspupyrev     return AllOf(Field("Id", &BPFunctionNode::Id, Id),
30*30aa9fb4Sspupyrev                  Field("UtilityNodes", &BPFunctionNode::UtilityNodes,
31*30aa9fb4Sspupyrev                        UnorderedElementsAreArray(UNs)));
321794532bSEllis Hoag   };
331794532bSEllis Hoag 
340c6dc805SFangrui Song   auto Nodes = TemporalProfTraceTy::createBPFunctionNodes({
350c6dc805SFangrui Song       TemporalProfTraceTy({0, 1, 2, 3}),
360c6dc805SFangrui Song   });
37*30aa9fb4Sspupyrev   EXPECT_THAT(Nodes,
38*30aa9fb4Sspupyrev               UnorderedElementsAre(NodeIs(0, {0, 1, 2}), NodeIs(1, {1, 2}),
39*30aa9fb4Sspupyrev                                    NodeIs(2, {1, 2}), NodeIs(3, {2})));
400c6dc805SFangrui Song 
410c6dc805SFangrui Song   Nodes = TemporalProfTraceTy::createBPFunctionNodes({
420c6dc805SFangrui Song       TemporalProfTraceTy({0, 1, 2, 3, 4}),
430c6dc805SFangrui Song       TemporalProfTraceTy({4, 2}),
440c6dc805SFangrui Song   });
450c6dc805SFangrui Song 
46*30aa9fb4Sspupyrev   EXPECT_THAT(Nodes,
47*30aa9fb4Sspupyrev               UnorderedElementsAre(NodeIs(0, {0, 1, 2}), NodeIs(1, {1, 2}),
48*30aa9fb4Sspupyrev                                    NodeIs(2, {1, 2, 4, 5}), NodeIs(3, {2}),
49*30aa9fb4Sspupyrev                                    NodeIs(4, {2, 3, 4, 5})));
501794532bSEllis Hoag }
511794532bSEllis Hoag 
521794532bSEllis Hoag } // end namespace llvm
53