aboutsummaryrefslogtreecommitdiff
path: root/compiler/test/dotty/tools/dotc
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2017-04-06 19:47:37 +0200
committerGitHub <noreply@github.com>2017-04-06 19:47:37 +0200
commit4d76265fac7edafc2fcf29ce6873fdb252fbba0d (patch)
tree32a7a72470f72f63e0248a3f324f09fe6f8895ef /compiler/test/dotty/tools/dotc
parent49a18da629d74a6f8d4052c95ce8b967ea08f73d (diff)
parent8a83bb1f865bdc79cc716034199bc9d350d4f055 (diff)
downloaddotty-4d76265fac7edafc2fcf29ce6873fdb252fbba0d.tar.gz
dotty-4d76265fac7edafc2fcf29ce6873fdb252fbba0d.tar.bz2
dotty-4d76265fac7edafc2fcf29ce6873fdb252fbba0d.zip
Merge pull request #2193 from dotty-staging/deterministic-tests
Deterministically randomises test compilation order
Diffstat (limited to 'compiler/test/dotty/tools/dotc')
-rw-r--r--compiler/test/dotty/tools/dotc/ParallelTesting.scala15
1 files changed, 13 insertions, 2 deletions
diff --git a/compiler/test/dotty/tools/dotc/ParallelTesting.scala b/compiler/test/dotty/tools/dotc/ParallelTesting.scala
index 2b20887e3..45de03b48 100644
--- a/compiler/test/dotty/tools/dotc/ParallelTesting.scala
+++ b/compiler/test/dotty/tools/dotc/ParallelTesting.scala
@@ -15,6 +15,7 @@ import scala.util.control.NonFatal
import scala.util.Try
import scala.collection.mutable
import scala.util.matching.Regex
+import scala.util.Random
import core.Contexts._
import reporting.{ Reporter, TestReporter }
@@ -1010,8 +1011,11 @@ trait ParallelTesting { self =>
/** Compiles a directory `f` using the supplied `flags`. This method does
* deep compilation, that is - it compiles all files and subdirectories
* contained within the directory `f`.
+ *
+ * By default, files are compiled in alphabetical order. An optional seed
+ * can be used for randomization.
*/
- def compileDir(f: String, flags: Array[String])(implicit outDirectory: String): CompilationTest = {
+ def compileDir(f: String, flags: Array[String], randomOrder: Option[Int] = None)(implicit outDirectory: String): CompilationTest = {
val callingMethod = getCallingMethod
val outDir = outDirectory + callingMethod + "/"
val sourceDir = new JFile(f)
@@ -1021,11 +1025,18 @@ trait ParallelTesting { self =>
if (f.isDirectory) f.listFiles.flatMap(flatten)
else Array(f)
+ // Sort files either alphabetically or randomly using the provided seed:
+ val sortedFiles = flatten(sourceDir).sorted
+ val randomized = randomOrder match {
+ case None => sortedFiles
+ case Some(seed) => new Random(seed).shuffle(sortedFiles.toList).toArray
+ }
+
// Directories in which to compile all containing files with `flags`:
val targetDir = new JFile(outDir + "/" + sourceDir.getName + "/")
targetDir.mkdirs()
- val target = JointCompilationSource(callingMethod, flatten(sourceDir), flags, targetDir)
+ val target = JointCompilationSource(callingMethod, randomized, flags, targetDir)
new CompilationTest(target)
}