Added "inf" as a valid option to run_test.py's -n flag.

Especially useful in combination with -f.
pull/1846/head
David Garcia Quintas 10 years ago
parent 2e378c89f8
commit e90cd37a1d
  1. 4
      tools/run_tests/jobset.py
  2. 30
      tools/run_tests/run_tests.py

@ -339,13 +339,15 @@ def run(cmdlines,
maxjobs=None, maxjobs=None,
newline_on_success=False, newline_on_success=False,
travis=False, travis=False,
infinite_runs=False,
stop_on_failure=False, stop_on_failure=False,
cache=None): cache=None):
js = Jobset(check_cancelled, js = Jobset(check_cancelled,
maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS, maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS,
newline_on_success, travis, stop_on_failure, newline_on_success, travis, stop_on_failure,
cache if cache is not None else NoCache()) cache if cache is not None else NoCache())
if not travis: # We can't sort an infinite sequence of runs.
if not travis or infinite_runs:
cmdlines = shuffle_iteratable(cmdlines) cmdlines = shuffle_iteratable(cmdlines)
else: else:
cmdlines = sorted(cmdlines, key=lambda x: x.shortname) cmdlines = sorted(cmdlines, key=lambda x: x.shortname)

@ -330,7 +330,28 @@ argp.add_argument('-c', '--config',
choices=['all'] + sorted(_CONFIGS.keys()), choices=['all'] + sorted(_CONFIGS.keys()),
nargs='+', nargs='+',
default=_DEFAULT) default=_DEFAULT)
argp.add_argument('-n', '--runs_per_test', default=1, type=int)
def runs_per_test_type(arg_str):
"""Auxilary function to parse the "runs_per_test" flag.
Returns:
A positive integer or 0, the latter indicating an infinite number of
runs.
Raises:
argparse.ArgumentTypeError: Upon invalid input.
"""
if arg_str == 'inf':
return 0
try:
n = int(arg_str)
if n <= 0: raise ValueError
except:
msg = "'{}' isn't a positive integer or 'inf'".format(arg_str)
raise argparse.ArgumentTypeError(msg)
argp.add_argument('-n', '--runs_per_test', default=1, type=runs_per_test_type,
help='A positive integer or "inf". If "inf", all tests will run in an '
'infinite loop. Especially useful in combination with "-f"')
argp.add_argument('-r', '--regex', default='.*', type=str) argp.add_argument('-r', '--regex', default='.*', type=str)
argp.add_argument('-j', '--jobs', default=2 * multiprocessing.cpu_count(), type=int) argp.add_argument('-j', '--jobs', default=2 * multiprocessing.cpu_count(), type=int)
argp.add_argument('-s', '--slowdown', default=1.0, type=float) argp.add_argument('-s', '--slowdown', default=1.0, type=float)
@ -453,11 +474,14 @@ def _build_and_run(check_cancelled, newline_on_success, travis, cache):
antagonists = [subprocess.Popen(['tools/run_tests/antagonist.py']) antagonists = [subprocess.Popen(['tools/run_tests/antagonist.py'])
for _ in range(0, args.antagonists)] for _ in range(0, args.antagonists)]
try: try:
infinite_runs = runs_per_test == 0
# run all the tests # run all the tests
all_runs = itertools.chain.from_iterable( runs_sequence = (itertools.repeat(one_run) if infinite_runs
itertools.repeat(one_run, runs_per_test)) else itertools.repeat(one_run, runs_per_test))
all_runs = itertools.chain.from_iterable(runs_sequence)
if not jobset.run(all_runs, check_cancelled, if not jobset.run(all_runs, check_cancelled,
newline_on_success=newline_on_success, travis=travis, newline_on_success=newline_on_success, travis=travis,
infinite_runs=infinite_runs,
maxjobs=args.jobs, maxjobs=args.jobs,
stop_on_failure=args.stop_on_failure, stop_on_failure=args.stop_on_failure,
cache=cache): cache=cache):

Loading…
Cancel
Save