public void NonSpareInMiddle()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 4; frame++)
            {
                scorer.Roll(5);
                scorer.Roll(5);
            }

            scorer.Roll(3);
            scorer.Roll(5);

            for (var frame = 0; frame < 5; frame++)
            {
                scorer.Roll(5);
                scorer.Roll(5);
            }

            //Spare roll
            scorer.Roll(7);

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(3 * 15 + 13 + 8 + 4 * 15 + 17));
        }
        public void AllGutterBalls()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 10; frame++)
            {
                scorer.Roll(0);
                scorer.Roll(0);
            }

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(0));
        }
        public void SinglePins()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 10; frame++)
            {
                scorer.Roll(1);
                scorer.Roll(1);
            }

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(20));
        }
        public void AllStrikes()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 10; frame++)
            {
                scorer.Roll(10);
            }

            // strike bonus rolls
            scorer.Roll(10);
            scorer.Roll(10);

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(300));
        }
        public void StrikeThenSinglePins()
        {
            var scorer = new BowlingScore();

            //strike
            scorer.Roll(10);

            for (var frame = 0; frame < 9; frame++)
            {
                scorer.Roll(1);
                scorer.Roll(1);
            }

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(12 + 9 * 2));
        }
        public void SparesExceptLastFrame()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 9; frame++)
            {
                scorer.Roll(5);
                scorer.Roll(5);
            }

            scorer.Roll(3);
            scorer.Roll(5);

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo((8 * 15) + 13 + 8));
        }
        public void MixedSparesEveryTimeWithGutterFirst()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 10; frame++)
            {
                scorer.Roll(0);
                scorer.Roll(10);
            }

            //Spare roll
            scorer.Roll(7);

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(10 * 9 + 17));
        }
        public void MixedSparesEveryTime()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 10; frame++)
            {
                scorer.Roll(3);
                scorer.Roll(7);
            }

            //Spare roll
            scorer.Roll(5);

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(13 * 9 + 15));
        }
        public void FivePinsEveryTime()
        {
            var scorer = new BowlingScore();

            for (var frame = 0; frame < 10; frame++)
            {
                scorer.Roll(5);
                scorer.Roll(5);
            }

            //Spare roll
            scorer.Roll(5);

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(150));
        }
        public void NonSpareFirstThenSpares()
        {
            var scorer = new BowlingScore();

            scorer.Roll(5);
            scorer.Roll(3);

            for (var frame = 0; frame < 9; frame++)
            {
                scorer.Roll(5);
                scorer.Roll(5);
            }

            //Spare roll
            scorer.Roll(7);

            var finalScore = scorer.CalculateScore();

            Assert.That(finalScore, Is.EqualTo(8 + (8 * 15) + 17));
        }