ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
suppression_mcdc_selftest.py
Go to the documentation of this file.
1# SPDX-License-Identifier: MIT
2# Copyright (c) 2026 Brighton Sikarskie
3"""Adversarial assertions for MC/DC suppression-control binding."""
4
5from __future__ import annotations
6
7from selftest_assert import expect
8from suppression_model import Inventory
9
10EXPECTED_MCDC_FUNCTION_ROWS = 5
11EXPECTED_MALFORMED_MCDC_MACRO_ROWS = 3
12
13
14def assert_mcdc_macro_binding(inventory: Inventory, failures: list[str]) -> None:
15 """Assert each same-line macro owns its literal and invalid calls fail."""
16 function_rows = [
17 item
18 for item in inventory.suppressions
19 if item.family == "mcdc-deactivation"
20 and item.path == "malformed_mcdc.c"
21 and item.scope == "function"
22 ]
23 expect(
24 len(function_rows) == EXPECTED_MCDC_FUNCTION_ROWS
25 and [item.reason for item in function_rows]
26 == [
27 "fixture function invariant",
28 "valid after invalid",
29 "valid before invalid",
30 "first distinct reason",
31 "second distinct reason",
32 ],
33 "must fire: each same-line MC/DC macro owns its exact literal reason",
34 failures,
35 )
36 malformed_macros = [item for item in inventory.findings if item.code == "malformed-mcdc-macro"]
37 expect(
38 len(malformed_macros) == EXPECTED_MALFORMED_MCDC_MACRO_ROWS,
39 "must fire: invalid macros on either side cannot borrow a valid reason",
40 failures,
41 )