c42940369a
- Updated `enforce_capacity` function to accept an optional `physical` parameter, allowing for more flexible handling of physical amounts. - Modified `initialize_life_batches` to return physical amounts after enforcing capacity, improving data flow. - Enhanced `try_production` to utilize shared physical amounts, reducing redundant calculations. - Adjusted `stellar_environment` to accept an optional `quantities` parameter, streamlining its usage. - Added new test results for physical totals to validate performance improvements across various scenarios.
78 lines
4.1 KiB
GDScript
78 lines
4.1 KiB
GDScript
extends SceneTree
|
|
const E = preload("res://world/owniverse/math/exact.gd")
|
|
const Clock = preload("res://world/owniverse/simulation_time.gd")
|
|
var checks: int = 0
|
|
var failures: int = 0
|
|
|
|
func _initialize() -> void:
|
|
call_deferred("run")
|
|
|
|
func check(condition: bool, message: String) -> void:
|
|
checks = E.add(checks, 1)
|
|
if (not condition):
|
|
failures = E.add(failures, 1)
|
|
push_error(message)
|
|
|
|
func fixture():
|
|
var world = load("res://world/owniverse/owniverse.gd").new()
|
|
var global: Node = root.get_node("Global")
|
|
for id in global.OwniverseEntities:
|
|
var entity = load("res://world/owniverse/owniverse_entity.gd").new(global.OwniverseEntities[id])
|
|
world.catalog.entities[id] = entity
|
|
world.state.amount[id] = 0
|
|
world.state.stats.total_amount[id] = 0
|
|
if E.ne(entity.group_as, ""):
|
|
world.state.amount[entity.group_as] = 0
|
|
world.state.stats.total_amount[entity.group_as] = 0
|
|
world.catalog.entities["N"].life_product = {}
|
|
world.catalog.entities["N"].product_per_year_type = "H"
|
|
world.catalog.entities["N"].product_per_year_amount = 10
|
|
world.catalog.entities["N"].auto = 0
|
|
world.state.amount.N = 1
|
|
return world
|
|
|
|
func dispose(world) -> void:
|
|
for entity in world.catalog.entities.values():
|
|
entity.free()
|
|
world.free()
|
|
|
|
func run() -> void:
|
|
var world = fixture()
|
|
world.evolution.initialize_life_batches()
|
|
world.catalog.entities.N.cost = {"H": 2}
|
|
world.catalog.entities.N.bind = {"S": 3}
|
|
world.state.amount.H = 10
|
|
world.state.amount.S = 0
|
|
check(E.eq(world.production.calculate_max_producible(world.catalog.entities.N), 0), "Default maximum respects missing bindings")
|
|
world.state.amount.S = 30
|
|
check(E.eq(world.production.calculate_max_producible(world.catalog.entities.N), 5), "Default maximum uses recipe resources without an oversized sentinel")
|
|
check(E.eq(world.production.calculate_max_producible(world.catalog.entities.N, 2), 2), "Explicit production limit is preserved")
|
|
world.state.amount.H = E.of("1e27")
|
|
world.state.amount.S = E.of("1e27")
|
|
check(E.eq(world.production.calculate_max_producible(world.catalog.entities.N), E.floor_value(E.divide(E.of("1e27"), 3))), "Default maximum at E27 retains integer precision")
|
|
world.state.amount.BH25 = 4
|
|
check(E.eq(world.production.calculate_max_producible(world.catalog.entities.SMBH), world.production.smbh_available()), "Default SMBH maximum uses available black-hole mass")
|
|
world.state.amount.BH25 = 0
|
|
check(E.eq(world.production.calculate_max_producible(world.catalog.entities.SMBH), 0), "Empty SMBH maximum is zero")
|
|
world.state.amount.H = 10
|
|
world.state.amount.S = 0
|
|
world.state.auto_resources = {"H": 10}
|
|
world.state.batches.H = [{"amount": 10, "start_year": 1, "end_year": 2}]
|
|
var before: Dictionary = world.state.duplicate(true)
|
|
var physical: Dictionary = world.ledger.physical_amounts(world.state)
|
|
var frozen_physical: Dictionary = physical.duplicate()
|
|
check((not world.production.try_production(world.state, world.catalog.entities.N, 1, true, physical)), "Binding failure rejects production")
|
|
check(E.eq(physical, frozen_physical), "Failed production preserves the shared quantity snapshot")
|
|
check(E.eq(world.state, before), "Failure preserves costs, batches and budget")
|
|
world.state.amount.S = 10
|
|
physical = world.ledger.physical_amounts(world.state)
|
|
var old_batches: Array = world.state.batches.H
|
|
check(world.production.try_production(world.state, world.catalog.entities.N, 2, true, physical), "Funded production succeeds")
|
|
check(E.eq(physical, world.ledger.physical_amounts(world.state)), "Successful production updates exact totals without changing bound-resource totals")
|
|
check((E.eq(world.state.amount.H, 6) and E.eq(world.state.amount.S, 4)), "Exact cost and binding")
|
|
check(E.eq(world.state.auto_resources.H, 6), "Exact automatic budget")
|
|
check((E.eq(old_batches[0].amount, 10) and E.eq(world.state.batches.H[0].amount, 6)), "Consumed batches isolated")
|
|
print(("Transaction: %d checks, %d failures" % [checks, failures]))
|
|
dispose(world)
|
|
quit((1 if failures else 0))
|