From 78c92d2ec3a54a92ad644c9b52a295f963432aa5 Mon Sep 17 00:00:00 2001 From: Francis Visoiu Mistrih Date: Tue, 23 Jul 2019 18:09:12 +0000 Subject: [PATCH] [Remarks] Add unit tests for YAML serialization Add tests for both the string table and non string table case. llvm-svn: 366832 --- llvm/lib/Remarks/RemarkStringTable.cpp | 3 - llvm/unittests/Remarks/CMakeLists.txt | 1 + .../Remarks/YAMLRemarksSerializerTest.cpp | 89 ++++++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp diff --git a/llvm/lib/Remarks/RemarkStringTable.cpp b/llvm/lib/Remarks/RemarkStringTable.cpp index 984aa5b..90a90e5 100644 --- a/llvm/lib/Remarks/RemarkStringTable.cpp +++ b/llvm/lib/Remarks/RemarkStringTable.cpp @@ -29,9 +29,6 @@ std::pair StringTable::add(StringRef Str) { } void StringTable::serialize(raw_ostream &OS) const { - // Emit the number of strings. - uint64_t StrTabSize = SerializedSize; - support::endian::write(OS, StrTabSize, support::little); // Emit the sequence of strings. for (StringRef Str : serialize()) { OS << Str; diff --git a/llvm/unittests/Remarks/CMakeLists.txt b/llvm/unittests/Remarks/CMakeLists.txt index d74960e..91d9702 100644 --- a/llvm/unittests/Remarks/CMakeLists.txt +++ b/llvm/unittests/Remarks/CMakeLists.txt @@ -6,4 +6,5 @@ set(LLVM_LINK_COMPONENTS add_llvm_unittest(RemarksTests RemarksStrTabParsingTest.cpp YAMLRemarksParsingTest.cpp + YAMLRemarksSerializerTest.cpp ) diff --git a/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp new file mode 100644 index 0000000..f0587bb --- /dev/null +++ b/llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp @@ -0,0 +1,89 @@ +//===- unittest/Support/YAMLRemarksSerializerTest.cpp --------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "llvm/Remarks/Remark.h" +#include "llvm/Remarks/RemarkSerializer.h" +#include "gtest/gtest.h" + +using namespace llvm; + +static void check(const remarks::Remark &R, StringRef Expected, + Optional ExpectedStrTab = None) { + std::string Buf; + raw_string_ostream OS(Buf); + remarks::UseStringTable UseStrTab = ExpectedStrTab.hasValue() + ? remarks::UseStringTable::Yes + : remarks::UseStringTable::No; + remarks::YAMLSerializer S(OS, UseStrTab); + S.emit(R); + EXPECT_EQ(OS.str(), Expected); + if (ExpectedStrTab) { + Buf.clear(); + EXPECT_TRUE(S.StrTab); + S.StrTab->serialize(OS); + EXPECT_EQ(OS.str(), *ExpectedStrTab); + } +} + +TEST(YAMLRemarks, SerializerRemark) { + 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}; + check(R, "--- !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"); +} + +TEST(YAMLRemarks, SerializerRemarkStrTab) { + 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}; + check(R, + "--- !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", + StringRef("pass\0name\0func\0path\0value\0valuedebug\0argpath\0", 45)); +} -- 2.7.4