예제 #1
0
        public void ADiceSetCannotContainLessThan5Dice()
        {
            const int invalidNumberOfDice = 4;

            Die[] dice    = CreateDice(invalidNumberOfDice);
            var   diceSet = new DiceSet(dice);
        }
예제 #2
0
 private void HoldAndRoll(DiceSet diceSet, params int[] diceIndexes)
 {
     for (int dieIndex = 0; dieIndex < diceIndexes.Length; dieIndex++)
     {
         diceSet.Hold(diceIndexes[dieIndex]);
     }
     diceSet.Roll();
 }
예제 #3
0
        public void RollingADiceSetRollsAllDice()
        {
            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            diceSet.Roll();

            Assert.IsTrue(dice.All(IsValueValidFor));
        }
예제 #4
0
        public void NotHoldingAnyDieOnTheFirstThrowWillRollAllDiceInTheSet()
        {
            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            diceSet.Roll();
            diceSet.Roll();

            Assert.IsTrue(dice.All(d => d.NumberOfThrows == 2));
        }
예제 #5
0
        public void EndingATurnContainingLessThan3RollsOfTheDiceSetThrowsException()
        {
            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            var turn = new Turn(diceSet);

            diceSet.Roll();
            diceSet.Roll();
            turn.GetScore(scoreCategoryIsIrelevant);
        }
예제 #6
0
        public void ScoringATurnInTheUpperScoresCategory_WithAZeroCategoryValueThrowsException()
        {
            const int invalidCategoryValue = 0;

            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            var turn = new Turn(diceSet);

            diceSet.Roll();
            diceSet.Roll();
            diceSet.Roll();
            turn.GetScore(invalidCategoryValue);
        }
예제 #7
0
        public void EndingATurnContainingExactly3RollsOfTheDiceSetDoesNotThrowException()
        {
            const int upperScoreCategory = 3;

            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            var turn = new Turn(diceSet);

            diceSet.Roll();
            diceSet.Roll();
            diceSet.Roll();
            turn.GetScore(upperScoreCategory);
        }
예제 #8
0
        public void HoldingADieAfterTheFirstThrowWillFreezeTheValueOfThatDieOnTheSecondThrow()
        {
            const int secondDieIndex = 1;

            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            diceSet.Roll();
            int valueOfTheDiceBeingHold = dice[secondDieIndex].Value;

            diceSet.Hold(secondDieIndex);
            diceSet.Roll();

            Assert.AreEqual(valueOfTheDiceBeingHold, dice[secondDieIndex].Value);
        }
예제 #9
0
        public void Holding2DiceAfterTheFirstThrowWillFreezeTheValuesOfThoseDiceOnTheSecondThrow()
        {
            const int secondDieIndex = 1;
            const int forthDieIndex  = 3;

            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            diceSet.Roll();
            int valueOfTheSecondDieBeingHold = dice[secondDieIndex].Value;
            int valueOfTheForthDieBeingHold  = dice[forthDieIndex].Value;

            HoldAndRoll(diceSet, secondDieIndex, forthDieIndex);

            Assert.AreEqual(valueOfTheSecondDieBeingHold, dice[secondDieIndex].Value);
            Assert.AreEqual(valueOfTheForthDieBeingHold, dice[forthDieIndex].Value);
        }
예제 #10
0
        public void ScoringATurnInTheUpperScoresCategory_SumsTheValuesOfTheChosenCategory()
        {
            Die[] dice    = CreateDice(TotalNumberOfDice);
            var   diceSet = new DiceSet(dice);

            const int upperScoresCategory = 3;

            var turn = new Turn(diceSet);

            diceSet.Roll();
            diceSet.Roll();
            diceSet.Roll();
            int actualScore = turn.GetScore(upperScoresCategory);

            Assert.IsTrue(actualScore > 0);
            Assert.IsTrue(actualScore % 3 == 0);
        }
예제 #11
0
 public void ADiceSetCannotNullDice()
 {
     Die[] nullDice = null;
     var   diceSet  = new DiceSet(nullDice);
 }
예제 #12
0
 public Turn(DiceSet diceSet)
 {
     this.diceSet = diceSet;
 }