diff options
author | 2015-06-01 17:04:17 -0700 | |
---|---|---|
committer | 2015-06-01 17:04:17 -0700 | |
commit | 8e0b08a33d819d0a2523ec439d545296e1ad2086 (patch) | |
tree | 5613a61a51db9c5a5f7ecc5fec8cfd0eb0b2c436 /tools/run_tests/run_tests.py | |
parent | 3c1331f920569ba3a182e13321db26796d6e920e (diff) | |
parent | fa275a97b968060383fe27c26b1d85f08d9582f9 (diff) |
Merge branch 'count-the-things' into we-dont-need-no-backup
Diffstat (limited to 'tools/run_tests/run_tests.py')
-rwxr-xr-x | tools/run_tests/run_tests.py | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index f34a6c9c07..cb50e38ca1 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -330,7 +330,28 @@ argp.add_argument('-c', '--config', choices=['all'] + sorted(_CONFIGS.keys()), nargs='+', 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('-j', '--jobs', default=2 * multiprocessing.cpu_count(), type=int) argp.add_argument('-s', '--slowdown', default=1.0, type=float) @@ -456,11 +477,14 @@ def _build_and_run(check_cancelled, newline_on_success, travis, cache): antagonists = [subprocess.Popen(['tools/run_tests/antagonist.py']) for _ in range(0, args.antagonists)] try: + infinite_runs = runs_per_test == 0 # run all the tests - all_runs = itertools.chain.from_iterable( - itertools.repeat(one_run, runs_per_test)) + runs_sequence = (itertools.repeat(one_run) if infinite_runs + else itertools.repeat(one_run, runs_per_test)) + all_runs = itertools.chain.from_iterable(runs_sequence) if not jobset.run(all_runs, check_cancelled, newline_on_success=newline_on_success, travis=travis, + infinite_runs=infinite_runs, maxjobs=args.jobs, stop_on_failure=args.stop_on_failure, cache=cache): |