]> granicus.if.org Git - llvm/commitdiff
[Support] unflake TempFileCollisions test
authorBob Haarman <llvm@inglorion.net>
Mon, 22 Apr 2019 19:46:25 +0000 (19:46 +0000)
committerBob Haarman <llvm@inglorion.net>
Mon, 22 Apr 2019 19:46:25 +0000 (19:46 +0000)
Summary:
This test was added to verify that createUniqueEntity() does
not enter an infinite loop when all possible names are taken. However,
it also checked that all possible names are generated, which is flaky
(because the names are generated randomly). This change increases the
number of attempts we make to make flakes exceedingly
unlikely (3.88e-62).

Reviewers: fedor.sergeev, rsmith

Reviewed By: fedor.sergeev

Subscribers: llvm-commits

Tags: #llvm

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

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

unittests/Support/Path.cpp

index 3c0f7936030788d534626e26c76e760862ce4459..750fd13db97dd9c0d4985ebf25294087520d48eb 100644 (file)
@@ -700,10 +700,18 @@ TEST_F(FileSystemTest, TempFileCollisions) {
     }
   };
 
-  // We should be able to create exactly 16 temporary files.
-  for (int i = 0; i < 16; ++i)
-    EXPECT_TRUE(TryCreateTempFile());
-  EXPECT_FALSE(TryCreateTempFile());
+  // Our single-character template allows for 16 unique names. Check that
+  // calling TryCreateTempFile repeatedly results in 16 successes.
+  // Because the test depends on random numbers, it could theoretically fail.
+  // However, the probability of this happening is tiny: with 32 calls, each
+  // of which will retry up to 128 times, to not get a given digit we would
+  // have to fail at least 15 + 17 * 128 = 2191 attempts. The probability of
+  // 2191 attempts not producing a given hexadecimal digit is
+  // (1 - 1/16) ** 2191 or 3.88e-62.
+  int Successes = 0;
+  for (int i = 0; i < 32; ++i)
+    if (TryCreateTempFile()) ++Successes;
+  EXPECT_EQ(Successes, 16);
 
   for (fs::TempFile &T : TempFiles)
     cantFail(T.discard());