def get_full_test_names(testargs, machine, compiler): ############################################################################### """ Return full test names in the form: TESTCASE.GRID.COMPSET.MACHINE_COMPILER.TESTMODS Testmods are optional Testargs can be categories or test names and support the NOT symbol '^' >>> get_full_test_names(["acme_tiny"], "melvin", "gnu") ['ERS.f19_g16_rx1.A.melvin_gnu', 'NCK.f19_g16_rx1.A.melvin_gnu'] >>> get_full_test_names(["acme_tiny"], "melvin", "intel") ['ERS.f19_g16_rx1.A.melvin_intel', 'NCK.f19_g16_rx1.A.melvin_intel'] >>> get_full_test_names(["acme_tiny", "PEA_P1_M.f45_g37_rx1.A"], "melvin", "gnu") ['ERS.f19_g16_rx1.A.melvin_gnu', 'NCK.f19_g16_rx1.A.melvin_gnu', 'PEA_P1_M.f45_g37_rx1.A.melvin_gnu'] >>> get_full_test_names(['ERS.f19_g16_rx1.A', 'NCK.f19_g16_rx1.A', 'PEA_P1_M.f45_g37_rx1.A'], "melvin", "gnu") ['ERS.f19_g16_rx1.A.melvin_gnu', 'NCK.f19_g16_rx1.A.melvin_gnu', 'PEA_P1_M.f45_g37_rx1.A.melvin_gnu'] >>> get_full_test_names(["acme_tiny", "^NCK.f19_g16_rx1.A"], "melvin", "gnu") ['ERS.f19_g16_rx1.A.melvin_gnu'] """ acme_test_suites = get_test_suites() tests_to_run = set() negations = set() for testarg in testargs: if (testarg.startswith("^")): negations.add(testarg[1:]) elif (testarg in acme_test_suites): tests_to_run.update(get_test_suite(testarg, machine, compiler)) else: tests_to_run.add(acme_util.get_full_test_name(testarg, machine, compiler)) for negation in negations: if (negation in acme_test_suites): for test, testmod in get_test_suite(negation, machine, compiler): fullname = acme_util.get_full_test_name(test, machine, compiler, testmod) if (fullname in tests_to_run): tests_to_run.remove(fullname) else: fullname = acme_util.get_full_test_name(negation, machine, compiler) if (fullname in tests_to_run): tests_to_run.remove(fullname) return list(sorted(tests_to_run))
def get_test_suite(suite, machine=None, compiler=None): ############################################################################### """ Return a list of FULL test names for a suite. """ expect(suite in _TEST_SUITES, "Unknown test suite: '%s'" % suite) machine = acme_util.probe_machine_name() if machine is None else machine compiler = acme_util.get_machine_info("COMPILERS", machine=machine)[0] if compiler is None else compiler inherits_from, tests_raw = _TEST_SUITES[suite] tests = [] for item in tests_raw: test_mod = None if (isinstance(item, str)): test_name = item else: expect(isinstance(item, tuple), "Bad item type for item '%s'" % str(item)) expect(len(item) in [2, 3], "Expected two or three items in item '%s'" % str(item)) expect(isinstance(item[0], str), "Expected string in first field of item '%s'" % str(item)) expect(isinstance(item[1], str), "Expected string in second field of item '%s'" % str(item)) test_name = item[0] if (len(item) == 2): test_mod = item[1] else: expect(type(item[2]) in [str, tuple], "Expected string or tuple for third field of item '%s'" % str(item)) test_mod_machines = [item[2]] if isinstance(item[2], str) else item[2] if (machine in test_mod_machines): test_mod = item[1] tests.append(acme_util.get_full_test_name(test_name, machine, compiler, testmod=test_mod)) if (inherits_from is not None): inherited_tests = get_test_suite(inherits_from, machine, compiler) expect(len(set(tests) & set(inherited_tests)) == 0, "Tests %s defined in multiple suites" % ", ".join(set(tests) & set(inherited_tests))) tests.extend(inherited_tests) return tests