using MultiversalDiplomacy.Adjudicate; using MultiversalDiplomacy.Adjudicate.Decision; using MultiversalDiplomacy.Model; using MultiversalDiplomacy.Orders; namespace MultiversalDiplomacyTests; public class TestAdjudicator : IPhaseAdjudicator { public static List RubberStamp(World world, List orders) { return orders.Select(o => o.Validate(ValidationReason.Valid)).ToList(); } public static List NoMoves( World world, List orders) { List results = new(); foreach (Order order in orders) { switch (order) { case MoveOrder move: { var doesMove = new DoesMove(move, null, new List()); doesMove.Update(false); results.Add(doesMove); var dislodged = new IsDislodged(move, new List()); dislodged.Update(false); results.Add(dislodged); break; } default: { if (order is not UnitOrder unitOrder) { throw new ArgumentException(order.GetType().Name); } var dislodged = new IsDislodged(unitOrder, new List()); dislodged.Update(false); results.Add(dislodged); break; } } } return results; } public static World Noop(World world, List decisions) => world; private static List NoValidate(World world, List orders) => throw new NotImplementedException(); private static List NoAdjudicate(World world, List orders) => throw new NotImplementedException(); private static World NoUpdate(World world, List decisions) => throw new NotImplementedException(); private Func, List> ValidateOrdersCallback; private Func, List> AdjudicateOrdersCallback; private Func, World> UpdateWorldCallback; public TestAdjudicator( Func, List>? validate = null, Func, List>? adjudicate = null, Func, World>? update = null) { this.ValidateOrdersCallback = validate ?? NoValidate; this.AdjudicateOrdersCallback = adjudicate ?? NoAdjudicate; this.UpdateWorldCallback = update ?? NoUpdate; } public List ValidateOrders(World world, List orders) => this.ValidateOrdersCallback.Invoke(world, orders); public List AdjudicateOrders(World world, List orders) => this.AdjudicateOrdersCallback(world, orders); public World UpdateWorld(World world, List decisions) => this.UpdateWorldCallback(world, decisions); }