1d3972039SFrancis Visoiu Mistrih //===- unittest/Support/RemarksAPITest.cpp - C++ API tests ----------------===//
2d3972039SFrancis Visoiu Mistrih //
3d3972039SFrancis Visoiu Mistrih // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4d3972039SFrancis Visoiu Mistrih // See https://llvm.org/LICENSE.txt for license information.
5d3972039SFrancis Visoiu Mistrih // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6d3972039SFrancis Visoiu Mistrih //
7d3972039SFrancis Visoiu Mistrih //===----------------------------------------------------------------------===//
8d3972039SFrancis Visoiu Mistrih
9d3972039SFrancis Visoiu Mistrih #include "llvm/Remarks/Remark.h"
10*e14c0c5aSFrancis Visoiu Mistrih #include "llvm/Remarks/RemarkStringTable.h"
11d3972039SFrancis Visoiu Mistrih #include "gtest/gtest.h"
12d3972039SFrancis Visoiu Mistrih
13d3972039SFrancis Visoiu Mistrih using namespace llvm;
14d3972039SFrancis Visoiu Mistrih
TEST(RemarksAPI,Comparison)15d3972039SFrancis Visoiu Mistrih TEST(RemarksAPI, Comparison) {
16d3972039SFrancis Visoiu Mistrih remarks::Remark R;
17d3972039SFrancis Visoiu Mistrih R.RemarkType = remarks::Type::Missed;
18d3972039SFrancis Visoiu Mistrih R.PassName = "pass";
19d3972039SFrancis Visoiu Mistrih R.RemarkName = "name";
20d3972039SFrancis Visoiu Mistrih R.FunctionName = "func";
21d3972039SFrancis Visoiu Mistrih R.Loc = remarks::RemarkLocation{"path", 3, 4};
22d3972039SFrancis Visoiu Mistrih R.Hotness = 5;
23d3972039SFrancis Visoiu Mistrih R.Args.emplace_back();
24d3972039SFrancis Visoiu Mistrih R.Args.back().Key = "key";
25d3972039SFrancis Visoiu Mistrih R.Args.back().Val = "value";
26d3972039SFrancis Visoiu Mistrih R.Args.emplace_back();
27d3972039SFrancis Visoiu Mistrih R.Args.back().Key = "keydebug";
28d3972039SFrancis Visoiu Mistrih R.Args.back().Val = "valuedebug";
29d3972039SFrancis Visoiu Mistrih R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
30d3972039SFrancis Visoiu Mistrih
31d3972039SFrancis Visoiu Mistrih // Check that == works.
32d3972039SFrancis Visoiu Mistrih EXPECT_EQ(R, R);
33d3972039SFrancis Visoiu Mistrih
34d3972039SFrancis Visoiu Mistrih // Check that != works.
35d3972039SFrancis Visoiu Mistrih remarks::Remark R2 = R.clone();
36d3972039SFrancis Visoiu Mistrih R2.FunctionName = "func0";
37d3972039SFrancis Visoiu Mistrih EXPECT_NE(R, R2);
38d3972039SFrancis Visoiu Mistrih
39d3972039SFrancis Visoiu Mistrih // Check that we iterate through all the arguments.
40d3972039SFrancis Visoiu Mistrih remarks::Remark R3 = R.clone();
41d3972039SFrancis Visoiu Mistrih R3.Args.back().Val = "not";
42d3972039SFrancis Visoiu Mistrih EXPECT_NE(R, R3);
43d3972039SFrancis Visoiu Mistrih }
44d3972039SFrancis Visoiu Mistrih
TEST(RemarksAPI,Clone)45d3972039SFrancis Visoiu Mistrih TEST(RemarksAPI, Clone) {
46d3972039SFrancis Visoiu Mistrih remarks::Remark R;
47d3972039SFrancis Visoiu Mistrih R.RemarkType = remarks::Type::Missed;
48d3972039SFrancis Visoiu Mistrih R.PassName = "pass";
49d3972039SFrancis Visoiu Mistrih R.RemarkName = "name";
50d3972039SFrancis Visoiu Mistrih R.FunctionName = "func";
51d3972039SFrancis Visoiu Mistrih R.Loc = remarks::RemarkLocation{"path", 3, 4};
52d3972039SFrancis Visoiu Mistrih R.Hotness = 5;
53d3972039SFrancis Visoiu Mistrih R.Args.emplace_back();
54d3972039SFrancis Visoiu Mistrih R.Args.back().Key = "key";
55d3972039SFrancis Visoiu Mistrih R.Args.back().Val = "value";
56d3972039SFrancis Visoiu Mistrih R.Args.emplace_back();
57d3972039SFrancis Visoiu Mistrih R.Args.back().Key = "keydebug";
58d3972039SFrancis Visoiu Mistrih R.Args.back().Val = "valuedebug";
59d3972039SFrancis Visoiu Mistrih R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
60d3972039SFrancis Visoiu Mistrih
61d3972039SFrancis Visoiu Mistrih // Check that clone works.
62d3972039SFrancis Visoiu Mistrih remarks::Remark R2 = R.clone();
63d3972039SFrancis Visoiu Mistrih EXPECT_EQ(R, R2);
64d3972039SFrancis Visoiu Mistrih }
65d3972039SFrancis Visoiu Mistrih
TEST(RemarksAPI,ArgsAsMsg)66d3972039SFrancis Visoiu Mistrih TEST(RemarksAPI, ArgsAsMsg) {
67d3972039SFrancis Visoiu Mistrih remarks::Remark R;
68d3972039SFrancis Visoiu Mistrih R.RemarkType = remarks::Type::Missed;
69d3972039SFrancis Visoiu Mistrih R.Args.emplace_back();
70d3972039SFrancis Visoiu Mistrih R.Args.back().Key = "key";
71d3972039SFrancis Visoiu Mistrih R.Args.back().Val = "can not do this ";
72d3972039SFrancis Visoiu Mistrih R.Args.emplace_back();
73d3972039SFrancis Visoiu Mistrih R.Args.back().Key = "keydebug";
74d3972039SFrancis Visoiu Mistrih R.Args.back().Val = "because of that.";
75d3972039SFrancis Visoiu Mistrih R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
76d3972039SFrancis Visoiu Mistrih
77d3972039SFrancis Visoiu Mistrih EXPECT_EQ(R.getArgsAsMsg(), "can not do this because of that.");
78d3972039SFrancis Visoiu Mistrih }
79*e14c0c5aSFrancis Visoiu Mistrih
TEST(RemarksAPI,StringTableInternalize)80*e14c0c5aSFrancis Visoiu Mistrih TEST(RemarksAPI, StringTableInternalize) {
81*e14c0c5aSFrancis Visoiu Mistrih remarks::StringTable StrTab;
82*e14c0c5aSFrancis Visoiu Mistrih
83*e14c0c5aSFrancis Visoiu Mistrih // Empty table.
84*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.SerializedSize, 0UL);
85*e14c0c5aSFrancis Visoiu Mistrih
86*e14c0c5aSFrancis Visoiu Mistrih remarks::Remark R;
87*e14c0c5aSFrancis Visoiu Mistrih R.RemarkType = remarks::Type::Missed;
88*e14c0c5aSFrancis Visoiu Mistrih R.PassName = "pass";
89*e14c0c5aSFrancis Visoiu Mistrih R.RemarkName = "name";
90*e14c0c5aSFrancis Visoiu Mistrih R.FunctionName = "func";
91*e14c0c5aSFrancis Visoiu Mistrih R.Loc = remarks::RemarkLocation{"path", 3, 4};
92*e14c0c5aSFrancis Visoiu Mistrih R.Args.emplace_back();
93*e14c0c5aSFrancis Visoiu Mistrih R.Args.back().Key = "keydebug";
94*e14c0c5aSFrancis Visoiu Mistrih R.Args.back().Val = "valuedebug";
95*e14c0c5aSFrancis Visoiu Mistrih R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7};
96*e14c0c5aSFrancis Visoiu Mistrih
97*e14c0c5aSFrancis Visoiu Mistrih // Check that internalize starts using the strings from the string table.
98*e14c0c5aSFrancis Visoiu Mistrih remarks::Remark R2 = R.clone();
99*e14c0c5aSFrancis Visoiu Mistrih StrTab.internalize(R2);
100*e14c0c5aSFrancis Visoiu Mistrih
101*e14c0c5aSFrancis Visoiu Mistrih // Check that the pointers in the remarks are different.
102*e14c0c5aSFrancis Visoiu Mistrih EXPECT_NE(R.PassName.data(), R2.PassName.data());
103*e14c0c5aSFrancis Visoiu Mistrih EXPECT_NE(R.RemarkName.data(), R2.RemarkName.data());
104*e14c0c5aSFrancis Visoiu Mistrih EXPECT_NE(R.FunctionName.data(), R2.FunctionName.data());
105*e14c0c5aSFrancis Visoiu Mistrih EXPECT_NE(R.Loc->SourceFilePath.data(), R2.Loc->SourceFilePath.data());
106*e14c0c5aSFrancis Visoiu Mistrih EXPECT_NE(R.Args.back().Key.data(), R2.Args.back().Key.data());
107*e14c0c5aSFrancis Visoiu Mistrih EXPECT_NE(R.Args.back().Val.data(), R2.Args.back().Val.data());
108*e14c0c5aSFrancis Visoiu Mistrih EXPECT_NE(R.Args.back().Loc->SourceFilePath.data(),
109*e14c0c5aSFrancis Visoiu Mistrih R2.Args.back().Loc->SourceFilePath.data());
110*e14c0c5aSFrancis Visoiu Mistrih
111*e14c0c5aSFrancis Visoiu Mistrih // Check that the internalized remark is using the pointers from the string table.
112*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.add(R.PassName).second.data(), R2.PassName.data());
113*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.add(R.RemarkName).second.data(), R2.RemarkName.data());
114*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.add(R.FunctionName).second.data(), R2.FunctionName.data());
115*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.add(R.Loc->SourceFilePath).second.data(),
116*e14c0c5aSFrancis Visoiu Mistrih R2.Loc->SourceFilePath.data());
117*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.add(R.Args.back().Key).second.data(),
118*e14c0c5aSFrancis Visoiu Mistrih R2.Args.back().Key.data());
119*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.add(R.Args.back().Val).second.data(),
120*e14c0c5aSFrancis Visoiu Mistrih R2.Args.back().Val.data());
121*e14c0c5aSFrancis Visoiu Mistrih EXPECT_EQ(StrTab.add(R.Args.back().Loc->SourceFilePath).second.data(),
122*e14c0c5aSFrancis Visoiu Mistrih R2.Args.back().Loc->SourceFilePath.data());
123*e14c0c5aSFrancis Visoiu Mistrih }
124