]> granicus.if.org Git - clang/commitdiff
[VFS][Unittests] Make dir iteration tests depend only on content
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Wed, 11 May 2016 20:58:47 +0000 (20:58 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Wed, 11 May 2016 20:58:47 +0000 (20:58 +0000)
Do not rely on any specific order while comparing the results of
directory iteration.

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

unittests/Basic/VirtualFileSystemTest.cpp

index d2f4a7d8f0284f23e7afe79477851ba2bbe0a26e..b8e675e75fab0ab87a6fb22cad5530aaf8b8689f 100644 (file)
@@ -370,16 +370,23 @@ TEST(VirtualFileSystemTest, BasicRealFSRecursiveIteration) {
 }
 
 template <typename DirIter>
-static void checkContents(DirIter I, ArrayRef<StringRef> Expected) {
+static void checkContents(DirIter I, ArrayRef<StringRef> ExpectedOut) {
   std::error_code EC;
-  auto ExpectedIter = Expected.begin(), ExpectedEnd = Expected.end();
-  for (DirIter E;
-       !EC && I != E && ExpectedIter != ExpectedEnd;
-       I.increment(EC), ++ExpectedIter)
-    EXPECT_EQ(*ExpectedIter, I->getName());
-
-  EXPECT_EQ(ExpectedEnd, ExpectedIter);
-  EXPECT_EQ(DirIter(), I);
+  SmallVector<StringRef, 4> Expected(ExpectedOut.begin(), ExpectedOut.end());
+  SmallVector<std::string, 4> InputToCheck;
+
+  // Do not rely on iteration order to check for contents, sort both
+  // content vectors before comparison.
+  for (DirIter E; !EC && I != E; I.increment(EC))
+    InputToCheck.push_back(I->getName());
+
+  std::sort(InputToCheck.begin(), InputToCheck.end());
+  std::sort(Expected.begin(), Expected.end());
+  EXPECT_EQ(InputToCheck.size(), Expected.size());
+
+  unsigned LastElt = std::min(InputToCheck.size(), Expected.size());
+  for (unsigned Idx = 0; Idx != LastElt; ++Idx)
+    EXPECT_EQ(Expected[Idx], StringRef(InputToCheck[Idx]));
 }
 
 TEST(VirtualFileSystemTest, OverlayIteration) {