public void TestSelectTarget() { Type[] invalidTargets = GameService.AGENT_TYPES_ORDERED.Where(t => Game.Agents[t.Name].Allegiance == Allegiance.Enemy).ToArray(); int numTargets = 10000; List <Type> targets = new List <Type>(numTargets); NonPlayerAgent mastermind = (NonPlayerAgent)Game.Agents[nameof(Mastermind)]; NonPlayerAgent drudge = (NonPlayerAgent)Game.Agents[nameof(Drudge)]; for (int i = 0; i < numTargets; i++) { mastermind.SelectTarget(Game.Agents); drudge.SelectTarget(Game.Agents); Agent.SelectTarget(Game.Agents); Assert.IsNotNull(Agent.Target); Assert.IsFalse(invalidTargets.Contains(Agent.Target.GetType())); Assert.AreNotSame(mastermind.Target, Agent.Target); Assert.AreNotSame(drudge.Target, Agent.Target); targets.Add(Agent.Target.GetType()); Agent.Reset(); mastermind.Reset(); drudge.Reset(); } // With enough trials, every valid target should have been selected at least once Assert.AreEqual(Game.Agents.OrderedList.Where(a => !invalidTargets.Contains(a.GetType())).Count(), targets.Distinct().Count()); }
public static void TestBlockAction(Agent blocker, GameService game) { NonPlayerAgent target = (NonPlayerAgent)game.Agents[nameof(Drudge)]; NonPlayerAgent targetTarget = (NonPlayerAgent)game.Agents[nameof(Android)]; blocker.IsActing = true; blocker.Target = target; target.IsActing = true; target.SelectTarget(game.Agents); foreach (Type agentType in GameService.AGENT_TYPES_ORDERED) { game.Agents[agentType.Name].ActIfAble(); } Assert.IsTrue(target.IsBlocked); Assert.AreSame(blocker, target.Blocker); Assert.IsFalse(targetTarget.WasAttacked); Assert.IsTrue(target.Visitors.Contains(blocker.Codename)); }