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() for id in world.catalog.entities: var expected: Array = [] for key in world.catalog.entities: if E.eq(world.catalog.entities[key].group_as, id): expected.append(key) check(E.eq(world.catalog.is_group(id), ((not expected.is_empty()))), E.add("Group classification: ", id)) check(E.eq(world.catalog.members(id), ((expected if (not expected.is_empty()) else [id]))), E.add("Group members: ", id)) var members: Array = world.catalog.members("Star") members.clear() check((not world.catalog.members("Star").is_empty()), "Returned members are independent") world.catalog.entities.N.group_as = "TestGroup" world.catalog.rebuild_group_index() check(E.eq(world.catalog.members("TestGroup"), ["N"]), "Explicit definition reload") world.catalog.entities.N.free() world.catalog.entities.erase("N") check((not world.catalog.is_group("TestGroup")), "Removed definition invalidates index") print(("Group index: %d checks, %d failures" % [checks, failures])) dispose(world) quit((1 if failures else 0))