Skip to content

Commit 9de8e5e

Browse files
committed
fix(test): coverage_key on TestCaseBuilder + treat empty coverage as run (soundness)
1 parent 8232576 commit 9de8e5e

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

toolchain/mfc/test/case.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,9 @@ class TestCaseBuilder:
376376
def get_uuid(self) -> str:
377377
return trace_to_uuid(self.trace)
378378

379+
def coverage_key(self) -> str:
380+
return self.to_case().coverage_key()
381+
379382
def to_case(self) -> TestCase:
380383
if self.kind == "convergence":
381384
# Convergence cases drive their own runs — the BASE_CFG mods/path

toolchain/mfc/test/coverage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def select_tests(cases, coverage_map, changed_files):
109109
for case in cases:
110110
key = case.coverage_key()
111111
cov = coverage_map.get(key)
112-
if cov is None: # rung 5: unmapped/new test
112+
if not cov: # rung 5: unmapped/new test, or empty (uncertain) coverage -> run
113113
to_run.append(case)
114114
elif set(cov) & changed_fpp: # rung 6: overlap
115115
to_run.append(case)

toolchain/mfc/test/test_coverage_unit.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,23 @@ def test_health_undercoverage_fails():
234234
min_fraction=0.8,
235235
)
236236
assert not ok and "coverage" in msg.lower()
237+
238+
239+
def test_builder_has_coverage_key_matching_case():
240+
from mfc.test.case import TestCaseBuilder
241+
242+
b = TestCaseBuilder(trace="1D -> Foo", mods={"m": 100, "weno_order": 5}, path="", args=[], ppn=1, functor=None)
243+
assert b.coverage_key() == b.to_case().coverage_key()
244+
245+
246+
def test_rung5_empty_coverage_is_included():
247+
# a test whose map entry is [] (uncertain) must be RUN, not skipped, on a .fpp change.
248+
# "anchor" covers the changed .fpp so rung4 passes and we reach the per-test rungs.
249+
cases = _cases("hasempty", "anchor")
250+
cov_map = {
251+
"hasempty": [],
252+
"anchor": ["src/simulation/m_rhs.fpp"],
253+
}
254+
run, skip, _ = select_tests(cases, cov_map, {"src/simulation/m_rhs.fpp"})
255+
run_keys = {c.coverage_key() for c in run}
256+
assert "hasempty" in run_keys and skip == []

0 commit comments

Comments
 (0)