FA-91936 / PLC ladder logic scan cycles / Open access
Counter reset leaves overflow and underflow latched · case 01
After RES the accumulator reads zero but OV or UN is still set.
ROOT CAUSE
The reset rung only clears the accumulator.
VERIFIED REPAIR
RES clears ACC, OV and UN together.
Unsuccessful approach: Clearing OV but not UN still leaves an underflow latched after reset.
Case contract
Up/down counter pair sharing one 16-bit signed accumulator, evaluated per scan; scans is a list of [cu, cd, res]. CU counts on its rising edge and CD on its own rising edge (both in one scan cancel). Incrementing 32767 wraps to -32768 and latches OV; decrementing -32768 wraps to 32767 and latches UN. A later RES rung clears ACC, OV and UN but not the edge memories. DN is ACC >= preset. Return [ACC, DN, OV, UN] per scan.
Why this case matters
Ladder programs are executed as repeated scans; each defect here changes what a rung, timer, counter or data-table instruction reports on a particular scan, which is how commissioning and field faults are actually observed.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(preset, start, scans):
acc = start
ov = False
un = False
pcu = False
pcd = False
out = []
for cu, cd, res in scans:
cu = bool(cu)
cd = bool(cd)
if cu and not pcu:
acc += 1
if acc > 32767:
acc = -32768
ov = True
if cd and not pcd:
acc -= 1
if acc < -32768:
acc = 32767
un = True
pcu = cu
pcd = cd
if res:
acc = 0
out.append([acc, acc >= preset, ov, un])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['regression: scenario 49',
[3,
-32768,
[[False, True, False],
[True, False, False],
[False, True, False],
[False, True, False],
[False, False, False],
[False, False, False],
[False, False, True],
[False, False, False],
[False, False, False],
[True, True, True],
[True, False, False],
[False, True, True],
[False, True, False],
[True, True, False]]],
[[32767, True, False, True],
[-32768, False, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[0,
1,
[[True, False, False],
[True, False, False],
[True, False, False],
[False, True, True],
[False, False, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, False, False]]],
[[2, True, False, False],
[2, True, False, False],
[2, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False]]],
['control: scenario 2',
[3,
32766,
[[True, True, False],
[False, False, False],
[True, True, False],
[False, False, True],
[False, False, False],
[True, False, False],
[False, False, False],
[True, True, False],
[False, False, False],
[True, True, False],
[False, False, False],
[False, True, False],
[False, False, False]]],
[[32766, True, False, False],
[32766, True, False, False],
[32766, True, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[0, False, False, False],
[0, False, False, False]]]],
[['regression: scenario 4',
[3,
32767,
[[False, False, False],
[True, True, True],
[False, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, False, False],
[False, True, False],
[False, True, False]]],
[[32767, True, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[-1, False, False, False],
[-1, False, False, False],
[-2, False, False, False],
[-2, False, False, False]]],
['regression: scenario 54',
[32767,
32767,
[[True, False, False],
[False, False, False],
[False, True, False],
[True, True, False],
[False, True, False],
[False, False, False],
[True, False, True],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False],
[False, True, False],
[True, True, False],
[False, True, False]]],
[[-32768, False, True, False],
[-32768, False, True, False],
[32767, True, True, True],
[-32768, False, True, True],
[-32768, False, True, True],
[-32768, False, True, True],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[1, False, False, False],
[2, False, False, False],
[2, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[2,
-32767,
[[True, False, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, True, False],
[False, False, False],
[True, False, False],
[True, False, False]]],
[[-32766, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False],
[-32767, False, False, False],
[-32767, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False]]]],
[['regression: scenario 11',
[-1,
32767,
[[False, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, True, True],
[False, True, False],
[False, True, False],
[False, True, False],
[True, True, False],
[False, False, False]]],
[[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[32767, True, True, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False]]],
['regression: scenario 14',
[-1,
-32768,
[[True, True, False],
[True, False, False],
[True, True, False],
[True, True, False],
[True, False, False],
[False, False, False],
[False, False, False],
[True, True, True],
[True, True, False],
[False, False, False],
[False, False, False],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[3,
32765,
[[True, False, True],
[True, False, False],
[True, False, True],
[False, True, False],
[True, False, False],
[True, True, True],
[False, True, False],
[False, False, False],
[True, True, False],
[False, True, False],
[True, False, False],
[False, False, False],
[True, False, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[-1, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[1, False, False, False]]]],
[['regression: scenario 24',
[-32768,
-32767,
[[True, False, False],
[False, True, False],
[True, False, False],
[True, True, False],
[True, False, False],
[False, True, False],
[False, False, False],
[True, True, False],
[True, True, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, True, True],
[False, True, False]]],
[[-32766, True, False, False],
[-32767, True, False, False],
[-32766, True, False, False],
[-32767, True, False, False],
[-32767, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[0, True, False, False],
[0, True, False, False]]],
['regression: scenario 32',
[-32768,
-32768,
[[False, True, False],
[False, True, False],
[True, False, True],
[True, False, False],
[True, False, False],
[False, False, True],
[False, False, False],
[False, True, False],
[False, True, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[32767, True, False, True],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[32767,
32766,
[[False, False, False],
[True, True, False],
[False, True, True],
[True, True, False],
[False, True, False],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, True],
[True, False, False],
[False, False, False],
[False, False, False]]],
[[32766, False, False, False],
[32766, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[2, False, False, False],
[2, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False]]]],
[['regression: scenario 20',
[-1,
32767,
[[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False],
[True, False, True],
[False, True, False],
[False, False, False],
[False, False, False],
[True, False, False],
[True, False, False],
[True, False, False],
[True, True, False]]],
[[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[-1, True, False, False]]],
['regression: scenario 43',
[32767,
32767,
[[True, True, False],
[True, True, False],
[True, False, False],
[True, False, False],
[False, True, False],
[True, False, True],
[False, False, False]]],
[[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32766, False, True, True],
[0, False, False, False],
[0, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[0,
-2,
[[True, False, False],
[False, False, False],
[True, False, False],
[True, True, False],
[True, False, False],
[False, False, True],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, False, False],
[True, False, False]]],
[[-1, False, False, False],
[-1, False, False, False],
[0, True, False, False],
[-1, False, False, False],
[-1, False, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: underflow then reset | [[-32768, False, False, False], [-32768, False, False, False], [32767, True, False, True], [0, True, False, True], [0, True, False, True]] | [[-32768, False, False, False], [-32768, False, False, False], [32767, True, False, True], [0, True, False, False], [0, True, False, False]] | Failed |
| regression: scenario 49 | [[32767, True, False, True], [-32768, False, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [0, False, True, True], [0, False, True, True], [0, False, True, True], [0, False, True, True], [0, False, True, True], [0, False, True, True], [0, False, True, True], [1, False, True, True]] | [[32767, True, False, True], [-32768, False, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False]] | Failed |
| control: held count input | [[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]] | [[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]] | Passed |
| control: overflow wrap | [[32767, True, False, False], [32767, True, False, False], [-32768, False, True, False], [-32768, False, True, False], [-32767, False, True, False]] | [[32767, True, False, False], [32767, True, False, False], [-32768, False, True, False], [-32768, False, True, False], [-32767, False, True, False]] | Passed |
| control: simultaneous edges | [[0, False, False, False], [0, False, False, False], [1, True, False, False], [0, False, False, False], [0, False, False, False]] | [[0, False, False, False], [0, False, False, False], [1, True, False, False], [0, False, False, False], [0, False, False, False]] | Passed |
| control: count down while up held | [[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]] | [[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]] | Passed |
| control: scenario 1 | [[2, True, False, False], [2, True, False, False], [2, True, False, False], [0, True, False, False], [0, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False]] | [[2, True, False, False], [2, True, False, False], [2, True, False, False], [0, True, False, False], [0, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False]] | Passed |
| control: scenario 2 | [[32766, True, False, False], [32766, True, False, False], [32766, True, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [0, False, False, False], [0, False, False, False]] | [[32766, True, False, False], [32766, True, False, False], [32766, True, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [0, False, False, False], [0, False, False, False]] | Passed |
SHA-256 / 4314571cccb33892ad430a541eba2c37af08dddaa07cf247898b39e3b7e0615c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(preset, start, scans):
acc = start
ov = False
un = False
pcu = False
pcd = False
out = []
for cu, cd, res in scans:
cu = bool(cu)
cd = bool(cd)
if cu and not pcu:
acc += 1
if acc > 32767:
acc = -32768
ov = True
if cd and not pcd:
acc -= 1
if acc < -32768:
acc = 32767
un = True
pcu = cu
pcd = cd
if res:
acc = 0
ov = False
out.append([acc, acc >= preset, ov, un])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['regression: scenario 49',
[3,
-32768,
[[False, True, False],
[True, False, False],
[False, True, False],
[False, True, False],
[False, False, False],
[False, False, False],
[False, False, True],
[False, False, False],
[False, False, False],
[True, True, True],
[True, False, False],
[False, True, True],
[False, True, False],
[True, True, False]]],
[[32767, True, False, True],
[-32768, False, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[0,
1,
[[True, False, False],
[True, False, False],
[True, False, False],
[False, True, True],
[False, False, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, False, False]]],
[[2, True, False, False],
[2, True, False, False],
[2, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False]]],
['control: scenario 2',
[3,
32766,
[[True, True, False],
[False, False, False],
[True, True, False],
[False, False, True],
[False, False, False],
[True, False, False],
[False, False, False],
[True, True, False],
[False, False, False],
[True, True, False],
[False, False, False],
[False, True, False],
[False, False, False]]],
[[32766, True, False, False],
[32766, True, False, False],
[32766, True, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[0, False, False, False],
[0, False, False, False]]]],
[['regression: scenario 4',
[3,
32767,
[[False, False, False],
[True, True, True],
[False, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, False, False],
[False, True, False],
[False, True, False]]],
[[32767, True, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[-1, False, False, False],
[-1, False, False, False],
[-2, False, False, False],
[-2, False, False, False]]],
['regression: scenario 54',
[32767,
32767,
[[True, False, False],
[False, False, False],
[False, True, False],
[True, True, False],
[False, True, False],
[False, False, False],
[True, False, True],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False],
[False, True, False],
[True, True, False],
[False, True, False]]],
[[-32768, False, True, False],
[-32768, False, True, False],
[32767, True, True, True],
[-32768, False, True, True],
[-32768, False, True, True],
[-32768, False, True, True],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[1, False, False, False],
[2, False, False, False],
[2, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[2,
-32767,
[[True, False, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, True, False],
[False, False, False],
[True, False, False],
[True, False, False]]],
[[-32766, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False],
[-32767, False, False, False],
[-32767, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False]]]],
[['regression: scenario 11',
[-1,
32767,
[[False, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, True, True],
[False, True, False],
[False, True, False],
[False, True, False],
[True, True, False],
[False, False, False]]],
[[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[32767, True, True, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False]]],
['regression: scenario 14',
[-1,
-32768,
[[True, True, False],
[True, False, False],
[True, True, False],
[True, True, False],
[True, False, False],
[False, False, False],
[False, False, False],
[True, True, True],
[True, True, False],
[False, False, False],
[False, False, False],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[3,
32765,
[[True, False, True],
[True, False, False],
[True, False, True],
[False, True, False],
[True, False, False],
[True, True, True],
[False, True, False],
[False, False, False],
[True, True, False],
[False, True, False],
[True, False, False],
[False, False, False],
[True, False, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[-1, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[1, False, False, False]]]],
[['regression: scenario 24',
[-32768,
-32767,
[[True, False, False],
[False, True, False],
[True, False, False],
[True, True, False],
[True, False, False],
[False, True, False],
[False, False, False],
[True, True, False],
[True, True, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, True, True],
[False, True, False]]],
[[-32766, True, False, False],
[-32767, True, False, False],
[-32766, True, False, False],
[-32767, True, False, False],
[-32767, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[0, True, False, False],
[0, True, False, False]]],
['regression: scenario 32',
[-32768,
-32768,
[[False, True, False],
[False, True, False],
[True, False, True],
[True, False, False],
[True, False, False],
[False, False, True],
[False, False, False],
[False, True, False],
[False, True, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[32767, True, False, True],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[32767,
32766,
[[False, False, False],
[True, True, False],
[False, True, True],
[True, True, False],
[False, True, False],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, True],
[True, False, False],
[False, False, False],
[False, False, False]]],
[[32766, False, False, False],
[32766, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[2, False, False, False],
[2, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False]]]],
[['regression: scenario 20',
[-1,
32767,
[[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False],
[True, False, True],
[False, True, False],
[False, False, False],
[False, False, False],
[True, False, False],
[True, False, False],
[True, False, False],
[True, True, False]]],
[[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[-1, True, False, False]]],
['regression: scenario 43',
[32767,
32767,
[[True, True, False],
[True, True, False],
[True, False, False],
[True, False, False],
[False, True, False],
[True, False, True],
[False, False, False]]],
[[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32766, False, True, True],
[0, False, False, False],
[0, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[0,
-2,
[[True, False, False],
[False, False, False],
[True, False, False],
[True, True, False],
[True, False, False],
[False, False, True],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, False, False],
[True, False, False]]],
[[-1, False, False, False],
[-1, False, False, False],
[0, True, False, False],
[-1, False, False, False],
[-1, False, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: underflow then reset | [[-32768, False, False, False], [-32768, False, False, False], [32767, True, False, True], [0, True, False, True], [0, True, False, True]] | [[-32768, False, False, False], [-32768, False, False, False], [32767, True, False, True], [0, True, False, False], [0, True, False, False]] | Failed |
| regression: scenario 49 | [[32767, True, False, True], [-32768, False, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [0, False, False, True], [0, False, False, True], [0, False, False, True], [0, False, False, True], [0, False, False, True], [0, False, False, True], [0, False, False, True], [1, False, False, True]] | [[32767, True, False, True], [-32768, False, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False]] | Failed |
| control: held count input | [[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]] | [[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]] | Passed |
| control: overflow wrap | [[32767, True, False, False], [32767, True, False, False], [-32768, False, True, False], [-32768, False, True, False], [-32767, False, True, False]] | [[32767, True, False, False], [32767, True, False, False], [-32768, False, True, False], [-32768, False, True, False], [-32767, False, True, False]] | Passed |
| control: simultaneous edges | [[0, False, False, False], [0, False, False, False], [1, True, False, False], [0, False, False, False], [0, False, False, False]] | [[0, False, False, False], [0, False, False, False], [1, True, False, False], [0, False, False, False], [0, False, False, False]] | Passed |
| control: count down while up held | [[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]] | [[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]] | Passed |
| control: scenario 1 | [[2, True, False, False], [2, True, False, False], [2, True, False, False], [0, True, False, False], [0, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False]] | [[2, True, False, False], [2, True, False, False], [2, True, False, False], [0, True, False, False], [0, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False]] | Passed |
| control: scenario 2 | [[32766, True, False, False], [32766, True, False, False], [32766, True, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [0, False, False, False], [0, False, False, False]] | [[32766, True, False, False], [32766, True, False, False], [32766, True, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [0, False, False, False], [0, False, False, False]] | Passed |
SHA-256 / f698d9fd6eb4a5aa9744db987819d52cf6843e59fb7c145ef7d56259cd7b8b98
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(preset, start, scans):
acc = start
ov = False
un = False
pcu = False
pcd = False
out = []
for cu, cd, res in scans:
cu = bool(cu)
cd = bool(cd)
if cu and not pcu:
acc += 1
if acc > 32767:
acc = -32768
ov = True
if cd and not pcd:
acc -= 1
if acc < -32768:
acc = 32767
un = True
pcu = cu
pcd = cd
if res:
acc = 0
ov = False
un = False
out.append([acc, acc >= preset, ov, un])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['regression: scenario 49',
[3,
-32768,
[[False, True, False],
[True, False, False],
[False, True, False],
[False, True, False],
[False, False, False],
[False, False, False],
[False, False, True],
[False, False, False],
[False, False, False],
[True, True, True],
[True, False, False],
[False, True, True],
[False, True, False],
[True, True, False]]],
[[32767, True, False, True],
[-32768, False, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[0,
1,
[[True, False, False],
[True, False, False],
[True, False, False],
[False, True, True],
[False, False, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, False, False]]],
[[2, True, False, False],
[2, True, False, False],
[2, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False]]],
['control: scenario 2',
[3,
32766,
[[True, True, False],
[False, False, False],
[True, True, False],
[False, False, True],
[False, False, False],
[True, False, False],
[False, False, False],
[True, True, False],
[False, False, False],
[True, True, False],
[False, False, False],
[False, True, False],
[False, False, False]]],
[[32766, True, False, False],
[32766, True, False, False],
[32766, True, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False],
[0, False, False, False],
[0, False, False, False]]]],
[['regression: scenario 4',
[3,
32767,
[[False, False, False],
[True, True, True],
[False, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, False, False],
[False, True, False],
[False, True, False]]],
[[32767, True, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[-1, False, False, False],
[-1, False, False, False],
[-2, False, False, False],
[-2, False, False, False]]],
['regression: scenario 54',
[32767,
32767,
[[True, False, False],
[False, False, False],
[False, True, False],
[True, True, False],
[False, True, False],
[False, False, False],
[True, False, True],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False],
[False, True, False],
[True, True, False],
[False, True, False]]],
[[-32768, False, True, False],
[-32768, False, True, False],
[32767, True, True, True],
[-32768, False, True, True],
[-32768, False, True, True],
[-32768, False, True, True],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[1, False, False, False],
[2, False, False, False],
[2, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[2,
-32767,
[[True, False, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, True, False],
[False, False, False],
[True, False, False],
[True, False, False]]],
[[-32766, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False],
[-32767, False, False, False],
[-32767, False, False, False],
[-32766, False, False, False],
[-32766, False, False, False]]]],
[['regression: scenario 11',
[-1,
32767,
[[False, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, True, True],
[False, True, False],
[False, True, False],
[False, True, False],
[True, True, False],
[False, False, False]]],
[[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[32767, True, True, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False]]],
['regression: scenario 14',
[-1,
-32768,
[[True, True, False],
[True, False, False],
[True, True, False],
[True, True, False],
[True, False, False],
[False, False, False],
[False, False, False],
[True, True, True],
[True, True, False],
[False, False, False],
[False, False, False],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[3,
32765,
[[True, False, True],
[True, False, False],
[True, False, True],
[False, True, False],
[True, False, False],
[True, True, True],
[False, True, False],
[False, False, False],
[True, True, False],
[False, True, False],
[True, False, False],
[False, False, False],
[True, False, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[-1, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[1, False, False, False]]]],
[['regression: scenario 24',
[-32768,
-32767,
[[True, False, False],
[False, True, False],
[True, False, False],
[True, True, False],
[True, False, False],
[False, True, False],
[False, False, False],
[True, True, False],
[True, True, False],
[True, False, False],
[False, False, False],
[False, False, False],
[False, True, True],
[False, True, False]]],
[[-32766, True, False, False],
[-32767, True, False, False],
[-32766, True, False, False],
[-32767, True, False, False],
[-32767, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[-32768, True, False, False],
[0, True, False, False],
[0, True, False, False]]],
['regression: scenario 32',
[-32768,
-32768,
[[False, True, False],
[False, True, False],
[True, False, True],
[True, False, False],
[True, False, False],
[False, False, True],
[False, False, False],
[False, True, False],
[False, True, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[32767, True, False, True],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[32767,
32766,
[[False, False, False],
[True, True, False],
[False, True, True],
[True, True, False],
[False, True, False],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, True],
[True, False, False],
[False, False, False],
[False, False, False]]],
[[32766, False, False, False],
[32766, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[2, False, False, False],
[2, False, False, False],
[2, False, False, False],
[0, False, False, False],
[1, False, False, False],
[1, False, False, False],
[1, False, False, False]]]],
[['regression: scenario 20',
[-1,
32767,
[[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False],
[True, False, True],
[False, True, False],
[False, False, False],
[False, False, False],
[True, False, False],
[True, False, False],
[True, False, False],
[True, True, False]]],
[[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False],
[0, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[-1, True, False, False],
[0, True, False, False],
[0, True, False, False],
[0, True, False, False],
[-1, True, False, False]]],
['regression: scenario 43',
[32767,
32767,
[[True, True, False],
[True, True, False],
[True, False, False],
[True, False, False],
[False, True, False],
[True, False, True],
[False, False, False]]],
[[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32767, True, True, True],
[32766, False, True, True],
[0, False, False, False],
[0, False, False, False]]],
['control: held count input',
[3, 0, [[True, False, False], [True, False, False], [False, False, False], [True, False, False]]],
[[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]]],
['control: overflow wrap',
[0,
32766,
[[True, False, False],
[False, False, False],
[True, False, False],
[False, False, False],
[True, False, False]]],
[[32767, True, False, False],
[32767, True, False, False],
[-32768, False, True, False],
[-32768, False, True, False],
[-32767, False, True, False]]],
['regression: underflow then reset',
[0,
-32767,
[[False, True, False],
[False, False, False],
[False, True, False],
[False, False, True],
[False, False, False]]],
[[-32768, False, False, False],
[-32768, False, False, False],
[32767, True, False, True],
[0, True, False, False],
[0, True, False, False]]],
['control: simultaneous edges',
[1,
0,
[[True, True, False],
[False, False, False],
[True, False, False],
[True, True, False],
[False, True, False]]],
[[0, False, False, False],
[0, False, False, False],
[1, True, False, False],
[0, False, False, False],
[0, False, False, False]]],
['control: count down while up held',
[0, 5, [[True, False, False], [True, True, False], [True, False, False], [True, True, False]]],
[[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]]],
['control: scenario 1',
[0,
-2,
[[True, False, False],
[False, False, False],
[True, False, False],
[True, True, False],
[True, False, False],
[False, False, True],
[True, False, False],
[True, False, False],
[True, False, False],
[False, True, False],
[False, False, False],
[True, False, False]]],
[[-1, False, False, False],
[-1, False, False, False],
[0, True, False, False],
[-1, False, False, False],
[-1, False, False, False],
[0, True, False, False],
[1, True, False, False],
[1, True, False, False],
[1, True, False, False],
[0, True, False, False],
[0, True, False, False],
[1, True, False, False]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: underflow then reset | [[-32768, False, False, False], [-32768, False, False, False], [32767, True, False, True], [0, True, False, False], [0, True, False, False]] | [[-32768, False, False, False], [-32768, False, False, False], [32767, True, False, True], [0, True, False, False], [0, True, False, False]] | Passed |
| regression: scenario 49 | [[32767, True, False, True], [-32768, False, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False]] | [[32767, True, False, True], [-32768, False, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [32767, True, True, True], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False]] | Passed |
| control: held count input | [[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]] | [[1, False, False, False], [1, False, False, False], [1, False, False, False], [2, False, False, False]] | Passed |
| control: overflow wrap | [[32767, True, False, False], [32767, True, False, False], [-32768, False, True, False], [-32768, False, True, False], [-32767, False, True, False]] | [[32767, True, False, False], [32767, True, False, False], [-32768, False, True, False], [-32768, False, True, False], [-32767, False, True, False]] | Passed |
| control: simultaneous edges | [[0, False, False, False], [0, False, False, False], [1, True, False, False], [0, False, False, False], [0, False, False, False]] | [[0, False, False, False], [0, False, False, False], [1, True, False, False], [0, False, False, False], [0, False, False, False]] | Passed |
| control: count down while up held | [[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]] | [[6, True, False, False], [5, True, False, False], [5, True, False, False], [4, True, False, False]] | Passed |
| control: scenario 1 | [[2, True, False, False], [2, True, False, False], [2, True, False, False], [0, True, False, False], [0, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False]] | [[2, True, False, False], [2, True, False, False], [2, True, False, False], [0, True, False, False], [0, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False], [1, True, False, False]] | Passed |
| control: scenario 2 | [[32766, True, False, False], [32766, True, False, False], [32766, True, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [0, False, False, False], [0, False, False, False]] | [[32766, True, False, False], [32766, True, False, False], [32766, True, False, False], [0, False, False, False], [0, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [1, False, False, False], [0, False, False, False], [0, False, False, False]] | Passed |
SHA-256 / bbb3f3e58b9cc99ced30fd67f89718eb8f621b943a9f45cb235ed2f1b9d58550
Verification & scope
A deterministic bounded teaching model of one PLC instruction or rung pattern evaluated scan by scan. The stated contract is a stipulated toy convention, not a claim of conformance to any vendor controller or IEC 61131-3 runtime. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:41.004664+00:00.
Case digest / ddc70fe93cb31d0b2a2fcaa45c49192c9c75da7071ac53024a879e359018bb8c