Skip to content

Commit cb1aa7b

Browse files
author
Han Bol
committed
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. } ```
1 parent ac83aa5 commit cb1aa7b

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed
Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
11
using Xunit;
22
using Exercism.Tests;
3+
using System.Collections.Generic;
34

45
public class RollTheDieTests
56
{
67
[Fact]
78
[Task(1)]
89
public void RollDie()
910
{
11+
var rollCount = 1000;
12+
var rolls = new HashSet<int>(rollCount);
1013
var player = new Player();
11-
for (var i = 0; i < 100; i++)
14+
for (var i = 0; i < rollCount; i++)
1215
{
16+
var roll = player.RollDie();
17+
rolls.Add(roll);
1318
Assert.InRange(player.RollDie(), 1, 18);
1419
}
20+
Assert.Equal(18, rolls.Count);
1521
}
1622

1723
[Fact]
1824
[Task(2)]
1925
public void GenerateSpellStrength()
2026
{
27+
var rollCount = 100;
28+
var rolls = new HashSet<double>(rollCount);
2129
var player = new Player();
22-
var strength = player.GenerateSpellStrength();
23-
Assert.InRange(strength, 0.0, 100.0);
30+
for (var i = 0; i < rollCount; i++)
31+
{
32+
var strength = player.GenerateSpellStrength();
33+
rolls.Add(strength);
34+
Assert.InRange(strength, 0.0, 100.0);
35+
}
36+
Assert.Equal(rollCount, rolls.Count);
2437
}
2538
}

0 commit comments

Comments
 (0)