[llvm-exegesis] Add clustering test.
authorClement Courbet <courbet@google.com>
Fri, 22 Mar 2019 13:13:12 +0000 (13:13 +0000)
committerClement Courbet <courbet@google.com>
Fri, 22 Mar 2019 13:13:12 +0000 (13:13 +0000)
Summary: To show that dbscan is insensitive to the order of the points.

Subscribers: tschuett, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D59693

llvm-svn: 356747

llvm/unittests/tools/llvm-exegesis/ClusteringTest.cpp

index 6834206..174dd43 100644 (file)
@@ -22,6 +22,11 @@ using testing::Field;
 using testing::UnorderedElementsAre;
 using testing::UnorderedElementsAreArray;
 
+static constexpr auto HasPoints = [](const std::vector<int> &Indices) {
+  return Field(&InstructionBenchmarkClustering::Cluster::PointIndices,
+                 UnorderedElementsAreArray(Indices));
+};
+
 TEST(ClusteringTest, Clusters3D) {
   std::vector<InstructionBenchmark> Points(6);
 
@@ -41,11 +46,6 @@ TEST(ClusteringTest, Clusters3D) {
   // Error cluster: points {2}
   Points[2].Error = "oops";
 
-  auto HasPoints = [](const std::vector<int> &Indices) {
-    return Field(&InstructionBenchmarkClustering::Cluster::PointIndices,
-                 UnorderedElementsAreArray(Indices));
-  };
-
   auto Clustering = InstructionBenchmarkClustering::create(Points, 2, 0.25);
   ASSERT_TRUE((bool)Clustering);
   EXPECT_THAT(Clustering.get().getValidClusters(),
@@ -102,6 +102,38 @@ TEST(ClusteringTest, Ordering) {
             InstructionBenchmarkClustering::ClusterId::error());
 }
 
+TEST(ClusteringTest, Ordering1) {
+  std::vector<InstructionBenchmark> Points(3);
+
+  Points[0].Measurements = {
+      {"x", 0.0, 0.0}};
+  Points[1].Measurements = {
+      {"x", 1.0, 0.0}};
+  Points[2].Measurements = {
+      {"x", 2.0, 0.0}};
+
+  auto Clustering = InstructionBenchmarkClustering::create(Points, 2, 1.1);
+  ASSERT_TRUE((bool)Clustering);
+  EXPECT_THAT(Clustering.get().getValidClusters(),
+              UnorderedElementsAre(HasPoints({0, 1, 2})));
+}
+
+TEST(ClusteringTest, Ordering2) {
+  std::vector<InstructionBenchmark> Points(3);
+
+  Points[0].Measurements = {
+      {"x", 0.0, 0.0}};
+  Points[1].Measurements = {
+      {"x", 2.0, 0.0}};
+  Points[2].Measurements = {
+      {"x", 1.0, 0.0}};
+
+  auto Clustering = InstructionBenchmarkClustering::create(Points, 2, 1.1);
+  ASSERT_TRUE((bool)Clustering);
+  EXPECT_THAT(Clustering.get().getValidClusters(),
+              UnorderedElementsAre(HasPoints({0, 1, 2})));
+}
+
 } // namespace
 } // namespace exegesis
 } // namespace llvm