private void DetectionFailure(ArchetypeConditionType condition, string[] archetypeCards, ArchetypeColor archetypeColor, string[] testMainboard, string[] testSideboard) { var archetype = new ArchetypeSpecific() { Conditions = new ArchetypeCondition[] { new ArchetypeCondition() { Type = condition, Cards = archetypeCards } } }; var result = ArchetypeAnalyzer.Detect( testMainboard.Select(c => new Card() { Count = 4, Name = c }).ToArray(), testSideboard.Select(c => new Card() { Count = 4, Name = c }).ToArray(), new ArchetypeFormat { Archetypes = new Archetype[] { archetype }, Lands = _modern.Lands, NonLands = _modern.NonLands }); result.Matches.Should().HaveCount(0); }
private static bool Test(Card[] mainboardCards, Card[] sideboardCards, ArchetypeColor color, ArchetypeSpecific archetypeData) { foreach (var condition in archetypeData.Conditions) { switch (condition.Type) { case ArchetypeConditionType.InMainboard: if (!mainboardCards.Any(c => c.Name == condition.Cards[0])) { return(false); } break; case ArchetypeConditionType.InSideboard: if (!sideboardCards.Any(c => c.Name == condition.Cards[0])) { return(false); } break; case ArchetypeConditionType.InMainOrSideboard: if (!mainboardCards.Any(c => c.Name == condition.Cards[0]) && !sideboardCards.Any(c => c.Name == condition.Cards[0])) { return(false); } break; case ArchetypeConditionType.OneOrMoreInMainboard: if (!mainboardCards.Any(c => condition.Cards.Contains(c.Name))) { return(false); } break; case ArchetypeConditionType.OneOrMoreInSideboard: if (!sideboardCards.Any(c => condition.Cards.Contains(c.Name))) { return(false); } break; case ArchetypeConditionType.OneOrMoreInMainOrSideboard: if (!mainboardCards.Any(c => condition.Cards.Contains(c.Name)) && !sideboardCards.Any(c => condition.Cards.Contains(c.Name))) { return(false); } break; case ArchetypeConditionType.TwoOrMoreInMainboard: if (mainboardCards.Where(c => condition.Cards.Contains(c.Name)).Count() < 2) { return(false); } break; case ArchetypeConditionType.TwoOrMoreInSideboard: if (sideboardCards.Where(c => condition.Cards.Contains(c.Name)).Count() < 2) { return(false); } break; case ArchetypeConditionType.TwoOrMoreInMainOrSideboard: if ((mainboardCards.Where(c => condition.Cards.Contains(c.Name)).Count() + sideboardCards.Where(c => condition.Cards.Contains(c.Name)).Count()) < 2) { return(false); } break; case ArchetypeConditionType.DoesNotContain: if (mainboardCards.Any(c => c.Name == condition.Cards[0]) || sideboardCards.Any(c => c.Name == condition.Cards[0])) { return(false); } break; case ArchetypeConditionType.DoesNotContainMainboard: if (mainboardCards.Any(c => c.Name == condition.Cards[0])) { return(false); } break; case ArchetypeConditionType.DoesNotContainSideboard: if (sideboardCards.Any(c => c.Name == condition.Cards[0])) { return(false); } break; default: throw new NotImplementedException(); } } return(true); }