|
|
|
@ -150,7 +150,7 @@ def test_c17_output_fault_class(alg, c17_resolved): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# --------------------------------------------------------------------------- # |
|
|
|
# --------------------------------------------------------------------------- # |
|
|
|
# s27 fixture: exposes the exact-vs-optimistic difference between simulators. |
|
|
|
# s27 fixture: small sequential benchmark. |
|
|
|
# --------------------------------------------------------------------------- # |
|
|
|
# --------------------------------------------------------------------------- # |
|
|
|
|
|
|
|
|
|
|
|
def _s27_setup(s27_bench, s27_resolved): |
|
|
|
def _s27_setup(s27_bench, s27_resolved): |
|
|
|
@ -158,7 +158,7 @@ def _s27_setup(s27_bench, s27_resolved): |
|
|
|
faults = list(fs.saf_equiv_classes.keys()) |
|
|
|
faults = list(fs.saf_equiv_classes.keys()) |
|
|
|
rng = np.random.default_rng(1) |
|
|
|
rng = np.random.default_rng(1) |
|
|
|
pat = rng.choice([logic.ZERO, logic.ONE], |
|
|
|
pat = rng.choice([logic.ZERO, logic.ONE], |
|
|
|
size=(len(s27_resolved.s_nodes(KYUPY)), 64)).astype(np.uint8) |
|
|
|
size=(len(s27_resolved.s_nodes(KYUPY)), 8)).astype(np.uint8) |
|
|
|
return faults, pat |
|
|
|
return faults, pat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -172,9 +172,9 @@ def test_s27_exact_simulators_agree(s27_bench, s27_resolved): |
|
|
|
# The two exact simulators must classify every fault identically. |
|
|
|
# The two exact simulators must classify every fault identically. |
|
|
|
assert simple['DS'] == incr['DS'] |
|
|
|
assert simple['DS'] == incr['DS'] |
|
|
|
assert simple['NO'] == incr['NO'] |
|
|
|
assert simple['NO'] == incr['NO'] |
|
|
|
# This deterministic pattern set leaves exactly one fault unobserved. |
|
|
|
# This deterministic pattern set leaves exactly 6 faults unobserved. |
|
|
|
assert len(simple['DS']) == 31 |
|
|
|
assert len(simple['DS']) == 26 |
|
|
|
assert len(simple['NO']) == 1 |
|
|
|
assert len(simple['NO']) == 6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_s27_ppsfp_matches_exact(s27_bench, s27_resolved): |
|
|
|
def test_s27_ppsfp_matches_exact(s27_bench, s27_resolved): |
|
|
|
@ -201,6 +201,7 @@ def test_ppsfp_multibranch_stem_observability(alg): |
|
|
|
r = classify(alg, c, [a_sa0], pat) |
|
|
|
r = classify(alg, c, [a_sa0], pat) |
|
|
|
assert r['DS'] == {a_sa0} |
|
|
|
assert r['DS'] == {a_sa0} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('alg', [SAFSimIncremental, SAFSimPPSFP]) |
|
|
|
@pytest.mark.parametrize('alg', [SAFSimIncremental, SAFSimPPSFP]) |
|
|
|
def test_all_simprims(mydir, alg): |
|
|
|
def test_all_simprims(mydir, alg): |
|
|
|
c = verilog.load(mydir / 'all_kyupy_simprims.v') |
|
|
|
c = verilog.load(mydir / 'all_kyupy_simprims.v') |
|
|
|
|