From 614422e2bce697df54c78b204893738ca4b44b22 Mon Sep 17 00:00:00 2001 From: Han Bol Date: Wed, 29 Jan 2025 14:38:42 +0100 Subject: [PATCH 1/3] Improved test for roll_the_die - Tests now check whether multiple rolls supply different results - RollDie is checked for returning all values in the expected range - Increased for loop from 100 times to 1000 times to prevent false negative. Encountered that 100 rolls was not sufficient to have all numbers in range(1, 18) to be generated. Rationale: My first implementation (thanks XKCD) made the test suite pass. ``` public int RollDie() { return 4; // chosen by fair dice roll. // guaranteed to be random. } ``` --- .../concept/roll-the-die/RollTheDieTests.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/exercises/concept/roll-the-die/RollTheDieTests.cs b/exercises/concept/roll-the-die/RollTheDieTests.cs index 03b497538e..22592fcaf0 100644 --- a/exercises/concept/roll-the-die/RollTheDieTests.cs +++ b/exercises/concept/roll-the-die/RollTheDieTests.cs @@ -1,4 +1,5 @@ using Exercism.Tests; +using System.Collections.Generic; public class RollTheDieTests { @@ -6,19 +7,31 @@ public class RollTheDieTests [Task(1)] public void RollDie() { + var rollCount = 1000; + var rolls = new HashSet(rollCount); var player = new Player(); - for (var i = 0; i < 100; i++) + for (var i = 0; i < rollCount; i++) { + var roll = player.RollDie(); + rolls.Add(roll); Assert.InRange(player.RollDie(), 1, 18); } + Assert.Equal(18, rolls.Count); } [Fact] [Task(2)] public void GenerateSpellStrength() { + var rollCount = 100; + var rolls = new HashSet(rollCount); var player = new Player(); - var strength = player.GenerateSpellStrength(); - Assert.InRange(strength, 0.0, 100.0); + for (var i = 0; i < rollCount; i++) + { + var strength = player.GenerateSpellStrength(); + rolls.Add(strength); + Assert.InRange(strength, 0.0, 100.0); + } + Assert.Equal(rollCount, rolls.Count); } } From 29874fd8a080bef7394b3fa12f50a23e9d5d8cc6 Mon Sep 17 00:00:00 2001 From: Karan Chadha Date: Sun, 5 Oct 2025 08:09:42 +0530 Subject: [PATCH 2/3] fix flaky test in rollthedie concept --- exercises/concept/roll-the-die/RollTheDieTests.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/exercises/concept/roll-the-die/RollTheDieTests.cs b/exercises/concept/roll-the-die/RollTheDieTests.cs index 22592fcaf0..13f5a62c5e 100644 --- a/exercises/concept/roll-the-die/RollTheDieTests.cs +++ b/exercises/concept/roll-the-die/RollTheDieTests.cs @@ -24,6 +24,7 @@ public void RollDie() public void GenerateSpellStrength() { var rollCount = 100; + var minUniqueValues = rollCount - 5; // Allow up to 5 duplicates var rolls = new HashSet(rollCount); var player = new Player(); for (var i = 0; i < rollCount; i++) @@ -32,6 +33,8 @@ public void GenerateSpellStrength() rolls.Add(strength); Assert.InRange(strength, 0.0, 100.0); } - Assert.Equal(rollCount, rolls.Count); + + Assert.True(rolls.Count >= minUniqueValues, + $"Expected at least {minUniqueValues} unique values, but got {rolls.Count}"); } } From 16acce901efae61ce31b8ae87d2fff85418ff4bd Mon Sep 17 00:00:00 2001 From: Karan Chadha Date: Sun, 5 Oct 2025 16:10:06 +0530 Subject: [PATCH 3/3] fix: resolved pr comment --- exercises/concept/roll-the-die/.meta/config.json | 3 ++- exercises/concept/roll-the-die/RollTheDieTests.cs | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises/concept/roll-the-die/.meta/config.json b/exercises/concept/roll-the-die/.meta/config.json index 4dc4e64cd9..6051e60933 100644 --- a/exercises/concept/roll-the-die/.meta/config.json +++ b/exercises/concept/roll-the-die/.meta/config.json @@ -5,7 +5,8 @@ "contributors": [ "ErikSchierboom", "yzAlvin", - "aage" + "aage", + "karanchadha10" ], "files": { "solution": [ diff --git a/exercises/concept/roll-the-die/RollTheDieTests.cs b/exercises/concept/roll-the-die/RollTheDieTests.cs index 13f5a62c5e..6f00245f4e 100644 --- a/exercises/concept/roll-the-die/RollTheDieTests.cs +++ b/exercises/concept/roll-the-die/RollTheDieTests.cs @@ -34,7 +34,6 @@ public void GenerateSpellStrength() Assert.InRange(strength, 0.0, 100.0); } - Assert.True(rolls.Count >= minUniqueValues, - $"Expected at least {minUniqueValues} unique values, but got {rolls.Count}"); + Assert.InRange(rolls.Count, minUniqueValues, rollCount); } }