public async Task TryAllTest() { var server = StartServerDummyTicker(); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency <IMapManager>(); var entityManager = server.ResolveDependency <IEntityManager>(); var prototypeManager = server.ResolveDependency <IPrototypeManager>(); foreach (var reactionPrototype in prototypeManager.EnumeratePrototypes <ReactionPrototype>()) { //since i have no clue how to isolate each loop assert-wise im just gonna throw this one in for good measure Console.WriteLine($"Testing {reactionPrototype.ID}"); IEntity beaker; SolutionContainerComponent component = null; server.Assert(() => { mapManager.CreateNewMapEntity(MapId.Nullspace); beaker = entityManager.SpawnEntity("BluespaceBeaker", MapCoordinates.Nullspace); Assert.That(beaker.TryGetComponent(out component)); foreach (var(id, reactant) in reactionPrototype.Reactants) { Assert.That(component.TryAddReagent(id, reactant.Amount, out var quantity)); Assert.That(reactant.Amount, Is.EqualTo(quantity)); } }); await server.WaitIdleAsync(); server.Assert(() => { //you just got linq'd fool //(i'm sorry) var foundProductsMap = reactionPrototype.Products .Concat(reactionPrototype.Reactants.Where(x => x.Value.Catalyst).ToDictionary(x => x.Key, x => x.Value.Amount)) .ToDictionary(x => x, x => false); foreach (var reagent in component.Solution.Contents) { Assert.That(foundProductsMap.TryFirstOrNull(x => x.Key.Key == reagent.ReagentId && x.Key.Value == reagent.Quantity, out var foundProduct)); foundProductsMap[foundProduct.Value.Key] = true; } Assert.That(foundProductsMap.All(x => x.Value)); }); } }