From a20625be7cc34c31e71bbe9f1465b426940898aa Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Mon, 20 Feb 2023 13:43:30 -0600 Subject: [PATCH] Allowed empty suites in test.py/bench.py This happens when you need to comment out an entire suite due to temporary changes. --- scripts/bench.py | 43 +++++++++++++++++++++--------------------- scripts/test.py | 49 ++++++++++++++++++++++++------------------------ 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/scripts/bench.py b/scripts/bench.py index d38dfb43..4eb6a5f2 100755 --- a/scripts/bench.py +++ b/scripts/bench.py @@ -171,7 +171,7 @@ class BenchSuite: # sort in case toml parsing did not retain order case_linenos.sort() - cases = config.pop('cases') + cases = config.pop('cases', {}) for (lineno, name), (nlineno, _) in it.zip_longest( case_linenos, case_linenos[1:], fillvalue=(float('inf'), None)): @@ -209,7 +209,7 @@ class BenchSuite: args=args)) # combine per-case defines - self.defines = set.union(*( + self.defines = set.union(set(), *( set(case.defines) for case in self.cases)) for k in config.keys(): @@ -425,26 +425,27 @@ def compile(bench_paths, **args): f.writeln(4*' '+'},') f.writeln(4*' '+'.define_count = ' 'BENCH_IMPLICIT_DEFINE_COUNT+%d,' % len(suite.defines)) - f.writeln(4*' '+'.cases = (const struct bench_case[]){') - for case in suite.cases: - # create case structs - f.writeln(8*' '+'{') - f.writeln(12*' '+'.name = "%s",' % case.name) - f.writeln(12*' '+'.path = "%s",' % case.path) - f.writeln(12*' '+'.flags = 0,') - f.writeln(12*' '+'.permutations = %d,' - % len(case.permutations)) - if case.defines: - f.writeln(12*' '+'.defines ' - '= (const bench_define_t*)__bench__%s__defines,' + if suite.cases: + f.writeln(4*' '+'.cases = (const struct bench_case[]){') + for case in suite.cases: + # create case structs + f.writeln(8*' '+'{') + f.writeln(12*' '+'.name = "%s",' % case.name) + f.writeln(12*' '+'.path = "%s",' % case.path) + f.writeln(12*' '+'.flags = 0,') + f.writeln(12*' '+'.permutations = %d,' + % len(case.permutations)) + if case.defines: + f.writeln(12*' '+'.defines ' + '= (const bench_define_t*)__bench__%s__defines,' + % (case.name)) + if suite.if_ is not None or case.if_ is not None: + f.writeln(12*' '+'.filter = __bench__%s__filter,' + % (case.name)) + f.writeln(12*' '+'.run = __bench__%s__run,' % (case.name)) - if suite.if_ is not None or case.if_ is not None: - f.writeln(12*' '+'.filter = __bench__%s__filter,' - % (case.name)) - f.writeln(12*' '+'.run = __bench__%s__run,' - % (case.name)) - f.writeln(8*' '+'},') - f.writeln(4*' '+'},') + f.writeln(8*' '+'},') + f.writeln(4*' '+'},') f.writeln(4*' '+'.case_count = %d,' % len(suite.cases)) f.writeln('};') f.writeln() diff --git a/scripts/test.py b/scripts/test.py index 79335e19..340e7097 100755 --- a/scripts/test.py +++ b/scripts/test.py @@ -174,7 +174,7 @@ class TestSuite: # sort in case toml parsing did not retain order case_linenos.sort() - cases = config.pop('cases') + cases = config.pop('cases', {}) for (lineno, name), (nlineno, _) in it.zip_longest( case_linenos, case_linenos[1:], fillvalue=(float('inf'), None)): @@ -214,7 +214,7 @@ class TestSuite: args=args)) # combine per-case defines - self.defines = set.union(*( + self.defines = set.union(set(), *( set(case.defines) for case in self.cases)) # combine other per-case things @@ -436,29 +436,30 @@ def compile(test_paths, **args): f.writeln(4*' '+'},') f.writeln(4*' '+'.define_count = ' 'TEST_IMPLICIT_DEFINE_COUNT+%d,' % len(suite.defines)) - f.writeln(4*' '+'.cases = (const struct test_case[]){') - for case in suite.cases: - # create case structs - f.writeln(8*' '+'{') - f.writeln(12*' '+'.name = "%s",' % case.name) - f.writeln(12*' '+'.path = "%s",' % case.path) - f.writeln(12*' '+'.flags = %s,' - % (' | '.join(filter(None, [ - 'TEST_REENTRANT' if case.reentrant else None])) - or 0)) - f.writeln(12*' '+'.permutations = %d,' - % len(case.permutations)) - if case.defines: - f.writeln(12*' '+'.defines ' - '= (const test_define_t*)__test__%s__defines,' + if suite.cases: + f.writeln(4*' '+'.cases = (const struct test_case[]){') + for case in suite.cases: + # create case structs + f.writeln(8*' '+'{') + f.writeln(12*' '+'.name = "%s",' % case.name) + f.writeln(12*' '+'.path = "%s",' % case.path) + f.writeln(12*' '+'.flags = %s,' + % (' | '.join(filter(None, [ + 'TEST_REENTRANT' if case.reentrant else None])) + or 0)) + f.writeln(12*' '+'.permutations = %d,' + % len(case.permutations)) + if case.defines: + f.writeln(12*' '+'.defines ' + '= (const test_define_t*)__test__%s__defines,' + % (case.name)) + if suite.if_ is not None or case.if_ is not None: + f.writeln(12*' '+'.filter = __test__%s__filter,' + % (case.name)) + f.writeln(12*' '+'.run = __test__%s__run,' % (case.name)) - if suite.if_ is not None or case.if_ is not None: - f.writeln(12*' '+'.filter = __test__%s__filter,' - % (case.name)) - f.writeln(12*' '+'.run = __test__%s__run,' - % (case.name)) - f.writeln(8*' '+'},') - f.writeln(4*' '+'},') + f.writeln(8*' '+'},') + f.writeln(4*' '+'},') f.writeln(4*' '+'.case_count = %d,' % len(suite.cases)) f.writeln('};') f.writeln()