diff options
Diffstat (limited to 'clang-tools-extra/unittests/cpp11-migrate')
-rw-r--r-- | clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt | 37 | ||||
-rw-r--r-- | clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp | 89 |
2 files changed, 108 insertions, 18 deletions
diff --git a/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt b/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt index bb0bfb104dc..4ea85d54073 100644 --- a/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt +++ b/clang-tools-extra/unittests/cpp11-migrate/CMakeLists.txt @@ -1,18 +1,19 @@ -set(LLVM_LINK_COMPONENTS - support - ) - -get_filename_component(CPP11_MIGRATE_SOURCE_DIR - ${CMAKE_CURRENT_SOURCE_DIR}/../../cpp11-migrate REALPATH) -include_directories(${CPP11_MIGRATE_SOURCE_DIR}) - -add_extra_unittest(Cpp11MigrateTests - TransformTest.cpp - IncludeExcludeTest.cpp) - -target_link_libraries(Cpp11MigrateTests - migrateCore - clangTooling - clangBasic - clangASTMatchers - ) +set(LLVM_LINK_COMPONENTS
+ support
+ )
+
+get_filename_component(CPP11_MIGRATE_SOURCE_DIR
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../cpp11-migrate REALPATH)
+include_directories(${CPP11_MIGRATE_SOURCE_DIR})
+
+add_extra_unittest(Cpp11MigrateTests
+ TransformTest.cpp
+ IncludeExcludeTest.cpp
+ PerfSupportTest.cpp)
+
+target_link_libraries(Cpp11MigrateTests
+ migrateCore
+ clangTooling
+ clangBasic
+ clangASTMatchers
+ )
diff --git a/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp new file mode 100644 index 00000000000..8c362fd1a73 --- /dev/null +++ b/clang-tools-extra/unittests/cpp11-migrate/PerfSupportTest.cpp @@ -0,0 +1,89 @@ +#include "gtest/gtest.h"
+#include "Core/PerfSupport.h"
+
+using namespace llvm;
+using namespace clang;
+
+class TransformA : public Transform {
+public:
+ TransformA()
+ : Transform("TransformA", false) {}
+
+ virtual int apply(const FileContentsByPath &, RiskLevel,
+ const tooling::CompilationDatabase &,
+ const std::vector<std::string> &, FileContentsByPath &) {
+ return 0;
+ }
+
+ void addTiming(StringRef Label, TimeRecord Duration) {
+ Transform::addTiming(Label, Duration);
+ }
+};
+
+class TransformB : public Transform {
+public:
+ TransformB()
+ : Transform("TransformB", false) {}
+
+ virtual int apply(const FileContentsByPath &, RiskLevel,
+ const tooling::CompilationDatabase &,
+ const std::vector<std::string> &, FileContentsByPath &) {
+ return 0;
+ }
+
+ void addTiming(StringRef Label, TimeRecord Duration) {
+ Transform::addTiming(Label, Duration);
+ }
+};
+
+struct ExpectedResults {
+ const char *SourceName;
+ unsigned DataCount;
+ struct Datum {
+ const char *Label;
+ float Duration;
+ } Data[2];
+};
+
+TEST(PerfSupport, collectSourcePerfData) {
+ TransformA A;
+ TransformB B;
+
+ // The actual durations don't matter. Below only their relative ordering is
+ // tested to ensure times, labels, and sources all stay together properly.
+ A.addTiming("FileA.cpp", TimeRecord::getCurrentTime(/*Start=*/true));
+ A.addTiming("FileC.cpp", TimeRecord::getCurrentTime(/*Start=*/true));
+ B.addTiming("FileC.cpp", TimeRecord::getCurrentTime(/*Start=*/true));
+ B.addTiming("FileB.cpp", TimeRecord::getCurrentTime(/*Start=*/true));
+
+ SourcePerfData PerfData;
+ collectSourcePerfData(A, PerfData);
+
+ SourcePerfData::const_iterator FileAI = PerfData.find("FileA.cpp");
+ EXPECT_NE(FileAI, PerfData.end());
+ SourcePerfData::const_iterator FileCI = PerfData.find("FileC.cpp");
+ EXPECT_NE(FileCI, PerfData.end());
+ EXPECT_EQ(2u, PerfData.size());
+
+ EXPECT_EQ(1u, FileAI->second.size());
+ EXPECT_EQ("TransformA", FileAI->second[0].Label);
+ EXPECT_EQ(1u, FileCI->second.size());
+ EXPECT_EQ("TransformA", FileCI->second[0].Label);
+ EXPECT_LE(FileAI->second[0].Duration, FileCI->second[0].Duration);
+
+ collectSourcePerfData(B, PerfData);
+
+ SourcePerfData::const_iterator FileBI = PerfData.find("FileB.cpp");
+ EXPECT_NE(FileBI, PerfData.end());
+ EXPECT_EQ(3u, PerfData.size());
+
+ EXPECT_EQ(1u, FileAI->second.size());
+ EXPECT_EQ("TransformA", FileAI->second[0].Label);
+ EXPECT_EQ(2u, FileCI->second.size());
+ EXPECT_EQ("TransformA", FileCI->second[0].Label);
+ EXPECT_EQ("TransformB", FileCI->second[1].Label);
+ EXPECT_LE(FileCI->second[0].Duration, FileCI->second[1].Duration);
+ EXPECT_EQ(1u, FileBI->second.size());
+ EXPECT_EQ("TransformB", FileBI->second[0].Label);
+ EXPECT_LE(FileCI->second[1].Duration, FileBI->second[0].Duration);
+}
|