mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
97 lines
2.7 KiB
C#
97 lines
2.7 KiB
C#
using Craps;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
|
|
|
|
namespace CrapsTester
|
|
{
|
|
[TestClass]
|
|
public class DiceTests
|
|
{
|
|
[TestMethod]
|
|
public void SixSidedDiceReturnsValidRolls()
|
|
{
|
|
var dice = new Dice();
|
|
for (int i = 0; i < 100000; i++)
|
|
{
|
|
var roll = dice.Roll();
|
|
Assert.IsTrue(roll >= 1 && roll <= dice.sides);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TwentySidedDiceReturnsValidRolls()
|
|
{
|
|
var dice = new Dice(20);
|
|
for (int i = 0; i < 100000; i++)
|
|
{
|
|
var roll = dice.Roll();
|
|
Assert.IsTrue(roll >= 1 && roll <= dice.sides);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void DiceRollsAreRandom()
|
|
{
|
|
// Roll 600,000 dice and count how many rolls there are for each side.
|
|
|
|
var dice = new Dice();
|
|
|
|
int numOnes = 0;
|
|
int numTwos = 0;
|
|
int numThrees = 0;
|
|
int numFours = 0;
|
|
int numFives = 0;
|
|
int numSixes = 0;
|
|
int numErrors = 0;
|
|
|
|
for (int i = 0; i < 600000; i++)
|
|
{
|
|
switch (dice.Roll())
|
|
{
|
|
case 1:
|
|
numOnes++;
|
|
break;
|
|
|
|
case 2:
|
|
numTwos++;
|
|
break;
|
|
|
|
case 3:
|
|
numThrees++;
|
|
break;
|
|
|
|
case 4:
|
|
numFours++;
|
|
break;
|
|
|
|
case 5:
|
|
numFives++;
|
|
break;
|
|
|
|
case 6:
|
|
numSixes++;
|
|
break;
|
|
|
|
default:
|
|
numErrors++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// We'll assume that a variation of 10% in rolls for the different numbers is random enough.
|
|
// Perfectly random rolling would produce 100000 rolls per side, +/- 5% of this gives the
|
|
// range 90000..110000.
|
|
const int minRolls = 95000;
|
|
const int maxRolls = 105000;
|
|
Assert.IsTrue(numOnes >= minRolls && numOnes <= maxRolls);
|
|
Assert.IsTrue(numTwos >= minRolls && numTwos <= maxRolls);
|
|
Assert.IsTrue(numThrees >= minRolls && numThrees <= maxRolls);
|
|
Assert.IsTrue(numFours >= minRolls && numFours <= maxRolls);
|
|
Assert.IsTrue(numFives >= minRolls && numFives <= maxRolls);
|
|
Assert.IsTrue(numSixes >= minRolls && numSixes <= maxRolls);
|
|
Assert.AreEqual(numErrors, 0);
|
|
}
|
|
}
|
|
}
|