Randomize test for subset invariant random ordering of tests

Also removed the iterative checking that seeds 1-100 do not create
the same output, because it used too much runtime.
This commit is contained in:
Martin Hořeňovský 2020-04-14 16:38:07 +02:00
parent 630ba26278
commit 9b5fc9eaea
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
1 changed files with 16 additions and 10 deletions

View File

@ -1,7 +1,16 @@
#!/usr/bin/env python3
"""
This test script verifies that the random ordering of tests inside
Catch2 is invariant in regards to subsetting. This is done by running
the binary 3 times, once with all tests selected, and twice with smaller
subsets of tests selected, and verifying that the selected tests are in
the same relative order.
"""
import subprocess
import sys
import random
import xml.etree.ElementTree as ET
def list_tests(self_test_exe, tags, rng_seed):
@ -37,20 +46,17 @@ def check_is_sublist_of(shorter, longer):
def main():
self_test_exe, = sys.argv[1:]
list_one_tag = list_tests(self_test_exe, ['generators'], 1)
list_two_tags = list_tests(self_test_exe, ['generators', 'matchers'], 1)
list_all = list_tests(self_test_exe, [], 1)
# We want a random seed for the test, but want to avoid 0,
# because it has special meaning
seed = random.randint(1, 2 ** 32 - 1)
list_one_tag = list_tests(self_test_exe, ['generators'], seed)
list_two_tags = list_tests(self_test_exe, ['generators', 'matchers'], seed)
list_all = list_tests(self_test_exe, [], seed)
# First, verify that restricting to a subset yields the same order
check_is_sublist_of(list_two_tags, list_all)
check_is_sublist_of(list_one_tag, list_two_tags)
# Second, verify that different seeds yield different orders
num_seeds = 100
seeds = range(1, num_seeds + 1) # Avoid zero since that's special
lists = {tuple(list_tests(self_test_exe, [], seed)) for seed in seeds}
assert len(lists) == num_seeds, (
'Got {} distict lists from {} seeds'.format(len(lists), num_seeds))
if __name__ == '__main__':
sys.exit(main())