public void BuriedCardSelector_BuryCardsByEasiestToRetireLowestRank_RetireNothing()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.N9_SPADES,
                SheepCard.N8_SPADES,
                SheepCard.N7_SPADES,
                SheepCard.N7_CLUBS,
                SheepCard.KING_CLUBS,
                SheepCard.N8_CLUBS,
                SheepCard.KING_DIAMONDS,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);
            var actual   = selector.CardsToBury;

            Assert.IsTrue(actual.All(c => CardUtil.GetSuit(c) == Suit.SPADES) || actual.All(c => CardUtil.GetSuit(c) == Suit.CLUBS));
        }
        public void BuriedCardSelector_Constructor()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.JACK_DIAMONDS,
                SheepCard.ACE_HEARTS,
                SheepCard.N10_SPADES,
                SheepCard.N10_HEARTS,
                SheepCard.N7_SPADES,
                SheepCard.KING_HEARTS,
                SheepCard.ACE_CLUBS,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);

            Assert.AreEqual(3, selector.CardsPerSuit[Suit.HEARTS]);
            Assert.AreEqual(2, selector.CardsPerSuit[Suit.SPADES]);
            Assert.AreEqual(1, selector.CardsPerSuit[Suit.CLUBS]);
        }
        public void BuriedCardSelector_BuryAcesAndTensFromSmallestFails()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.JACK_DIAMONDS,
                SheepCard.ACE_HEARTS,
                SheepCard.N7_SPADES,
                SheepCard.N10_CLUBS,
                SheepCard.N8_SPADES,
                SheepCard.KING_DIAMONDS,
                SheepCard.N9_CLUBS,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);
            var expected = new List <SheepCard>()
            {
                SheepCard.N10_CLUBS, SheepCard.ACE_HEARTS
            };
            var actual = selector.CardsToBury;

            CollectionAssert.AreEquivalent(expected, actual);
        }
        public void BuriedCardSelector_RetireOneSuitsWithAceAndTen()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.JACK_DIAMONDS,
                SheepCard.ACE_HEARTS,
                SheepCard.N10_SPADES,
                SheepCard.N10_CLUBS,
                SheepCard.ACE_SPADES,
                SheepCard.KING_DIAMONDS,
                SheepCard.ACE_CLUBS,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);
            var expected = new List <SheepCard>()
            {
                SheepCard.N10_SPADES, SheepCard.ACE_SPADES
            };
            var actual = selector.CardsToBury;

            CollectionAssert.AreEquivalent(expected, actual);
        }
        public void BuriedCardSelector_BuryCardsByLowestRank_AllTrump()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.N8_DIAMONDS,
                SheepCard.N7_DIAMONDS,
                SheepCard.QUEEN_HEARTS,
                SheepCard.JACK_SPADES,
                SheepCard.QUEEN_DIAMONDS,
                SheepCard.ACE_DIAMONDS,
                SheepCard.KING_DIAMONDS,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);
            var expected = new List <SheepCard>()
            {
                SheepCard.N8_DIAMONDS, SheepCard.N7_DIAMONDS
            };
            var actual = selector.CardsToBury;

            CollectionAssert.AreEquivalent(expected, actual);
        }
        public void BuriedCardSelector_RetireOneFailSuits()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.JACK_DIAMONDS,
                SheepCard.N7_CLUBS,
                SheepCard.N7_SPADES,
                SheepCard.KING_CLUBS,
                SheepCard.N8_SPADES,
                SheepCard.KING_DIAMONDS,
                SheepCard.KING_SPADES,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);
            var expected = new List <SheepCard>()
            {
                SheepCard.N7_CLUBS, SheepCard.KING_CLUBS
            };
            var actual = selector.CardsToBury;

            CollectionAssert.AreEquivalent(expected, actual, "There is one fail suits for which we have exactly two cards.");
        }
        public void BuriedCardSelector_RetireOneFailSuitsWithOneAceOrTen()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.JACK_DIAMONDS,
                SheepCard.N7_CLUBS,
                SheepCard.N7_SPADES,
                SheepCard.N10_CLUBS,
                SheepCard.N8_SPADES,
                SheepCard.KING_DIAMONDS,
                SheepCard.KING_SPADES,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);
            var expected = new List <SheepCard>()
            {
                SheepCard.N7_CLUBS, SheepCard.N10_CLUBS
            };
            var actual = selector.CardsToBury;

            CollectionAssert.AreEquivalent(expected, actual, "We can find one suit to retire, and also bury points");
        }
        public void BuriedCardSelector_BuryCardsByEasiestToRetireLowestRank_RetireOneButNotOther()
        {
            var cards = new List <SheepCard>()
            {
                SheepCard.N7_SPADES,
                SheepCard.JACK_HEARTS,
                SheepCard.N8_DIAMONDS,
                SheepCard.N8_SPADES,
                SheepCard.KING_HEARTS,
                SheepCard.KING_DIAMONDS,
                SheepCard.N9_SPADES,
                SheepCard.QUEEN_CLUBS
            };
            var selector = new BuriedCardSelector(cards);
            var expected = new List <SheepCard>()
            {
                SheepCard.KING_HEARTS, SheepCard.KING_CLUBS
            };
            var actual = selector.CardsToBury;

            Assert.IsTrue(actual.Contains(SheepCard.KING_HEARTS));
            Assert.IsTrue(actual.Any(c => CardUtil.GetSuit(c) == Suit.SPADES));
        }