extends SceneTree const Reserve = preload("res://scripts/mana/mana_reserve_balance.gd") var checks := 0 var failures := 0 func expect(ok: bool, message: String) -> void: checks += 1 if not ok: failures += 1 push_error(message) func _initialize() -> void: var reserve = Reserve.new() expect(not reserve.advance_to(1, 0, 0)[&"ok"], "uninitialized updates rejected") expect(not reserve.initialize(3, 2, 0)[&"ok"], "invalid initial capacity rejected") expect(reserve.initialize(7, 10, 360)[&"ok"], "caller supplies all initial values") var flow: Dictionary = reserve.advance_to(370, 5, 8)[&"flow"] expect(flow[&"consumed"] == 8 and flow[&"after"] == 4 and flow[&"shortage"] == 0, "generation funds demand before reserve changes") var saved: Dictionary = reserve.create_snapshot() expect(reserve.advance_to(370, 5, 8)[&"replayed"] and reserve.create_snapshot() == saved, "same boundary cannot consume twice") expect(not reserve.advance_to(370, 5, 9)[&"ok"] and reserve.create_snapshot() == saved, "conflicting boundary replay rejected atomically") flow = reserve.advance_to(380, 0, 6)[&"flow"] expect(flow[&"consumed"] == 4 and flow[&"shortage"] == 2 and reserve.is_depleted(), "short supply depletes exactly without negative reserve") var depleted: Dictionary = reserve.create_snapshot() var resumed = Reserve.new() expect(resumed.restore_snapshot(depleted) and resumed.is_depleted(), "depletion survives save restore") flow = resumed.advance_to(390, 3, 0)[&"flow"] expect(flow[&"after"] == 3 and not resumed.is_depleted(), "supply replenishes stopped reserve") flow = resumed.advance_to(400, 10, 0)[&"flow"] expect(flow[&"after"] == 10 and flow[&"overflow"] == 3, "overflow explicitly accounts for capacity cap") flow = resumed.advance_to(410, 9, 12)[&"flow"] expect(flow[&"after"] == 7 and flow[&"overflow"] == 0 and flow[&"consumed"] == 12, "full storage does not discard supply needed by same-interval demand") for bad: Variant in [-1, 1.5, "3", true, Reserve.LIMIT + 1]: saved = resumed.create_snapshot() expect(not resumed.advance_to(420, bad, 1)[&"ok"] and resumed.create_snapshot() == saved, "invalid supply rejected without state change: %s" % bad) var canonical: Dictionary = resumed.create_snapshot() for field: String in ["amount", "capacity", "minute", "version"]: var corrupt := canonical.duplicate(true) corrupt[field] = -1 expect(not resumed.restore_snapshot(corrupt) and resumed.create_snapshot() == canonical, "corrupt %s rejected atomically" % field) for field: String in ["consumed", "shortage", "overflow", "after", "before", "to_minute"]: var corrupt := canonical.duplicate(true) corrupt[&"last_flow"][field] += 1 expect(not resumed.restore_snapshot(corrupt) and resumed.create_snapshot() == canonical, "flow conservation tampering rejected: " + field) var extra := canonical.duplicate(true) extra[&"unknown"] = 1 expect(not resumed.restore_snapshot(extra), "unknown schema field rejected") var restored = Reserve.new() expect(restored.restore_snapshot(canonical), "valid checkpoint restores") expect(restored.advance_to(420, 2, 9) == resumed.advance_to(420, 2, 9), "restored next boundary reproduces same flow") expect(restored.create_snapshot() == resumed.create_snapshot() and restored.is_depleted(), "exact zero depletion and replay state agree") var limit = Reserve.new() expect(limit.initialize(Reserve.LIMIT, Reserve.LIMIT, 0)[&"ok"], "upper bound initialization") flow = limit.advance_to(1, Reserve.LIMIT, 0)[&"flow"] expect(flow[&"overflow"] == Reserve.LIMIT and limit.get_amount() == Reserve.LIMIT, "large values conserve without wrap") expect(restored.restore_snapshot(limit.create_snapshot()), "large flow snapshot accepted") print("%s: %d checks" % ["PASS" if failures == 0 else "FAIL", checks]) quit(failures)