]> granicus.if.org Git - llvm/commitdiff
[LCG] Start using SCC relationship predicates in the unittest.
authorChandler Carruth <chandlerc@gmail.com>
Tue, 22 Nov 2016 20:35:32 +0000 (20:35 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 22 Nov 2016 20:35:32 +0000 (20:35 +0000)
This mostly gives us nice unittesting of the predicates themselves. I'll
start using them further in subsequent commits to help test the actual
operations performed on the graph.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287698 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/Analysis/LazyCallGraphTest.cpp

index 66cd9a1e4850e88c4196ef1741bde7da5a38cd91..d3022519f16c9b54733921fecda9665897ba9019 100644 (file)
@@ -594,13 +594,21 @@ TEST(LazyCallGraphTest, OutgoingEdgeMutation) {
   LazyCallGraph::RefSCC &CRC = *CG.lookupRefSCC(C);
   LazyCallGraph::RefSCC &DRC = *CG.lookupRefSCC(D);
   EXPECT_TRUE(ARC.isParentOf(BRC));
+  EXPECT_TRUE(AC.isParentOf(BC));
   EXPECT_TRUE(ARC.isParentOf(CRC));
+  EXPECT_TRUE(AC.isParentOf(CC));
   EXPECT_FALSE(ARC.isParentOf(DRC));
+  EXPECT_FALSE(AC.isParentOf(DC));
   EXPECT_TRUE(ARC.isAncestorOf(DRC));
+  EXPECT_TRUE(AC.isAncestorOf(DC));
   EXPECT_FALSE(DRC.isChildOf(ARC));
+  EXPECT_FALSE(DC.isChildOf(AC));
   EXPECT_TRUE(DRC.isDescendantOf(ARC));
+  EXPECT_TRUE(DC.isDescendantOf(AC));
   EXPECT_TRUE(DRC.isChildOf(BRC));
+  EXPECT_TRUE(DC.isChildOf(BC));
   EXPECT_TRUE(DRC.isChildOf(CRC));
+  EXPECT_TRUE(DC.isChildOf(CC));
 
   EXPECT_EQ(2, std::distance(A.begin(), A.end()));
   ARC.insertOutgoingEdge(A, D, LazyCallGraph::Edge::Call);
@@ -613,9 +621,13 @@ TEST(LazyCallGraphTest, OutgoingEdgeMutation) {
   // Only the parent and child tests sholud have changed. The rest of the graph
   // remains the same.
   EXPECT_TRUE(ARC.isParentOf(DRC));
+  EXPECT_TRUE(AC.isParentOf(DC));
   EXPECT_TRUE(ARC.isAncestorOf(DRC));
+  EXPECT_TRUE(AC.isAncestorOf(DC));
   EXPECT_TRUE(DRC.isChildOf(ARC));
+  EXPECT_TRUE(DC.isChildOf(AC));
   EXPECT_TRUE(DRC.isDescendantOf(ARC));
+  EXPECT_TRUE(DC.isDescendantOf(AC));
   EXPECT_EQ(&AC, CG.lookupSCC(A));
   EXPECT_EQ(&BC, CG.lookupSCC(B));
   EXPECT_EQ(&CC, CG.lookupSCC(C));
@@ -628,11 +640,15 @@ TEST(LazyCallGraphTest, OutgoingEdgeMutation) {
   ARC.switchOutgoingEdgeToRef(A, D);
   EXPECT_FALSE(NewE.isCall());
 
-  // Verify the graph remains the same.
+  // Verify the reference graph remains the same but the SCC graph is updated.
   EXPECT_TRUE(ARC.isParentOf(DRC));
+  EXPECT_FALSE(AC.isParentOf(DC));
   EXPECT_TRUE(ARC.isAncestorOf(DRC));
+  EXPECT_TRUE(AC.isAncestorOf(DC));
   EXPECT_TRUE(DRC.isChildOf(ARC));
+  EXPECT_FALSE(DC.isChildOf(AC));
   EXPECT_TRUE(DRC.isDescendantOf(ARC));
+  EXPECT_TRUE(DC.isDescendantOf(AC));
   EXPECT_EQ(&AC, CG.lookupSCC(A));
   EXPECT_EQ(&BC, CG.lookupSCC(B));
   EXPECT_EQ(&CC, CG.lookupSCC(C));
@@ -645,11 +661,15 @@ TEST(LazyCallGraphTest, OutgoingEdgeMutation) {
   ARC.switchOutgoingEdgeToCall(A, D);
   EXPECT_TRUE(NewE.isCall());
 
-  // Verify the graph remains the same.
+  // Verify the reference graph remains the same but the SCC graph is updated.
   EXPECT_TRUE(ARC.isParentOf(DRC));
+  EXPECT_TRUE(AC.isParentOf(DC));
   EXPECT_TRUE(ARC.isAncestorOf(DRC));
+  EXPECT_TRUE(AC.isAncestorOf(DC));
   EXPECT_TRUE(DRC.isChildOf(ARC));
+  EXPECT_TRUE(DC.isChildOf(AC));
   EXPECT_TRUE(DRC.isDescendantOf(ARC));
+  EXPECT_TRUE(DC.isDescendantOf(AC));
   EXPECT_EQ(&AC, CG.lookupSCC(A));
   EXPECT_EQ(&BC, CG.lookupSCC(B));
   EXPECT_EQ(&CC, CG.lookupSCC(C));
@@ -664,9 +684,13 @@ TEST(LazyCallGraphTest, OutgoingEdgeMutation) {
 
   // Now the parent and child tests fail again but the rest remains the same.
   EXPECT_FALSE(ARC.isParentOf(DRC));
+  EXPECT_FALSE(AC.isParentOf(DC));
   EXPECT_TRUE(ARC.isAncestorOf(DRC));
+  EXPECT_TRUE(AC.isAncestorOf(DC));
   EXPECT_FALSE(DRC.isChildOf(ARC));
+  EXPECT_FALSE(DC.isChildOf(AC));
   EXPECT_TRUE(DRC.isDescendantOf(ARC));
+  EXPECT_TRUE(DC.isDescendantOf(AC));
   EXPECT_EQ(&AC, CG.lookupSCC(A));
   EXPECT_EQ(&BC, CG.lookupSCC(B));
   EXPECT_EQ(&CC, CG.lookupSCC(C));