Files
basic-computer-games/29_Craps/csharp/CrapsTester/CrapsTests.cs
Martin Thoma e64fb6795c MAINT: Apply pre-commit
Remove byte-order-marker pre-commit check as there would be
many adjustments necessary
2022-03-05 09:29:23 +01:00

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);
}
}
}