public void CreateTable_WhenFactorsAreNull_ShouldThrowAnArgumentNullException()
            {
                // Arrange
                var subject = new MultiplicationTableCalculator();

                // Act
                TestDelegate act = () => subject.CreateTable(null);

                // Assert
                var ex = Assert.Throws<ArgumentNullException>(act);
                Assert.That(ex.ParamName, Is.EqualTo("factors"));
            }
            public void CreateTable_WhenFactorsAreNotNull_ReturnsATableWhoseTopRowIsTheListOfFactors()
            {
                // Arrange
                var factors = Enumerable.Range(1, 5).ToArray();

                var subject = new MultiplicationTableCalculator();

                // Act
                var result = subject.CreateTable(factors);

                // Assert
                for(int col = 1; col <= 5; col++)
                {
                    Assert.That(result[0, col], Is.EqualTo(factors[col - 1]));
                }
            }
            public void CreateTable_WhenFactorsAreNotNull_ReturnsATableWhoseFirstColumnIsTheListOfFactors()
            {
                // Arrange
                var factors = Enumerable.Range(1, 5).ToArray();

                var subject = new MultiplicationTableCalculator();

                // Act
                var result = subject.CreateTable(factors);

                // Assert
                for (int row = 1; row <= 5; row++)
                {
                    Assert.That(result[row, 0], Is.EqualTo(factors[row - 1]));
                }
            }
            public void CreateTable_WhenFactorsAreNotNull_ReturnsATableWhoseOtherValuesAreTheProductOfTheTopRowAndTheFirstColumn()
            {
                // Arrange
                var factors = Enumerable.Range(1, 5).ToArray();

                var subject = new MultiplicationTableCalculator();

                // Act
                var result = subject.CreateTable(factors);

                // Assert
                for (int col = 1; col <= 5; col++)
                {
                    for (int row = 1; row <= 5; row++)
                    {
                        var expected = result[0, col] * result[row, 0];
                        Assert.That(result[row, col], Is.EqualTo(expected));
                    }
                }
            }