[InlineData(20, 11)] //// Huge width, not divisible three public void TestGetColumnToHandleRarelyReturnsSameColumnForTwoPlayersAfterSecondTime(int width, int numberOfPlayers) { // Arrange Assert.False(width < numberOfPlayers); var handledColumns = new HashSet <int>(); int repeatCount = 0; // Act for (int k = 0; k < numberOfPlayers; ++k) { var columnGenerator = new ColumnGenerator(k, width, numberOfPlayers); int col1 = columnGenerator.GetColumnToHandle(1); int col2 = columnGenerator.GetColumnToHandle(2); repeatCount += handledColumns.Contains(col1) ? 1 : 0; repeatCount += handledColumns.Contains(col2) ? 1 : 0; handledColumns.Add(col1); handledColumns.Add(col2); } // Assert int val = Math.Max((numberOfPlayers * 2) - width, numberOfPlayers * 2 / width); Assert.True(repeatCount <= val, $"Should not repeat, \n expected {repeatCount} <= {val} "); }
[InlineData(40, 11)] //// Huge width, not divisible three public void TestGetColumnToHandleNeverReturnsSameColumnForTwoPlayersInitialy(int width, int numberOfPlayers) { Assert.False(width < numberOfPlayers); // A & A & A var handledColumns = new HashSet <int>(); for (int k = 0; k < numberOfPlayers; ++k) { var columnGenerator = new ColumnGenerator(k, width, numberOfPlayers); int col = columnGenerator.GetColumnToHandle(1); Assert.DoesNotContain(col, handledColumns); handledColumns.Add(col); } }
[InlineData(15, 20)] //// Huge number of players public void TestGetColumnToHandleNeverReturnsSameColumnForParticularPlayer(int width, int numberOfPlayers) { // A & A & A for (int k = 0; k < numberOfPlayers; ++k) { var columnGenerator = new ColumnGenerator(k, width, numberOfPlayers); var handledColumns = new HashSet <int>(); for (int i = 1; i <= width; ++i) { int col = columnGenerator.GetColumnToHandle(i); Assert.DoesNotContain(col, handledColumns); handledColumns.Add(col); } } }