[llvm] 3b982b1 - [lit] Refactor ordering of tests

Julian Lettner via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 29 17:50:18 PDT 2019


Author: Julian Lettner
Date: 2019-10-29T17:49:23-07:00
New Revision: 3b982b11f4e7c45c59ff80136efab7c116313e98

URL: https://github.com/llvm/llvm-project/commit/3b982b11f4e7c45c59ff80136efab7c116313e98
DIFF: https://github.com/llvm/llvm-project/commit/3b982b11f4e7c45c59ff80136efab7c116313e98.diff

LOG: [lit] Refactor ordering of tests

Added: 
    

Modified: 
    llvm/utils/lit/lit/cl_arguments.py
    llvm/utils/lit/lit/main.py

Removed: 
    


################################################################################
diff  --git a/llvm/utils/lit/lit/cl_arguments.py b/llvm/utils/lit/lit/cl_arguments.py
index 152c51021b91..7b15041d1905 100644
--- a/llvm/utils/lit/lit/cl_arguments.py
+++ b/llvm/utils/lit/lit/cl_arguments.py
@@ -121,10 +121,10 @@ def parse_args():
             metavar="N",
             help="Maximum time to spend testing (in seconds)",
             type=_positive_int)
-    selection_group.add_argument("--shuffle",
-            help="Run tests in random order",
+    selection_group.add_argument("--shuffle",   # TODO(yln): --order=random
+            help="Run tests in random order",   # default or 'by-path' (+ isEarlyTest())
             action="store_true")
-    selection_group.add_argument("-i", "--incremental",
+    selection_group.add_argument("-i", "--incremental",  # TODO(yln): --order=failing-first
             help="Run modified and failing tests first (updates mtimes)",
             action="store_true")
     selection_group.add_argument("--filter",
@@ -167,6 +167,14 @@ def parse_args():
     if opts.echoAllCommands:
         opts.showOutput = True
 
+    # TODO(python3): Could be enum
+    if opts.shuffle:
+        opts.order = 'random'
+    elif opts.incremental:
+        opts.order = 'failing-first'
+    else:
+        opts.order = 'default'
+
     if opts.numShards or opts.runShard:
         if not opts.numShards or not opts.runShard:
             parser.error("--num-shards and --run-shard must be used together")
@@ -174,7 +182,7 @@ def parse_args():
             parser.error("--run-shard must be between 1 and --num-shards (inclusive)")
         opts.shard = (opts.runShard, opts.numShards)
     else:
-      opts.shard = None
+        opts.shard = None
 
     return opts
 

diff  --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py
index 6c38c5db7dec..1276fdaf2731 100755
--- a/llvm/utils/lit/lit/main.py
+++ b/llvm/utils/lit/lit/main.py
@@ -63,7 +63,7 @@ def main(builtin_params = {}):
     if opts.filter:
         tests = [t for t in tests if opts.filter.search(t.getFullName())]
 
-    determine_order(tests, opts)
+    determine_order(tests, opts.order)
 
     if opts.shard:
         (run, shards) = opts.shard
@@ -132,19 +132,23 @@ def print_suites_or_tests(tests, opts):
             for test in ts_tests:
                 print('  %s' % (test.getFullName(),))
 
-def determine_order(tests, opts):
-    if opts.shuffle:
+
+def determine_order(tests, order):
+    assert order in ['default', 'random', 'failing-first']
+    if order == 'default':
+        tests.sort(key=lambda t: (not t.isEarlyTest(), t.getFullName()))
+    elif order == 'random':
         import random
         random.shuffle(tests)
-    elif opts.incremental:
+    else:
         def by_mtime(test):
-            try:
-                return os.path.getmtime(test.getFilePath())
-            except:
-                return 0
+            return os.path.getmtime(test.getFilePath())
         tests.sort(key=by_mtime, reverse=True)
-    else:
-        tests.sort(key=lambda t: (not t.isEarlyTest(), t.getFullName()))
+
+
+def touch_file(test):
+    if test.result.code.isFailure:
+        os.utime(test.getFilePath(), None)
 
 def filter_by_shard(tests, run, shards, litConfig):
     test_ixs = range(run - 1, len(tests), shards)
@@ -164,19 +168,13 @@ def filter_by_shard(tests, run, shards, litConfig):
     litConfig.note(msg)
     return selected_tests
 
-def update_incremental_cache(test):
-    if not test.result.code.isFailure:
-        return
-    fname = test.getFilePath()
-    os.utime(fname, None)
-
 def run_tests(tests, litConfig, opts, numTotalTests):
     display = lit.display.create_display(opts, len(tests), numTotalTests,
                                          opts.numWorkers)
     def progress_callback(test):
         display.update(test)
-        if opts.incremental:
-            update_incremental_cache(test)
+        if opts.order == 'failing-first':
+            touch_file(test)
 
     run = lit.run.create_run(tests, litConfig, opts.numWorkers,
                              progress_callback, opts.timeout)


        


More information about the llvm-commits mailing list