diff options
Diffstat (limited to 'llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp')
-rw-r--r-- | llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp | 110 |
1 files changed, 100 insertions, 10 deletions
diff --git a/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp index 811c1b2a455..761a46f0ba8 100644 --- a/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp +++ b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp @@ -21,20 +21,21 @@ using namespace llvm; -static void check(const remarks::Remark &R, StringRef ExpectedR, - StringRef ExpectedMeta, bool UseStrTab = false, +static void check(remarks::SerializerMode Mode, const remarks::Remark &R, + StringRef ExpectedR, Optional<StringRef> ExpectedMeta, + bool UseStrTab = false, Optional<remarks::StringTable> StrTab = None) { std::string Buf; raw_string_ostream OS(Buf); Expected<std::unique_ptr<remarks::RemarkSerializer>> MaybeS = [&] { if (UseStrTab) { if (StrTab) - return createRemarkSerializer(remarks::Format::YAMLStrTab, OS, + return createRemarkSerializer(remarks::Format::YAMLStrTab, Mode, OS, std::move(*StrTab)); else - return createRemarkSerializer(remarks::Format::YAMLStrTab, OS); + return createRemarkSerializer(remarks::Format::YAMLStrTab, Mode, OS); } else - return createRemarkSerializer(remarks::Format::YAML, OS); + return createRemarkSerializer(remarks::Format::YAML, Mode, OS); }(); EXPECT_FALSE(errorToBool(MaybeS.takeError())); std::unique_ptr<remarks::RemarkSerializer> S = std::move(*MaybeS); @@ -42,11 +43,27 @@ static void check(const remarks::Remark &R, StringRef ExpectedR, S->emit(R); EXPECT_EQ(OS.str(), ExpectedR); - Buf.clear(); - std::unique_ptr<remarks::MetaSerializer> MS = - S->metaSerializer(OS, StringRef(EXTERNALFILETESTPATH)); - MS->emit(); - EXPECT_EQ(OS.str(), ExpectedMeta); + if (ExpectedMeta) { + Buf.clear(); + std::unique_ptr<remarks::MetaSerializer> MS = + S->metaSerializer(OS, StringRef(EXTERNALFILETESTPATH)); + MS->emit(); + EXPECT_EQ(OS.str(), *ExpectedMeta); + } +} + +static void check(const remarks::Remark &R, StringRef ExpectedR, + StringRef ExpectedMeta, bool UseStrTab = false, + Optional<remarks::StringTable> StrTab = None) { + return check(remarks::SerializerMode::Separate, R, ExpectedR, ExpectedMeta, + UseStrTab, std::move(StrTab)); +} + +static void checkStandalone(const remarks::Remark &R, StringRef ExpectedR, + Optional<remarks::StringTable> StrTab = None) { + bool UseStrTab = StrTab.hasValue(); + return check(remarks::SerializerMode::Standalone, R, ExpectedR, + /*ExpectedMeta=*/None, UseStrTab, std::move(StrTab)); } TEST(YAMLRemarks, SerializerRemark) { @@ -83,6 +100,40 @@ TEST(YAMLRemarks, SerializerRemark) { 38)); } +TEST(YAMLRemarks, SerializerRemarkStandalone) { + remarks::Remark R; + R.RemarkType = remarks::Type::Missed; + R.PassName = "pass"; + R.RemarkName = "name"; + R.FunctionName = "func"; + R.Loc = remarks::RemarkLocation{"path", 3, 4}; + R.Hotness = 5; + R.Args.emplace_back(); + R.Args.back().Key = "key"; + R.Args.back().Val = "value"; + R.Args.emplace_back(); + R.Args.back().Key = "keydebug"; + R.Args.back().Val = "valuedebug"; + R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7}; + checkStandalone( + R, + StringRef("REMARKS\0" + "\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0" + "--- !Missed\n" + "Pass: pass\n" + "Name: name\n" + "DebugLoc: { File: path, Line: 3, Column: 4 }\n" + "Function: func\n" + "Hotness: 5\n" + "Args:\n" + " - key: value\n" + " - keydebug: valuedebug\n" + " DebugLoc: { File: argpath, Line: 6, Column: 7 }\n" + "...\n", + 301)); +} + TEST(YAMLRemarks, SerializerRemarkStrTab) { remarks::Remark R; R.RemarkType = remarks::Type::Missed; @@ -156,3 +207,42 @@ TEST(YAMLRemarks, SerializerRemarkParsedStrTab) { /*UseStrTab=*/true, remarks::StringTable(remarks::ParsedStringTable(StrTab))); } + +TEST(YAMLRemarks, SerializerRemarkParsedStrTabStandalone) { + StringRef StrTab("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45); + remarks::ParsedStringTable ParsedStrTab(StrTab); + remarks::StringTable PreFilledStrTab(ParsedStrTab); + remarks::Remark R; + R.RemarkType = remarks::Type::Missed; + R.PassName = "pass"; + R.RemarkName = "name"; + R.FunctionName = "func"; + R.Loc = remarks::RemarkLocation{"path", 3, 4}; + R.Hotness = 5; + R.Args.emplace_back(); + R.Args.back().Key = "key"; + R.Args.back().Val = "value"; + R.Args.emplace_back(); + R.Args.back().Key = "keydebug"; + R.Args.back().Val = "valuedebug"; + R.Args.back().Loc = remarks::RemarkLocation{"argpath", 6, 7}; + checkStandalone( + R, + StringRef("REMARKS\0" + "\0\0\0\0\0\0\0\0" + "\x2d\0\0\0\0\0\0\0" + "pass\0name\0func\0path\0value\0valuedebug\0argpath\0" + "--- !Missed\n" + "Pass: 0\n" + "Name: 1\n" + "DebugLoc: { File: 3, Line: 3, Column: 4 }\n" + "Function: 2\n" + "Hotness: 5\n" + "Args:\n" + " - key: 4\n" + " - keydebug: 5\n" + " DebugLoc: { File: 6, Line: 6, Column: 7 }\n" + "...\n", + 315), + std::move(PreFilledStrTab)); +} |