summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2022-04-27 11:42:18 -0400
committerBen Gamari <ben@smart-cactus.org>2022-04-28 00:38:12 -0400
commit3cc1e7afc245e277a51a59516f6cd6f4c99b21e2 (patch)
treec2304104cdda79c6904928e037ec133a5627baac
parent81cf52bb301592ff3d043d03eb9a0d547891a3e1 (diff)
downloadhaskell-3cc1e7afc245e277a51a59516f6cd6f4c99b21e2.tar.gz
testsuite/driver: Use set instead of list where appropriate
In places where repeated entries do not make sense prefer to use `set`. To avoid updating all of the `.T` files we keep `extra_ways()`, etc. as taking lists.
-rw-r--r--testsuite/driver/testglobals.py14
-rw-r--r--testsuite/driver/testlib.py42
2 files changed, 29 insertions, 27 deletions
diff --git a/testsuite/driver/testglobals.py b/testsuite/driver/testglobals.py
index 8a68ffd33e..9ed9fd7d9c 100644
--- a/testsuite/driver/testglobals.py
+++ b/testsuite/driver/testglobals.py
@@ -315,22 +315,22 @@ class TestOptions:
self.skip = False
# the test is known to be fragile in these ways
- self.fragile_ways = [] # type: List[WayName]
+ self.fragile_ways = set() # type: Set[WayName]
# skip these ways
- self.omit_ways = [] # type: List[WayName]
+ self.omit_ways = set() # type: Set[WayName]
# skip all ways except these (None == do all ways)
- self.only_ways = None # type: Optional[List[WayName]]
+ self.only_ways = None # type: Optional[Set[WayName]]
# add these ways to the default set
- self.extra_ways = [] # type: List[WayName]
+ self.extra_ways = set() # type: Set[WayName]
# the result we normally expect for this test
self.expect = 'pass'
# override the expected result for certain ways
- self.expect_fail_for = [] # type: List[WayName]
+ self.expect_fail_for = set() # type: Set[WayName]
# the stdin file that this test will use (None for <name>.stdin)
self.srcdir = None # type: Optional[Path]
@@ -363,10 +363,10 @@ class TestOptions:
self.exit_code = 0 # type: int
# extra files to clean afterward
- self.clean_files = [] # type: List[str]
+ self.clean_files = set() # type: Set[str]
# extra files to copy to the testdir
- self.extra_files = [] # type: List[str]
+ self.extra_files = set() # type: Set[str]
# Map from metric to (function from way and commit to baseline value, allowed percentage deviation) e.g.
# { 'bytes allocated': (
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index 9c9a1760a2..c009fb4289 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -29,12 +29,14 @@ import testutil
from cpu_features import have_cpu_feature
import perf_notes as Perf
from perf_notes import MetricChange, PerfStat, MetricOracles
-extra_src_files = {'T4198': ['exitminus1.c']} # TODO: See #12223
from my_typing import *
from threading import Timer
+# TODO: See #12223
+extra_src_files = {TestName('T4198'): {'exitminus1.c'}} # type: Dict[TestName, Set[str]]
+
global pool_sema
if config.use_threads:
import threading
@@ -263,7 +265,7 @@ def req_th( name, opts ):
"""
req_interp(name, opts)
if ghc_dynamic():
- return _omit_ways(name, opts, ['profasm', 'profthreaded'])
+ return _omit_ways(name, opts, {'profasm', 'profthreaded'})
def req_smp( name, opts ):
if not config.have_smp:
@@ -303,7 +305,7 @@ def _use_specs( name, opts, specs ):
# -----
-def _lint_ways(name: TestName, ways: List[WayName]) -> None:
+def _lint_ways(name: TestName, ways: Iterable[WayName]) -> None:
""" Check that all of the ways in a list are valid. """
unknown_ways = [way
for way in get_all_ways()
@@ -315,7 +317,7 @@ def _lint_ways(name: TestName, ways: List[WayName]) -> None:
def expect_fail_for( ways: List[WayName] ):
def helper( name: TestName, opts ):
_lint_ways(name, ways)
- opts.expect_fail_for = ways
+ opts.expect_fail_for = set(ways)
return helper
@@ -335,7 +337,7 @@ def expect_broken_for( bug: IssueNumber, ways: List[WayName] ):
def helper( name: TestName, opts ):
_lint_ways(name, ways)
record_broken(name, opts, bug)
- opts.expect_fail_for = ways
+ opts.expect_fail_for = set(ways)
return helper
@@ -357,9 +359,9 @@ def fragile( bug: IssueNumber ):
Indicates that failures of this test should be ignored due to fragility
documented in the given ticket.
"""
- def helper( name, opts, bug=bug ):
+ def helper( name: TestName, opts, bug: IssueNumber=bug ):
record_broken(name, opts, bug)
- opts.fragile_ways += config.way_flags.keys()
+ opts.fragile_ways |= set(config.way_flags.keys())
return helper
@@ -371,25 +373,25 @@ def fragile_for( bug: IssueNumber, ways: List[WayName] ):
def helper( name: TestName, opts ):
_lint_ways(name, ways)
record_broken(name, opts, bug)
- opts.fragile_ways += ways
+ opts.fragile_ways |= set(ways)
return helper
# -----
def omit_ways( ways: List[WayName] ):
- return lambda name, opts: _omit_ways(name, opts, ways)
+ return lambda name, opts: _omit_ways(name, opts, set(ways))
-def _omit_ways( name: TestName, opts, ways: List[WayName] ):
+def _omit_ways( name: TestName, opts, ways: Set[WayName] ):
_lint_ways(name, ways)
- opts.omit_ways += ways
+ opts.omit_ways |= ways
# -----
def only_ways( ways: List[WayName] ):
def helper( name: TestName, opts ):
_lint_ways(name, ways)
- opts.only_ways = ways
+ opts.only_ways = set(ways)
return helper
@@ -398,7 +400,7 @@ def only_ways( ways: List[WayName] ):
def extra_ways( ways: List[WayName] ):
def helper( name: TestName, opts ):
_lint_ways(name, ways)
- opts.extra_ways = ways
+ opts.extra_ways = set(ways)
return helper
@@ -462,15 +464,15 @@ def _extra_hc_opts( name, opts, v ):
# -----
-def extra_clean( files ):
+def extra_clean( files: List[str] ):
# TODO. Remove all calls to extra_clean.
return lambda _name, _opts: None
-def extra_files(files):
- return lambda name, opts: _extra_files(name, opts, files)
+def extra_files(files: List[str]):
+ return lambda name, opts: _extra_files(name, opts, set(files))
-def _extra_files(name, opts, files):
- opts.extra_files.extend(files)
+def _extra_files(name: TestName, opts, files: Set[str]):
+ opts.extra_files |= files
# -----
@@ -533,7 +535,7 @@ def _collect_stats(name: TestName, opts, metrics, deviation, is_compiler_stats_t
else:
_extra_run_opts(name, opts, RESIDENCY_OPTS)
# The nonmoving collector does not support -G1
- _omit_ways(name, opts, [WayName(name) for name in ['nonmoving', 'nonmoving_thr', 'nonmoving_thr_ghc']])
+ _omit_ways(name, opts, {WayName(name) for name in ['nonmoving', 'nonmoving_thr', 'nonmoving_thr_ghc']})
for metric_name in metrics:
metric = '{}/{}'.format(tag, metric_name)
@@ -1114,7 +1116,7 @@ def test_common_work(watcher: testutil.Watcher,
if f.startswith(name) and not f == name and
not f.endswith(testdir_suffix) and
not os.path.splitext(f)[1] in do_not_copy)
- for filename in (opts.extra_files + extra_src_files.get(name, [])):
+ for filename in (opts.extra_files | extra_src_files.get(name, set())):
if filename.startswith('/'):
framework_fail(name, None,
'no absolute paths in extra_files please: ' + filename)