Files
gamedev-the-steward/tests/deterministic_simulation_test.gd
T
admin 4463e524aa style: apply gdformat formatting across the entire project
Auto-format all GDScript files using gdformat from gdtoolkit.
This is a baseline formatting pass to ensure consistent style:

- Normalizes indentation and spacing
- Wraps long lines to 100 characters
- Removes trailing whitespace
- Standardizes blank lines between functions

68 files reformatted, 8 files left unchanged (3rd-party addon files
with parse errors excluded).
2026-07-05 23:06:23 +02:00

57 lines
1.6 KiB
GDScript

extends SceneTree
var failures: Array[String] = []
func _initialize() -> void:
call_deferred("_run")
func _run() -> void:
var clock := SimulationClock.new(1.0)
_check(clock.advance(0.4) == 0, "Clock should not tick before its interval")
_check(clock.advance(0.6) == 1, "Clock should emit one tick at its interval")
_check(clock.advance(2.4) == 2, "Clock should preserve remainder across multiple ticks")
_check(clock.elapsed_ticks == 3, "Clock should track elapsed simulation ticks")
var first := _run_scenario(424242)
var second := _run_scenario(424242)
var different := _run_scenario(424243)
_check(first == second, "The same seed and commands should produce the same checksum")
_check(first != different, "A different seed should change the scenario checksum")
if failures.is_empty():
print("[TEST] Deterministic simulation passed | checksum=", first)
quit(0)
return
for failure in failures:
push_error("[TEST] " + failure)
quit(1)
func _run_scenario(seed_value: int) -> String:
var manager: Node = load("res://simulation/SimulationManager.gd").new()
manager.simulation_seed = seed_value
manager.debug_logs = false
root.add_child(manager)
manager.set_process(false)
for step in 24:
manager.simulate_tick()
for npc in manager.npcs:
if npc.task_state == SimNPC.TASK_STATE_TRAVELING:
manager.notify_npc_arrived(npc.id)
var snapshot: Dictionary = manager.get_state_snapshot()
snapshot.erase("seed")
var checksum := JSON.stringify(snapshot).sha256_text()
manager.free()
return checksum
func _check(condition: bool, message: String) -> void:
if not condition:
failures.append(message)