예제 #1
0
        public void CalculateScoreForFrameTest_PerfectGameOfOnlyStrikes()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>();

            for (int i = 0; i < 9; i++)
            {
                playedFrames.Add(BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }));
            }
            playedFrames.Add(BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 10, 10 }));

            int totalScore = 0;

            int[] expectedResults = new[] { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 };
            for (int i = 0; i < playedFrames.Count; i++)
            {
                // act
                int frameScore = scoreCalculator.CalculateScoreForSingleFrame(i + 1, playedFrames);
                totalScore += frameScore;

                // assert
                Assert.AreEqual(frameScore, expectedResults[i]);
            }

            Assert.AreEqual(totalScore, 300);
        }
        public void CalculateScoreForFrameTest_summationsForFinishedGame_variant()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 7, 1 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 0, 2 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 0, 10 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 6, 4 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 })
            };

            int[] pointsSummationsAfterGame = new[] { 8, 10, 26, 46, 66, 76 };

            for (int i = 0; i < playedFrames.Count; i++)
            {
                scoreCalculator.AddPlayedBowlingFrame(playedFrames[i]);
            }

            int totalPoints = 0;

            for (int j = 1; j <= playedFrames.Count; j++)
            {
                totalPoints += scoreCalculator.CalculateScoreForSingleFrame(j, playedFrames);
                Assert.AreEqual(totalPoints, pointsSummationsAfterGame[j - 1]);
            }
        }
예제 #3
0
        public void CalculateScoreForFrameTest_SpecificGame()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 3, 7 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 8, 2 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 8, 1 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 3, 4 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 7, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 5, 5 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 3, 2 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 2, 5 })
            };

            int totalScore = 0;

            int[] expectedResults = new[] { 20, 20, 18, 9, 17, 7, 7, 13, 5, 7 };
            for (int i = 0; i < playedFrames.Count; i++)
            {
                // act
                int frameScore = scoreCalculator.CalculateScoreForSingleFrame(i + 1, playedFrames);
                totalScore += frameScore;

                // assert
                Assert.AreEqual(frameScore, expectedResults[i]);
            }

            Assert.AreEqual(totalScore, 123);
        }
예제 #4
0
        public void CalculateScoreForFrameTest_firstFrameIsAStrikeNextIsOpenFrame()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 5, 1 })
            };

            // act
            int frame1Score = scoreCalculator.CalculateScoreForSingleFrame(1, playedFrames);
            int frame2Score = scoreCalculator.CalculateScoreForSingleFrame(2, playedFrames);

            // assert
            Assert.AreEqual(frame1Score, 16);
            Assert.AreEqual(frame2Score, 6);
        }
예제 #5
0
        public void CalculateScoreForFrameTest_noStrikesGame()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 7, 2 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 5, 0 })
            };

            // act
            int frame1Score = scoreCalculator.CalculateScoreForSingleFrame(1, playedFrames);
            int frame2Score = scoreCalculator.CalculateScoreForSingleFrame(2, playedFrames);

            // assert
            Assert.AreEqual(frame1Score, 9);
            Assert.AreEqual(frame2Score, 5);
        }
예제 #6
0
        public void CalculateScoreForFrameTest_frameNumberOutOfBounds()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 7, 3 })
            };

            // act/assert
            scoreCalculator.CalculateScoreForSingleFrame(2, playedFrames);
        }
예제 #7
0
        public void CalculateScoreForFrameTest_TooManyFramePoints()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 5, 4, 3 })
            };

            // act/assert
            int frameScore = scoreCalculator.CalculateScoreForSingleFrame(2, playedFrames);
        }
예제 #8
0
        public void CalculateScoreForFrameTest_SuperflousFrame()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>();

            for (int i = 0; i < 11; i++)
            {
                playedFrames.Add(BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 10, 10 }));
            }

            // act/assert
            int frameScore = scoreCalculator.CalculateScoreForSingleFrame(3, playedFrames);
        }
예제 #9
0
        public void CalculateScoreForFrameTest_singleFrameStrikeNoOtherFrames()
        {
            // arrange
            TraditionalBowlingScoringCalculator scoreCalculator = new TraditionalBowlingScoringCalculator();
            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 })
            };

            // act
            int frame1Score = scoreCalculator.CalculateScoreForSingleFrame(1, playedFrames);

            // assert
            Assert.AreEqual(frame1Score, 10);
        }