public void TestCalculateBonusShortHighCard()
        {
            // assign
            var data   = InputReader.ReadInput("2d 7h Ac");
            var result = new byte[3];

            // act
            var       objectUnderTest = new LastTurnInPosition();
            LineValue power           = objectUnderTest.SortLine(data, result, 0, 3);
            decimal   score           = objectUnderTest.CalculateBonusShort(result, power);

            // assert
            Assert.AreEqual(0, score);
        }
        public void TestSortLineShortHighCard()
        {
            // assign
            var data   = InputReader.ReadInput("Jd Qh Ac");
            var result = new byte[3];

            // act
            var       objectUnderTest = new LastTurnInPosition();
            LineValue power           = objectUnderTest.SortLine(data, result, 0, 3);

            // assert
            Assert.AreEqual(LineValue.HighCard, power);
            Assert.AreEqual(13, result[0]);
            Assert.AreEqual(11, result[1]);
            Assert.AreEqual(10, result[2]);
        }
        public void TestCompareOneAnotherEqualLen()
        {
            // assign
            var oneHand     = InputReader.ReadInput("Ah Qh Jh 5d 4d");
            var otherHand   = InputReader.ReadInput("Ac Jc Qc 5s 4c");
            var oneSorted   = new byte[5];
            var otherSorted = new byte[5];

            var       objectUnderTest = new LastTurnInPosition();
            LineValue onePower        = objectUnderTest.SortLine(oneHand, oneSorted, 0, 5);
            LineValue otherPower      = objectUnderTest.SortLine(otherHand, otherSorted, 0, 5);

            // act
            int result = objectUnderTest.CompareOneOther(oneSorted, otherSorted, onePower, otherPower);

            // assert
            Assert.IsTrue(result == 0);
        }
        public void TestSortLineFlash()
        {
            // assign
            var data   = InputReader.ReadInput("2s 3h Qd 2d Jd Kd Ad 3s");
            var result = new byte[5];

            // act
            var       objectUnderTest = new LastTurnInPosition();
            LineValue power           = objectUnderTest.SortLine(data, result, 2, 5);

            // assert
            Assert.AreEqual(LineValue.Flash, power);
            Assert.AreEqual(13, result[0]);
            Assert.AreEqual(12, result[1]);
            Assert.AreEqual(11, result[2]);
            Assert.AreEqual(10, result[3]);
            Assert.AreEqual(1, result[4]);
        }
        public void TestAgainstEmptyWithFantazy()
        {
            // assign
            var heroHand    = InputReader.ReadInput("Qh 9s ? Ts Qs As 6s ? Jh Js Jd Kh Ks");
            var villainHand = InputReader.ReadInput("2h 3s 4d 2s 3h 4c 5c 7d 2d 3d 4s 5d 8s");
            var triple      = InputReader.ReadInput("Qs Tc Td");

            int outFirstIdx;
            int outSecondIdx;

            // act
            var objectUnderTest = new LastTurnInPosition();
            var score           = objectUnderTest.Work(villainHand, heroHand, triple, out outFirstIdx, out outSecondIdx);

            // assert
            Assert.AreEqual(21.5M, score);
            Assert.AreEqual(0, outFirstIdx);
        }
        public void TestCompareOneAnotherVariousPower()
        {
            // assign
            var oneHand     = InputReader.ReadInput("Qh Qd Jd 2c Js");
            var otherHand   = InputReader.ReadInput("4c 8h 5s 6c 7d");
            var oneSorted   = new byte[5];
            var otherSorted = new byte[5];

            var       objectUnderTest = new LastTurnInPosition();
            LineValue onePower        = objectUnderTest.SortLine(oneHand, oneSorted, 0, 5);
            LineValue otherPower      = objectUnderTest.SortLine(otherHand, otherSorted, 0, 5);

            // act
            int result = objectUnderTest.CompareOneOther(oneSorted, otherSorted, onePower, otherPower);

            // assert
            Assert.IsTrue(result < 0);
        }
        public void TestBonusAgainstThreeLineWin2()
        {
            // assign
            var heroHand    = InputReader.ReadInput("Qh 9s 6h Ts Qs As 6s ? Jh Jc Jd Kh ?");
            var villainHand = InputReader.ReadInput("2h 3s 4s 2s 3h 4c 5c 7d 2d 3d 4d 5d 8d");
            var triple      = InputReader.ReadInput("Ks Tc Td");

            int outFirstIdx;
            int outSecondIdx;

            // act
            var objectUnderTest = new LastTurnInPosition();
            var score           = objectUnderTest.Work(villainHand, heroHand, triple, out outFirstIdx, out outSecondIdx);

            // assert
            Assert.AreEqual(12M, score);
            Assert.AreEqual(0, outSecondIdx);
        }
        public void TestAgainstEmptyToStayAlive()
        {
            // assign
            var heroHand    = InputReader.ReadInput("9h 9s ? Th Ts Kd 6s ? Jh Js Jd Qh Qs");
            var villainHand = InputReader.ReadInput("2h 3s 4d 2s 3h 4c 5c 7d 2d 3d 4s 5d 8s");
            var triple      = InputReader.ReadInput("9d 6d Ad");

            int outFirstIdx;
            int outSecondIdx;

            // act
            var objectUnderTest = new LastTurnInPosition();
            var score           = objectUnderTest.Work(villainHand, heroHand, triple, out outFirstIdx, out outSecondIdx);

            // assert
            Assert.AreEqual(16M, score);
            Assert.AreNotEqual(0, outFirstIdx);
        }
        public void TestBonusAgainstOneLineWin()
        {
            // assign
            var heroHand    = InputReader.ReadInput("2h 4d ? Jh 8d Td Qs Ks 4h 5h 6h 7h ?");
            var villainHand = InputReader.ReadInput("2h 3s Jd Qd Qc 4c 5c 7d 3h 3d 3c 5d 5s");
            var triple      = InputReader.ReadInput("Ah 6c 7c");

            int outFirstIdx;
            int outSecondIdx;

            // act
            var objectUnderTest = new LastTurnInPosition();
            var score           = objectUnderTest.Work(villainHand, heroHand, triple, out outFirstIdx, out outSecondIdx);

            // assert
            Assert.AreEqual(-7, score);
            Assert.AreEqual(0, outFirstIdx);
        }
        public void TestSortLineHighCard()
        {
            // assign
            var data   = InputReader.ReadInput("5h 6d Ks Ac 3d");
            var result = new byte[5];

            // act
            var       objectUnderTest = new LastTurnInPosition();
            LineValue power           = objectUnderTest.SortLine(data, result, 0, 5);

            // assert
            Assert.AreEqual(LineValue.HighCard, power);
            Assert.AreEqual(13, result[0]);
            Assert.AreEqual(12, result[1]);
            Assert.AreEqual(5, result[2]);
            Assert.AreEqual(4, result[3]);
            Assert.AreEqual(2, result[4]);
        }
        public void TestSortLineSet()
        {
            // assign
            var data   = InputReader.ReadInput("5h 6d 2s 2d Ac 2c 3s");
            var result = new byte[5];

            // act
            var       objectUnderTest = new LastTurnInPosition();
            LineValue power           = objectUnderTest.SortLine(data, result, 2, 5);

            // assert
            Assert.AreEqual(LineValue.Set, power);
            Assert.AreEqual(1, result[0]);
            Assert.AreEqual(1, result[1]);
            Assert.AreEqual(1, result[2]);
            Assert.AreEqual(13, result[3]);
            Assert.AreEqual(2, result[4]);
        }
        public void TestSortLineStraight()
        {
            // assign
            var data   = InputReader.ReadInput("5h 6d 4s 3d 2c As 3s");
            var result = new byte[5];

            // act
            var       objectUnderTest = new LastTurnInPosition();
            LineValue power           = objectUnderTest.SortLine(data, result, 0, 5);

            // assert
            Assert.AreEqual(LineValue.Straight, power);
            Assert.AreEqual(5, result[0]);
            Assert.AreEqual(4, result[1]);
            Assert.AreEqual(3, result[2]);
            Assert.AreEqual(2, result[3]);
            Assert.AreEqual(1, result[4]);
        }
        public void TestCompareOneAnotherOnPower()
        {
            // assign
            var oneHand     = InputReader.ReadInput("Ah Ad Ac 3h 4d");
            var otherHand   = InputReader.ReadInput("7s 5c 5s 5d 5h");
            var oneSorted   = new byte[5];
            var otherSorted = new byte[5];

            var       objectUnderTest = new LastTurnInPosition();
            LineValue onePower        = objectUnderTest.SortLine(oneHand, oneSorted, 0, 5);
            LineValue otherPower      = objectUnderTest.SortLine(otherHand, otherSorted, 0, 5);

            // act
            int result = objectUnderTest.CompareOneOther(oneSorted, otherSorted, onePower, otherPower);

            // assert
            Assert.IsTrue(result < 0);
        }
        public void TestSortLineStraightFlush()
        {
            // assign
            var data   = InputReader.ReadInput("2s 2d 3d 4d 5d Ad 3s");
            var result = new byte[5];

            // act
            var       objectUnderTest = new LastTurnInPosition();
            LineValue power           = objectUnderTest.SortLine(data, result, 1, 5);

            // assert
            Assert.AreEqual(LineValue.StraightFlash, power);
            Assert.AreEqual(4, result[0]);
            Assert.AreEqual(3, result[1]);
            Assert.AreEqual(2, result[2]);
            Assert.AreEqual(1, result[3]);
            Assert.AreEqual(13, result[4]);
        }
        public void TestAgainstDead()
        {
            // assign
            var heroHand    = InputReader.ReadInput("Ah Ad 6h Ts Qs As 6s ? Jh Jc Jd Kh ?");
            var villainHand = InputReader.ReadInput("Ks Kc 4d Qd Qc 4c 5c 7d 3h 3d 3c 5d 8s");
            var triple      = InputReader.ReadInput("Js Ac Td");

            int outFirstIdx;
            int outSecondIdx;

            // act
            var objectUnderTest = new LastTurnInPosition();
            var score           = objectUnderTest.Work(villainHand, heroHand, triple, out outFirstIdx, out outSecondIdx);

            // assert
            Assert.AreEqual(16M, score);
            Assert.AreEqual(1, outFirstIdx);
            Assert.AreEqual(0, outSecondIdx);
        }
        public void TestIsHandDeadWhenAliveVariousCombo()
        {
            // assign
            var shortHand    = InputReader.ReadInput("Qh Qd Jd");
            var shortSorted  = new byte[3];
            var middleHand   = InputReader.ReadInput("Ah Kd Qs Jd Tc");
            var middleSorted = new byte[5];
            var topHand      = InputReader.ReadInput("6d 6c 6s 2s 2c");
            var topSorted    = new byte[5];

            var       objectUnderTest = new LastTurnInPosition();
            LineValue shortPower      = objectUnderTest.SortLine(shortHand, shortSorted, 0, 3);
            LineValue middlePower     = objectUnderTest.SortLine(middleHand, middleSorted, 0, 5);
            LineValue topPower        = objectUnderTest.SortLine(topHand, topSorted, 0, 5);

            // act
            var isDead = objectUnderTest.IsHandDead(shortSorted, middleSorted, topSorted, shortPower, middlePower, topPower);

            // assert
            Assert.IsFalse(isDead);
        }
        public void TestIsHandDeadWhenLiveByEqual()
        {
            // assign
            var shortHand    = InputReader.ReadInput("Qh Jd Ts");
            var shortSorted  = new byte[3];
            var middleHand   = InputReader.ReadInput("Qs Jc Td 4c 3s");
            var middleSorted = new byte[5];
            var topHand      = InputReader.ReadInput("Qd Js Th 4s 3c");
            var topSorted    = new byte[5];

            var       objectUnderTest = new LastTurnInPosition();
            LineValue shortPower      = objectUnderTest.SortLine(shortHand, shortSorted, 0, 3);
            LineValue middlePower     = objectUnderTest.SortLine(middleHand, middleSorted, 0, 5);
            LineValue topPower        = objectUnderTest.SortLine(topHand, topSorted, 0, 5);

            // act
            var isDead = objectUnderTest.IsHandDead(shortSorted, middleSorted, topSorted, shortPower, middlePower, topPower);

            // assert
            Assert.IsFalse(isDead);
        }
        public void TestIsHandDeadWhenDeadByHighCardKicker()
        {
            // assign
            var shortHand    = InputReader.ReadInput("Qh Ad Jd");
            var shortSorted  = new byte[3];
            var middleHand   = InputReader.ReadInput("Qs 7c Jd Tc 9s");
            var middleSorted = new byte[5];
            var topHand      = InputReader.ReadInput("Kd Kc 6s 2s 3c");
            var topSorted    = new byte[5];

            var       objectUnderTest = new LastTurnInPosition();
            LineValue shortPower      = objectUnderTest.SortLine(shortHand, shortSorted, 0, 3);
            LineValue middlePower     = objectUnderTest.SortLine(middleHand, middleSorted, 0, 5);
            LineValue topPower        = objectUnderTest.SortLine(topHand, topSorted, 0, 5);

            // act
            var isDead = objectUnderTest.IsHandDead(shortSorted, middleSorted, topSorted, shortPower, middlePower, topPower);

            // assert
            Assert.IsTrue(isDead);
        }
        public void TestScoreCompareAliveVsDead()
        {
            // assign
            var heroShortHand    = InputReader.ReadInput("Qh Jd Ts");
            var heroShortSorted  = new byte[3];
            var heroMiddleHand   = InputReader.ReadInput("Ac 2s As 2d 3h");
            var heroMiddleSorted = new byte[5];
            var heroTopHand      = InputReader.ReadInput("Th 9d 9c Tc Ts");
            var heroTopSorted    = new byte[5];

            var villainShortHand    = InputReader.ReadInput("8d 8s 2c");
            var villainShortSorted  = new byte[3];
            var villainMiddleHand   = InputReader.ReadInput("7d 6c 7s 5c 3h");
            var villainMiddleSorted = new byte[5];
            var villainTopHand      = InputReader.ReadInput("Ad Kd Qd Jd Td");
            var villainTopSorted    = new byte[5];

            var       objectUnderTest    = new LastTurnInPosition();
            LineValue heroShortPower     = objectUnderTest.SortLine(heroShortHand, heroShortSorted, 0, 3);
            LineValue heroMiddlePower    = objectUnderTest.SortLine(heroMiddleHand, heroMiddleSorted, 0, 5);
            LineValue heroTopPower       = objectUnderTest.SortLine(heroTopHand, heroTopSorted, 0, 5);
            LineValue villainShortPower  = objectUnderTest.SortLine(villainShortHand, villainShortSorted, 0, 3);
            LineValue villainMiddlePower = objectUnderTest.SortLine(villainMiddleHand, villainMiddleSorted, 0, 5);
            LineValue villainTopPower    = objectUnderTest.SortLine(villainTopHand, villainTopSorted, 0, 5);

            var isHeroHandDead = objectUnderTest.IsHandDead(heroShortSorted, heroMiddleSorted, heroTopSorted,
                                                            heroShortPower, heroMiddlePower, heroTopPower);
            var isVillainHandDead = objectUnderTest.IsHandDead(villainShortSorted, villainMiddleSorted, villainTopSorted,
                                                               villainShortPower, villainMiddlePower, villainTopPower);

            //act
            var score = objectUnderTest.ScoreCompare(isHeroHandDead, isVillainHandDead, heroShortSorted, heroMiddleSorted,
                                                     heroTopSorted, heroShortPower, heroMiddlePower, heroTopPower, villainShortSorted, villainMiddleSorted,
                                                     villainTopSorted, villainShortPower, villainMiddlePower, villainTopPower);

            // assert
            Assert.AreEqual(6, score);
        }