]> granicus.if.org Git - llvm/commitdiff
[lit] Set --single-process for single tests and --threads=1
authorJulian Lettner <jlettner@apple.com>
Thu, 14 Feb 2019 22:30:07 +0000 (22:30 +0000)
committerJulian Lettner <jlettner@apple.com>
Thu, 14 Feb 2019 22:30:07 +0000 (22:30 +0000)
Summary:
Automatically upgrade debugging experience (single process, no thread
pool) when:
  1) we only run a single test
  2) user specifies `-j1`

Details:
Fix `--max-failures` in single process mode. Option did not have an
effect in single process mode.

Add display feedback for single process mode. Adapted test.

Improve argument checking (require positive integers).

`--single-process` is now essentially an alias for `-j1`. Should we
remove it?

Reviewers: rnk

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

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

utils/lit/lit/LitConfig.py
utils/lit/lit/discovery.py
utils/lit/lit/main.py
utils/lit/lit/run.py
utils/lit/tests/max-failures.py
utils/lit/tests/unit/TestRunner.py

index 97c091085816df2b941675f1221bad90b0cee6f7..31eeb76288b24dc0c4e975d45a75b9919f4ea14d 100644 (file)
@@ -21,7 +21,7 @@ class LitConfig(object):
 
     def __init__(self, progname, path, quiet,
                  useValgrind, valgrindLeakCheck, valgrindArgs,
-                 noExecute, debug, isWindows, singleProcess,
+                 noExecute, debug, isWindows,
                  params, config_prefix = None,
                  maxIndividualTestTime = 0,
                  maxFailures = None,
@@ -37,7 +37,6 @@ class LitConfig(object):
         self.valgrindUserArgs = list(valgrindArgs)
         self.noExecute = noExecute
         self.debug = debug
-        self.singleProcess = singleProcess
         self.isWindows = bool(isWindows)
         self.params = dict(params)
         self.bashPath = None
index 398b6cecd5a56a46633ba88208754df60d689154..c4d30319c47055ec9844500bf6fb515aaad8aaf3 100644 (file)
@@ -262,7 +262,6 @@ def load_test_suite(inputs):
                                     useValgrind = False,
                                     valgrindLeakCheck = False,
                                     valgrindArgs = [],
-                                    singleProcess=False,
                                     noExecute = False,
                                     debug = False,
                                     isWindows = (platform.system()=='Windows'),
index 807360ac5b9d286d197e7a86554c855cfc3fb4d3..20b001e66daa80f595ac607ab5ea9c3c30e0f517 100755 (executable)
@@ -336,11 +336,11 @@ def main_with_tmp(builtinParameters):
     if not args:
         parser.error('No inputs specified')
 
-    if opts.numThreads is None:
-        opts.numThreads = lit.util.detectCPUs()
+    if opts.numThreads is not None and opts.numThreads <= 0:
+        parser.error("Option '--threads' or '-j' requires positive integer")
 
-    if opts.maxFailures == 0:
-        parser.error("Setting --max-failures to 0 does not have any effect.")
+    if opts.maxFailures is not None and opts.maxFailures <= 0:
+        parser.error("Option '--max-failures' requires positive integer")
 
     if opts.echoAllCommands:
         opts.showOutput = True
@@ -374,7 +374,6 @@ def main_with_tmp(builtinParameters):
         valgrindLeakCheck = opts.valgrindLeakCheck,
         valgrindArgs = opts.valgrindArgs,
         noExecute = opts.noExecute,
-        singleProcess = opts.singleProcess,
         debug = opts.debug,
         isWindows = isWindows,
         params = userParams,
@@ -481,6 +480,12 @@ def main_with_tmp(builtinParameters):
     if opts.maxTests is not None:
         run.tests = run.tests[:opts.maxTests]
 
+    # Determine number of workers to use.
+    if opts.singleProcess:
+        opts.numThreads = 1
+    elif opts.numThreads is None:
+        opts.numThreads = lit.util.detectCPUs()
+
     # Don't create more threads than tests.
     opts.numThreads = min(len(run.tests), opts.numThreads)
 
@@ -506,11 +511,9 @@ def main_with_tmp(builtinParameters):
     except:
         pass
 
-    extra = ''
-    if len(run.tests) != numTotalTests:
-        extra = ' of %d' % numTotalTests
-    header = '-- Testing: %d%s tests, %d threads --'%(len(run.tests), extra,
-                                                      opts.numThreads)
+    extra = (' of %d' % numTotalTests) if (len(run.tests) != numTotalTests) else ''
+    threads = 'single process' if (opts.numThreads == 1) else ('%d threads' % opts.numThreads)
+    header = '-- Testing: %d%s tests, %s --' % (len(run.tests), extra, threads)
     progressBar = None
     if not opts.quiet:
         if opts.succinct and opts.useProgressBar:
index c4f9eb2d0fc4c994c69b28db3b40a328d274adb8..a6de83eb3c2bcca336e1f761212a33ce5feff39c 100644 (file)
@@ -133,7 +133,7 @@ class Run(object):
         be given an UNRESOLVED result.
         """
         # Don't do anything if we aren't going to run any tests.
-        if not self.tests or jobs == 0:
+        if not self.tests:
             return
 
         # Save the display object on the runner so that we can update it from
@@ -142,12 +142,14 @@ class Run(object):
 
         self.failure_count = 0
         self.hit_max_failures = False
-        if self.lit_config.singleProcess:
+        if jobs == 1:
             global child_lit_config
             child_lit_config = self.lit_config
             for test_index, test in enumerate(self.tests):
                 result = worker_run_one_test(test_index, test)
                 self.consume_test_result(result)
+                if self.hit_max_failures:
+                    break
         else:
             self.execute_tests_in_pool(jobs, max_time)
 
index ca107bc29b9f33d1062a54d98b296de640729fe7..f37f73d7add880857ef27596226031e7a35e53b7 100644 (file)
@@ -11,4 +11,4 @@
 # CHECK: Failing Tests (27)
 # CHECK: Failing Tests (1)
 # CHECK: Failing Tests (2)
-# CHECK: error: Setting --max-failures to 0 does not have any effect.
+# CHECK: error: Option '--max-failures' requires positive integer
index a9cfd869b767ddff24b81cc4d5dbbd2f3f553b7d..27166cd69a23e025f7d3289b32133ece13e660fa 100644 (file)
@@ -29,7 +29,6 @@ class TestIntegratedTestKeywordParser(unittest.TestCase):
                                              quiet=False,
                                              useValgrind=False,
                                              valgrindLeakCheck=False,
-                                             singleProcess=False,
                                              valgrindArgs=[],
                                              noExecute=False,
                                              debug=False,