perf: benchmark regional simulation scale
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
extends GutTest
|
||||
|
||||
const BenchmarkScript := preload("res://simulation/benchmark/RegionalScaleBenchmark.gd")
|
||||
|
||||
|
||||
func test_exact_regional_workload_round_trips_and_conserves_membership() -> void:
|
||||
var benchmark := BenchmarkScript.new()
|
||||
var state := benchmark.build_fixture(BenchmarkScript.FIXED_SEED)
|
||||
assert_not_null(state)
|
||||
var audit := benchmark.audit_fixture(state)
|
||||
assert_true(audit["valid"])
|
||||
assert_eq(state.get_all_locations().size(), 5)
|
||||
assert_eq(state.get_all_settlements().size(), 5)
|
||||
assert_eq(state.get_all_mobile_groups().size(), 20)
|
||||
assert_eq(audit["detailed_caravan_member_count"], 240)
|
||||
assert_eq(audit["named_person_count"], 2000)
|
||||
assert_eq(audit["cohort_resident_count"], 50000)
|
||||
assert_eq(audit["total_headcount"], 52000)
|
||||
for group in state.get_all_mobile_groups():
|
||||
assert_eq(group.get_detailed_member_ids().size(), 12)
|
||||
assert_eq(state.get_persons_in_group(group.get_group_id()).size(), 12)
|
||||
var serialized := state.to_dictionary()
|
||||
var restored := RegionalWorldState.from_dictionary(serialized)
|
||||
assert_not_null(restored)
|
||||
assert_eq(restored.to_dictionary(), serialized)
|
||||
assert_eq(restored.checksum(), state.checksum())
|
||||
assert_almost_eq(
|
||||
float(benchmark.audit_fixture(restored)["cargo_total"]), float(audit["cargo_total"]), 0.0001
|
||||
)
|
||||
|
||||
|
||||
func test_scheduler_budgets_and_three_repeats_preserve_order_and_checksum() -> void:
|
||||
var benchmark := BenchmarkScript.new()
|
||||
var budget_one := benchmark.run(1)
|
||||
var budget_eight := benchmark.run(8)
|
||||
var budget_eight_repeat_a := benchmark.run(8)
|
||||
var budget_eight_repeat_b := benchmark.run(8)
|
||||
var unlimited := benchmark.run(RegionalJobScheduler.UNLIMITED_BUDGET)
|
||||
for result in [
|
||||
budget_one, budget_eight, budget_eight_repeat_a, budget_eight_repeat_b, unlimited
|
||||
]:
|
||||
_assert_valid_result(result)
|
||||
|
||||
for result in [budget_one, unlimited, budget_eight_repeat_a, budget_eight_repeat_b]:
|
||||
assert_eq(result["execution_order"], budget_eight["execution_order"])
|
||||
assert_eq(result["execution_order_checksum"], budget_eight["execution_order_checksum"])
|
||||
assert_eq(result["final_checksum"], budget_eight["final_checksum"])
|
||||
assert_eq(result["fixture_checksum"], budget_eight["fixture_checksum"])
|
||||
assert_eq(result["regional_state_bytes"], budget_eight["regional_state_bytes"])
|
||||
assert_eq(budget_one["drain_batches"], budget_one["initial_job_count"])
|
||||
assert_eq(budget_one["max_batch_size"], 1)
|
||||
assert_eq(budget_eight["drain_batches"], ceili(float(budget_eight["initial_job_count"]) / 8.0))
|
||||
assert_eq(budget_eight["max_batch_size"], 8)
|
||||
assert_eq(unlimited["drain_batches"], 1)
|
||||
assert_eq(unlimited["max_batch_size"], unlimited["initial_job_count"])
|
||||
|
||||
|
||||
func _assert_valid_result(result: Dictionary) -> void:
|
||||
assert_false(result.is_empty())
|
||||
if result.is_empty():
|
||||
return
|
||||
assert_eq(result["schema_version"], 1)
|
||||
assert_eq(StringName(result["workload_id"]), &"regional_records_scheduler_v1")
|
||||
assert_eq(result["benchmark_scope"], "regional_data_and_scheduler_only")
|
||||
assert_false(result["rendered_throughput_measured"])
|
||||
assert_false(result["full_economy_throughput_measured"])
|
||||
assert_eq(result["seed"], 424242)
|
||||
assert_eq(result["location_count"], 5)
|
||||
assert_eq(result["settlement_count"], 5)
|
||||
assert_eq(result["caravan_count"], 20)
|
||||
assert_eq(result["detailed_members_per_caravan"], 12)
|
||||
assert_eq(result["detailed_caravan_member_count"], 240)
|
||||
assert_eq(result["named_person_count"], 2000)
|
||||
assert_eq(result["cohort_resident_count"], 50000)
|
||||
assert_eq(result["total_headcount"], 52000)
|
||||
assert_eq(result["max_active_visuals"], 40)
|
||||
assert_true(result["fixture_valid"])
|
||||
assert_true(result["roundtrip_valid"])
|
||||
assert_true(result["headcount_conserved"])
|
||||
assert_true(result["cargo_conserved"])
|
||||
assert_eq(result["initial_job_count"], 2025)
|
||||
assert_eq(result["executed_job_count"], 2025)
|
||||
assert_eq(result["backlog_initial"], 2025)
|
||||
assert_eq(result["backlog_peak"], 2025)
|
||||
assert_eq(result["backlog_final"], 0)
|
||||
assert_gt(result["regional_state_bytes"], 0)
|
||||
assert_gt(result["scheduler_state_bytes"], 0)
|
||||
for timing_key in [
|
||||
"fixture_build_usec",
|
||||
"roundtrip_usec",
|
||||
"scheduler_build_usec",
|
||||
"execution_usec",
|
||||
"elapsed_usec",
|
||||
]:
|
||||
assert_gt(result[timing_key], 0)
|
||||
assert_eq(String(result["fixture_checksum"]).length(), 64)
|
||||
assert_eq(String(result["execution_order_checksum"]).length(), 64)
|
||||
assert_eq(String(result["final_checksum"]).length(), 64)
|
||||
@@ -0,0 +1 @@
|
||||
uid://crgxogf0ldlki
|
||||
Reference in New Issue
Block a user