from copy import deepcopy


def apply(state, event):
    state["points"] += event["delta"]


def restore(events, snapshot=None):
    if snapshot and snapshot["schema"] == 1:
        offset = snapshot["offset"]
        if not 0 <= offset <= len(events):
            raise ValueError("快照位置越界")
        state = deepcopy(snapshot["state"])
    else:
        offset, state = 0, {"points": 0}
    for event in events[offset:]:
        apply(state, event)
    return state


events = [{"delta": n} for n in (10, -2, 9, 4, -1)]
snapshot = {
    "schema": 1, "offset": 3,
    "state": restore(events[:3]),
}
assert snapshot["state"]["points"] == 17
assert restore(events, snapshot) == restore(events)
assert restore(events, {"schema": 0}) == restore(events)
print("快照加增量事件与完整回放结果一致")
