diff options
author | Ben Gamari <ben@smart-cactus.org> | 2022-04-27 11:42:18 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2022-04-28 00:38:12 -0400 |
commit | 3cc1e7afc245e277a51a59516f6cd6f4c99b21e2 (patch) | |
tree | c2304104cdda79c6904928e037ec133a5627baac | |
parent | 81cf52bb301592ff3d043d03eb9a0d547891a3e1 (diff) | |
download | haskell-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.py | 14 | ||||
-rw-r--r-- | testsuite/driver/testlib.py | 42 |
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) |