# -*- coding: utf-8 -*-
# 只读本目录合成输入，不联网、不修改设备。
import csv
from pathlib import Path
rows=list(csv.DictReader((Path(__file__).parent/'synthetic.csv').open(encoding='utf-8-sig')))
state='online'; fail=ok=0; changes=[]; visible=[]
for row in rows:
    v=row['input']; change='none'
    if v=='unknown':
        fail=ok=0
    elif state=='online':
        fail=fail+1 if v=='miss' else 0
        if fail>=3: state='offline'; ok=0; change='offline'
    else:
        ok=ok+1 if v=='success' else 0
        if ok>=2: state='online'; fail=0; change='recovered'
    assert change==row['expected_transition'], (row,change)
    if change!='none': changes.append(change)
    visible.append('unknown' if v=='unknown' else state)
assert changes==['offline','recovered']
assert visible[-1]=='unknown'
print('合成心跳状态机通过：离线1次，恢复1次；unknown不产生恢复。')
