move baseline into class, support for pattern list import, fault list export, avoid resolving circuits twice.

This commit is contained in:
stefan committed 2026-06-24 19:08:49 +09:00
1 parent 5ba1f11d1d
commit 9a41edda4c
7 files changed
+149 -78

No files matched your search

+8 -8
View File
@@ -4,15 +4,15 @@ from fsim.static import FaultSet
def test_trivial_inv():
c = bench.parse('input(i) output(o) o=INV(i)')
fs = FaultSet(c, KYUPY)
fs = FaultSet(c, KYUPY, c)
assert len(fs.saf_set) == 4
assert len(fs.saf_equiv_classes) == 2
oline = c.forks['o'].ins[0]
iline = oline.driver.ins[0]
assert fs.fault_str(oline.index*2) == 'o/o@0'
assert fs.fault_str(oline.index*2+1) == 'o/o@1'
assert fs.fault_str(iline.index*2) == 'o/i0@0'
assert fs.fault_str(iline.index*2+1) == 'o/i0@1'
assert fs.fault_site_str(c, KYUPY, oline.index*2) == 'o/o'
assert fs.fault_site_str(c, KYUPY, oline.index*2+1) == 'o/o'
assert fs.fault_site_str(c, KYUPY, iline.index*2) == 'o/i0'
assert fs.fault_site_str(c, KYUPY, iline.index*2+1) == 'o/i0'
assert oline.index*2 in fs.saf_equiv_classes
assert iline.index*2+1 in fs.saf_equiv_classes[oline.index*2]
assert oline.index*2+1 in fs.saf_equiv_classes
@@ -22,7 +22,7 @@ def test_and():
c = bench.parse('input(i0, i1) output(o) o=AND(i0, i1)')
for n in c.nodes:
print(n)
fs = FaultSet(c, KYUPY)
fs = FaultSet(c, KYUPY, c)
assert len(fs.saf_set) == 6
assert len(fs.saf_equiv_classes) == 4
oline = c.forks['o'].ins[0]
@@ -39,7 +39,7 @@ def test_and():
def _class_sizes(src):
"""Returns (#equiv class of output s-a-0, #equiv class of output s-a-1)."""
c = bench.parse(src)
fs = FaultSet(c, KYUPY)
fs = FaultSet(c, KYUPY, c)
oline = c.forks['o'].ins[0]
return (len(fs.saf_equiv_classes.get(oline.index*2, set())),
len(fs.saf_equiv_classes.get(oline.index*2+1, set())))
@@ -106,7 +106,7 @@ def test_s27():
G12 = NOR(G1, G7)
G13 = NOR(G2, G12)
''')
fs = FaultSet(c, KYUPY)
fs = FaultSet(c, KYUPY, c)
assert len(fs.saf_set) == 52
assert len(fs.saf_equiv_classes) == 32
g11_line = c.cells['G11'].outs[0]