From e1f2c92b191ad70d99234f5dbccb8d2d24c35fa5 Mon Sep 17 00:00:00 2001 From: rbamforth <79797573+rbamforth@users.noreply.github.com> Date: Sun, 11 Apr 2021 20:57:43 +0100 Subject: [PATCH] Added test that dice rolls are random. --- 29 Craps/csharp/Craps/Craps/Dice.cs | 5 +- 29 Craps/csharp/Craps/Craps/Program.cs | 3 +- .../csharp/Craps/CrapsTester/CrapsTests.cs | 65 +++++++++++++++++++ 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/29 Craps/csharp/Craps/Craps/Dice.cs b/29 Craps/csharp/Craps/Craps/Dice.cs index 3485f0f6..43186026 100644 --- a/29 Craps/csharp/Craps/Craps/Dice.cs +++ b/29 Craps/csharp/Craps/Craps/Dice.cs @@ -1,6 +1,5 @@ using System; -using System.Collections.Generic; -using System.Text; + namespace Craps { @@ -19,6 +18,6 @@ namespace Craps this.sides = sides; } - public int Roll() => rand.Next(1, sides); + public int Roll() => rand.Next(1, sides + 1); } } diff --git a/29 Craps/csharp/Craps/Craps/Program.cs b/29 Craps/csharp/Craps/Craps/Program.cs index 17688427..d8109a16 100644 --- a/29 Craps/csharp/Craps/Craps/Program.cs +++ b/29 Craps/csharp/Craps/Craps/Program.cs @@ -1,12 +1,13 @@ using System; + + namespace Craps { class Program { static void Main(string[] args) { - Console.WriteLine("Hello World!"); } } } diff --git a/29 Craps/csharp/Craps/CrapsTester/CrapsTests.cs b/29 Craps/csharp/Craps/CrapsTester/CrapsTests.cs index 9765ba61..2534f21f 100644 --- a/29 Craps/csharp/Craps/CrapsTester/CrapsTests.cs +++ b/29 Craps/csharp/Craps/CrapsTester/CrapsTests.cs @@ -1,6 +1,8 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Craps; + + namespace CrapsTester { [TestClass] @@ -27,5 +29,68 @@ namespace CrapsTester 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); + } } }