diff --git a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
index 1dd1bb40..6d731846 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
@@ -320,94 +320,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column array.
- public override void CanSetColumnWithArray(string name, double[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithArray(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column values.
- public override void CanSetColumnWithVector(string name, double[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithVector(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row values.
- public override void CanSetRowWithArray(string name, double[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithArray(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row index.
- public override void CanSetRowWithVector(string name, double[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithVector(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
///
/// Can set a submatrix.
///
diff --git a/src/UnitTests/LinearAlgebraTests/Complex/MatrixStructureTheory.cs b/src/UnitTests/LinearAlgebraTests/Complex/MatrixStructureTheory.cs
index 6fd65dc7..4efee412 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex/MatrixStructureTheory.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex/MatrixStructureTheory.cs
@@ -46,5 +46,10 @@
{
return new DenseVector(size);
}
+
+ protected override Complex Zero
+ {
+ get { return Complex.Zero; }
+ }
}
}
\ No newline at end of file
diff --git a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs
index 8c5e5066..4b0e85f4 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs
@@ -36,350 +36,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
///
public abstract partial class MatrixTests : MatrixLoader
{
- ///
- /// Can set a row.
- ///
- /// Row index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetRow(int rowIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetRow(rowIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(i == rowIndex ? Complex.Zero : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Can set a column.
- ///
- /// Column index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetColumn(int colIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetColumn(colIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(j == colIndex ? Complex.Zero : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangle(string name)
- {
- var data = TestMatrices[name];
- var upper = data.UpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : Complex.Zero, upper[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.UpperTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : Complex.Zero, result[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void UpperTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get a lower triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangle(string name)
- {
- var data = TestMatrices[name];
- var lower = data.LowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : Complex.Zero, lower[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.LowerTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : Complex.Zero, result[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void LowerTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a strictly lower triangle.
- ///
- [Test]
- public void CanStrictlyLowerTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyLowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : Complex.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyLowerTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyLowerTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : Complex.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyLowerTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle.
- ///
- [Test]
- public void CanStrictlyUpperTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyUpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : Complex.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyUpperTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyUpperTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : Complex.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyUpperTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
///
/// Can transpose a matrix.
///
@@ -432,129 +88,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column real values array.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- public virtual void CanSetColumnWithArray(string name, double[] real)
- {
- var column = new Complex[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- column[i] = new Complex(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], column[j]);
- }
- }
- }
-
- ///
- /// Set a column with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetColumnWithNullArrayThrowsArgumentNullException()
- {
- Complex[] vec = null;
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, vec));
- }
-
- ///
- /// Set a column with unequal array length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithArrayUnequalLengthThrowsArgumentException()
- {
- var array = new Complex[] { 1, 2, 3, 4, 5 };
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, array));
- }
-
- ///
- /// Set a column array with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithArrayWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- Complex[] column = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- Assert.Throws(() => matrix.SetColumn(-1, column));
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column real values.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- public virtual void CanSetColumnWithVector(string name, double[] real)
- {
- var column = new Complex[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- column[i] = new Complex(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- var columnVector = CreateVector(column);
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], columnVector[j]);
- }
- }
- }
-
- ///
- /// Set a column with vector with wrong length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var matrix = TestMatrices["Singular3x3"];
- var columnVector = CreateVector(new Complex[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set a column with null vector throw ArgumentNullException.
- ///
- [Test]
- public void SetColumnWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector columnVector = null;
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set column vector with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithVectorWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var column = CreateVector(new Complex[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetColumn(-1, column));
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- }
-
///
/// Can insert a column.
///
@@ -615,118 +148,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
Assert.Throws(() => matrix.InsertColumn(0, column));
}
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row index.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- [TestCase("Wide2x3", new double[] { 1, 2, 3 })]
- public virtual void CanSetRowWithArray(string name, double[] real)
- {
- var row = new Complex[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- row[i] = new Complex(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], row[j]);
- }
- }
- }
-
- ///
- /// Set a row with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetRowWithNullArrayThrowsArgumentNullException()
- {
- Complex[] arr = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, arr));
- }
-
- ///
- /// Set a row with an array with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithArrayWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- Complex[] row = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row real values.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- [TestCase("Wide2x3", new double[] { 1, 2, 3 })]
- public virtual void CanSetRowWithVector(string name, double[] real)
- {
- var row = new Complex[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- row[i] = new Complex(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- var rowVector = CreateVector(row);
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], rowVector[j]);
- }
- }
- }
-
- ///
- /// Set a row with a vector of unequal length throws ArgumentException.
- ///
- [Test]
- public virtual void SetRowWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var vec = CreateVector(new Complex[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, vec));
- }
-
- ///
- /// Set a row with a null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetRowWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector rowVector = null;
- Assert.Throws(() => matrix.SetRow(1, rowVector));
- }
-
- ///
- /// Set a row with a vector with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithVectorWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var row = CreateVector(new Complex[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
///
/// Can set a submatrix.
///
@@ -809,103 +230,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
Assert.Throws(() => TestMatrices["Square3x3"].SetSubMatrix(0, 2, 0, 2, subMatrix));
}
- ///
- /// Can set a diagonal vector.
- ///
- /// Matrix name.
- /// Diagonal real values.
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- public void CanSetDiagonalVector(string name, double[] real)
- {
- var diagonal = new Complex[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- diagonal[i] = new Complex(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- var vector = CreateVector(diagonal);
- matrix.SetDiagonal(vector);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < vector.Count; i++)
- {
- Assert.AreEqual(vector[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal vector with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalVectorWithUnequalLengthThrowsArgumentException()
- {
- var vector = CreateVector(new Complex[] { 1, 2, 3 });
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(vector));
- }
-
- ///
- /// Set a diagonal with null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullVectorThrowsArgumentNullException()
- {
- Vector vector = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(vector));
- }
-
- ///
- /// Can set a diagonal array.
- ///
- /// Matrix name.
- /// Diagonal real values.
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- public void CanSetDiagonalArray(string name, double[] real)
- {
- var diagonal = new Complex[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- diagonal[i] = new Complex(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- matrix.SetDiagonal(diagonal);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < diagonal.Length; i++)
- {
- Assert.AreEqual(diagonal[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal array with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalArrayWithUnequalLengthThrowsArgumentException()
- {
- var array = new Complex[] { 1, 2, 3 };
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(array));
- }
-
- ///
- /// Set a diagonal with null array throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullArrayThrowsArgumentNullException()
- {
- Complex[] array = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(array));
- }
-
///
/// Can insert a row.
///
diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
index 72d9bcd6..ac7d9189 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
@@ -320,94 +320,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column array.
- public override void CanSetColumnWithArray(string name, float[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithArray(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column values.
- public override void CanSetColumnWithVector(string name, float[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithVector(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row values.
- public override void CanSetRowWithArray(string name, float[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithArray(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row index.
- public override void CanSetRowWithVector(string name, float[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithVector(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
///
/// Can set a submatrix.
///
diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixStructureTheory.cs b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixStructureTheory.cs
index 7d29f516..1fe04b4c 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixStructureTheory.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixStructureTheory.cs
@@ -46,5 +46,10 @@
{
return new DenseVector(size);
}
+
+ protected override Complex32 Zero
+ {
+ get { return Complex32.Zero; }
+ }
}
}
\ No newline at end of file
diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs
index 1769589d..07f2c72d 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs
@@ -36,350 +36,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
///
public abstract partial class MatrixTests : MatrixLoader
{
- ///
- /// Can set a row.
- ///
- /// Row index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetRow(int rowIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetRow(rowIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(i == rowIndex ? Complex32.Zero : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Can set a column.
- ///
- /// Column index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetColumn(int colIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetColumn(colIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(j == colIndex ? Complex32.Zero : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangle(string name)
- {
- var data = TestMatrices[name];
- var upper = data.UpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : Complex32.Zero, upper[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.UpperTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : Complex32.Zero, result[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void UpperTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get a lower triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangle(string name)
- {
- var data = TestMatrices[name];
- var lower = data.LowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : Complex32.Zero, lower[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.LowerTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : Complex32.Zero, result[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void LowerTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a strictly lower triangle.
- ///
- [Test]
- public void CanStrictlyLowerTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyLowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : Complex32.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyLowerTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyLowerTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : Complex32.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyLowerTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle.
- ///
- [Test]
- public void CanStrictlyUpperTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyUpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : Complex32.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyUpperTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyUpperTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : Complex32.Zero, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyUpperTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
///
/// Can transpose a matrix.
///
@@ -432,129 +88,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column real values array.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- public virtual void CanSetColumnWithArray(string name, float[] real)
- {
- var column = new Complex32[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- column[i] = new Complex32(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], column[j]);
- }
- }
- }
-
- ///
- /// Set a column with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetColumnWithNullArrayThrowsArgumentNullException()
- {
- Complex32[] vec = null;
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, vec));
- }
-
- ///
- /// Set a column with unequal array length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithArrayUnequalLengthThrowsArgumentException()
- {
- var array = new Complex32[] { 1, 2, 3, 4, 5 };
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, array));
- }
-
- ///
- /// Set a column array with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithArrayWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- Complex32[] column = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- Assert.Throws(() => matrix.SetColumn(-1, column));
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column real values.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- public virtual void CanSetColumnWithVector(string name, float[] real)
- {
- var column = new Complex32[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- column[i] = new Complex32(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- var columnVector = CreateVector(column);
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], columnVector[j]);
- }
- }
- }
-
- ///
- /// Set a column with vector with wrong length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var matrix = TestMatrices["Singular3x3"];
- var columnVector = CreateVector(new Complex32[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set a column with null vector throw ArgumentNullException.
- ///
- [Test]
- public void SetColumnWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector columnVector = null;
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set column vector with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithVectorWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var column = CreateVector(new Complex32[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetColumn(-1, column));
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- }
-
///
/// Can insert a column.
///
@@ -615,118 +148,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
Assert.Throws(() => matrix.InsertColumn(0, column));
}
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row index.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- [TestCase("Wide2x3", new float[] { 1, 2, 3 })]
- public virtual void CanSetRowWithArray(string name, float[] real)
- {
- var row = new Complex32[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- row[i] = new Complex32(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], row[j]);
- }
- }
- }
-
- ///
- /// Set a row with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetRowWithNullArrayThrowsArgumentNullException()
- {
- Complex32[] arr = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, arr));
- }
-
- ///
- /// Set a row with an array with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithArrayWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- Complex32[] row = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row real values.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- [TestCase("Wide2x3", new float[] { 1, 2, 3 })]
- public virtual void CanSetRowWithVector(string name, float[] real)
- {
- var row = new Complex32[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- row[i] = new Complex32(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- var rowVector = CreateVector(row);
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], rowVector[j]);
- }
- }
- }
-
- ///
- /// Set a row with a vector of unequal length throws ArgumentException.
- ///
- [Test]
- public virtual void SetRowWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var vec = CreateVector(new Complex32[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, vec));
- }
-
- ///
- /// Set a row with a null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetRowWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector rowVector = null;
- Assert.Throws(() => matrix.SetRow(1, rowVector));
- }
-
- ///
- /// Set a row with a vector with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithVectorWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var row = CreateVector(new Complex32[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
///
/// Can set a submatrix.
///
@@ -809,103 +230,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
Assert.Throws(() => TestMatrices["Square3x3"].SetSubMatrix(0, 2, 0, 2, subMatrix));
}
- ///
- /// Can set a diagonal vector.
- ///
- /// Matrix name.
- /// Diagonal real values.
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- public void CanSetDiagonalVector(string name, float[] real)
- {
- var diagonal = new Complex32[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- diagonal[i] = new Complex32(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- var vector = CreateVector(diagonal);
- matrix.SetDiagonal(vector);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < vector.Count; i++)
- {
- Assert.AreEqual(vector[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal vector with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalVectorWithUnequalLengthThrowsArgumentException()
- {
- var vector = CreateVector(new Complex32[] { 1, 2, 3 });
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(vector));
- }
-
- ///
- /// Set a diagonal with null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullVectorThrowsArgumentNullException()
- {
- Vector vector = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(vector));
- }
-
- ///
- /// Can set a diagonal array.
- ///
- /// Matrix name.
- /// Diagonal real values.
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- public void CanSetDiagonalArray(string name, float[] real)
- {
- var diagonal = new Complex32[real.Length];
- for (var i = 0; i < real.Length; i++)
- {
- diagonal[i] = new Complex32(real[i], 1);
- }
-
- var matrix = TestMatrices[name];
- matrix.SetDiagonal(diagonal);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < diagonal.Length; i++)
- {
- Assert.AreEqual(diagonal[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal array with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalArrayWithUnequalLengthThrowsArgumentException()
- {
- var array = new Complex32[] { 1, 2, 3 };
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(array));
- }
-
- ///
- /// Set a diagonal with null array throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullArrayThrowsArgumentNullException()
- {
- Complex32[] array = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(array));
- }
-
///
/// Can insert a row.
///
diff --git a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
index 8e2b193c..7e6f1f2d 100644
--- a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
@@ -320,94 +320,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column array.
- public override void CanSetColumnWithArray(string name, double[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithArray(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column values.
- public override void CanSetColumnWithVector(string name, double[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithVector(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row index.
- public override void CanSetRowWithArray(string name, double[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithArray(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row index.
- public override void CanSetRowWithVector(string name, double[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithVector(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
///
/// Can set a submatrix.
///
diff --git a/src/UnitTests/LinearAlgebraTests/Double/MatrixStructureTheory.cs b/src/UnitTests/LinearAlgebraTests/Double/MatrixStructureTheory.cs
index 380ff9e6..39bda709 100644
--- a/src/UnitTests/LinearAlgebraTests/Double/MatrixStructureTheory.cs
+++ b/src/UnitTests/LinearAlgebraTests/Double/MatrixStructureTheory.cs
@@ -45,5 +45,10 @@
{
return new DenseVector(size);
}
+
+ protected override double Zero
+ {
+ get { return 0d; }
+ }
}
}
\ No newline at end of file
diff --git a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
index 9ace2619..d01d8336 100644
--- a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
@@ -35,350 +35,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
///
public abstract partial class MatrixTests : MatrixLoader
{
- ///
- /// Can set a row.
- ///
- /// Row index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetRow(int rowIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetRow(rowIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(i == rowIndex ? 0.0 : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Can set a column.
- ///
- /// Column index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetColumn(int colIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetColumn(colIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(j == colIndex ? 0.0 : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangle(string name)
- {
- var data = TestMatrices[name];
- var upper = data.UpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : 0, upper[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.UpperTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : 0, result[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void UpperTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get a lower triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangle(string name)
- {
- var data = TestMatrices[name];
- var lower = data.LowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.LowerTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : 0, result[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void LowerTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a strictly lower triangle.
- ///
- [Test]
- public void CanStrictlyLowerTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyLowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyLowerTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyLowerTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyLowerTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle.
- ///
- [Test]
- public void CanStrictlyUpperTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyUpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyUpperTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyUpperTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyUpperTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
///
/// Can transpose a matrix.
///
@@ -405,117 +61,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column array.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- public virtual void CanSetColumnWithArray(string name, double[] column)
- {
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], column[j]);
- }
- }
- }
-
- ///
- /// Set a column with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetColumnWithNullArrayThrowsArgumentNullException()
- {
- double[] vec = null;
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, vec));
- }
-
- ///
- /// Set a column with unequal array length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithArrayUnequalLengthThrowsArgumentException()
- {
- var array = new double[] { 1, 2, 3, 4, 5 };
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, array));
- }
-
- ///
- /// Set a column array with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithArrayWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- double[] column = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- Assert.Throws(() => matrix.SetColumn(-1, column));
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column values.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- public virtual void CanSetColumnWithVector(string name, double[] column)
- {
- var matrix = TestMatrices[name];
- var columnVector = CreateVector(column);
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], columnVector[j]);
- }
- }
- }
-
- ///
- /// Set a column with vector with wrong length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var matrix = TestMatrices["Singular3x3"];
- var columnVector = CreateVector(new double[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set a column with null vector throw ArgumentNullException.
- ///
- [Test]
- public void SetColumnWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector columnVector = null;
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set column vector with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithVectorWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var column = CreateVector(new double[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetColumn(-1, column));
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- }
-
///
/// Can insert a column.
///
@@ -576,106 +121,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
Assert.Throws(() => matrix.InsertColumn(0, column));
}
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row index.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- [TestCase("Wide2x3", new double[] { 1, 2, 3 })]
- public virtual void CanSetRowWithArray(string name, double[] row)
- {
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], row[j]);
- }
- }
- }
-
- ///
- /// Set a row with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetRowWithNullArrayThrowsArgumentNullException()
- {
- double[] arr = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, arr));
- }
-
- ///
- /// Set a row with an array with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithArrayWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- double[] row = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row index.
- [TestCase("Singular3x3", new double[] { 1, 2, 3 })]
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- [TestCase("Wide2x3", new double[] { 1, 2, 3 })]
- public virtual void CanSetRowWithVector(string name, double[] row)
- {
- var matrix = TestMatrices[name];
- var rowVector = CreateVector(row);
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], rowVector[j]);
- }
- }
- }
-
- ///
- /// Set a row with a vector of unequal length throws ArgumentException.
- ///
- [Test]
- public virtual void SetRowWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var vec = CreateVector(new double[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, vec));
- }
-
- ///
- /// Set a row with a null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetRowWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector rowVector = null;
- Assert.Throws(() => matrix.SetRow(1, rowVector));
- }
-
- ///
- /// Set a row with a vector with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithVectorWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var row = CreateVector(new double[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
///
/// Can set a submatrix.
///
@@ -758,91 +203,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
Assert.Throws(() => TestMatrices["Square3x3"].SetSubMatrix(0, 2, 0, 2, subMatrix));
}
- ///
- /// Can set a diagonal vector.
- ///
- /// Matrix name.
- /// Diagonal vector.
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- public void CanSetDiagonalVector(string name, double[] diagonal)
- {
- var matrix = TestMatrices[name];
- var vector = CreateVector(diagonal);
- matrix.SetDiagonal(vector);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < vector.Count; i++)
- {
- Assert.AreEqual(vector[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal vector with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalVectorWithUnequalLengthThrowsArgumentException()
- {
- var vector = CreateVector(new double[] { 1, 2, 3 });
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(vector));
- }
-
- ///
- /// Set a diagonal with null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullVectorThrowsArgumentNullException()
- {
- Vector vector = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(vector));
- }
-
- ///
- /// Can set a diagonal array.
- ///
- /// Matrix name.
- /// Diagonal array.
- [TestCase("Square3x3", new double[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new double[] { 1, 2 })]
- [TestCase("Tall3x2", new double[] { 1, 2 })]
- public void CanSetDiagonalArray(string name, double[] diagonal)
- {
- var matrix = TestMatrices[name];
- matrix.SetDiagonal(diagonal);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < diagonal.Length; i++)
- {
- Assert.AreEqual(diagonal[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal array with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalArrayWithUnequalLengthThrowsArgumentException()
- {
- var array = new double[] { 1, 2, 3 };
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(array));
- }
-
- ///
- /// Set a diagonal with null array throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullArrayThrowsArgumentNullException()
- {
- double[] array = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(array));
- }
-
///
/// Can insert a row.
///
diff --git a/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.cs b/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.cs
index 75655109..d82ab2bf 100644
--- a/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.cs
+++ b/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.cs
@@ -11,6 +11,7 @@
protected abstract Matrix CreateDense(int rows, int columns);
protected abstract Matrix CreateSparse(int rows, int columns);
protected abstract Vector CreateVector(int size);
+ protected abstract T Zero { get; }
[Theory, Timeout(200)]
public void IsEqualToItself(Matrix matrix)
@@ -43,9 +44,9 @@
{
Assert.That(matrix, Is.Not.EqualTo(2));
Assert.IsFalse(matrix.Equals(2));
- Assert.IsFalse(matrix.Equals((object)2));
- Assert.IsFalse(((object)matrix).Equals(2));
- Assert.IsFalse(matrix == (object)2);
+ Assert.IsFalse(matrix.Equals((object) 2));
+ Assert.IsFalse(((object) matrix).Equals(2));
+ Assert.IsFalse(matrix == (object) 2);
}
[Theory, Timeout(200)]
@@ -116,15 +117,17 @@
[Theory, Timeout(200)]
public void CanGetFieldsByIndex(Matrix matrix)
{
- Assert.That(() => { var x = matrix[0, 0]; }, Throws.Nothing);
- Assert.That(() => { var x = matrix[0, matrix.ColumnCount - 1]; }, Throws.Nothing);
- Assert.That(() => { var x = matrix[matrix.RowCount - 1, 0]; }, Throws.Nothing);
+ Assert.That(() => matrix[0, 0], Throws.Nothing);
+ Assert.That(() => matrix[0, matrix.ColumnCount - 1], Throws.Nothing);
+ Assert.That(() => matrix[matrix.RowCount - 1, 0], Throws.Nothing);
- Assert.That(() => { var x = matrix[-1, 1]; }, Throws.InstanceOf());
- Assert.That(() => { var x = matrix[1, -1]; }, Throws.InstanceOf());
- Assert.That(() => { var x = matrix[0, matrix.ColumnCount]; }, Throws.InstanceOf());
+ Assert.That(() => matrix[-1, 1], Throws.InstanceOf());
+ Assert.That(() => matrix[1, -1], Throws.InstanceOf());
+ Assert.That(() => matrix[0, matrix.ColumnCount], Throws.InstanceOf());
}
+ #region Row & Column Access
+
[Theory, Timeout(200)]
public void CanGetRow(Matrix matrix)
{
@@ -145,8 +148,8 @@
}
// Invalid Rows
- Assert.That(() => { matrix.Row(-1); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Row(matrix.RowCount); }, Throws.InstanceOf());
+ Assert.That(() => matrix.Row(-1), Throws.InstanceOf());
+ Assert.That(() => matrix.Row(matrix.RowCount), Throws.InstanceOf());
}
[Theory, Timeout(200)]
@@ -193,11 +196,11 @@
}
// Invalid Rows
- Assert.That(() => { matrix.Row(-1, 0, 2); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Row(matrix.RowCount, 0, 1); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Row(0, -1, 1); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Row(0, 1, 0); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Row(0, 0, matrix.ColumnCount + 1); }, Throws.InstanceOf());
+ Assert.That(() => matrix.Row(-1, 0, 2), Throws.InstanceOf());
+ Assert.That(() => matrix.Row(matrix.RowCount, 0, 1), Throws.InstanceOf());
+ Assert.That(() => matrix.Row(0, -1, 1), Throws.InstanceOf());
+ Assert.That(() => matrix.Row(0, 1, 0), Throws.InstanceOf());
+ Assert.That(() => matrix.Row(0, 0, matrix.ColumnCount + 1), Throws.InstanceOf());
}
[Theory, Timeout(200)]
@@ -237,8 +240,8 @@
}
// Invalid Columns
- Assert.That(() => { matrix.Column(-1); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Column(matrix.ColumnCount); }, Throws.InstanceOf());
+ Assert.That(() => matrix.Column(-1), Throws.InstanceOf());
+ Assert.That(() => matrix.Column(matrix.ColumnCount), Throws.InstanceOf());
}
[Theory, Timeout(200)]
@@ -285,11 +288,11 @@
}
// Invalid Rows
- Assert.That(() => { matrix.Column(-1, 0, 2); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Column(matrix.ColumnCount, 0, 1); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Column(0, -1, 1); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Column(0, 1, 0); }, Throws.InstanceOf());
- Assert.That(() => { matrix.Column(0, 0, matrix.RowCount + 1); }, Throws.InstanceOf());
+ Assert.That(() => matrix.Column(-1, 0, 2), Throws.InstanceOf());
+ Assert.That(() => matrix.Column(matrix.ColumnCount, 0, 1), Throws.InstanceOf());
+ Assert.That(() => matrix.Column(0, -1, 1), Throws.InstanceOf());
+ Assert.That(() => matrix.Column(0, 1, 0), Throws.InstanceOf());
+ Assert.That(() => matrix.Column(0, 0, matrix.RowCount + 1), Throws.InstanceOf());
}
[Theory, Timeout(200)]
@@ -308,5 +311,360 @@
Assert.That(() => matrix.Column(matrix.ColumnCount, 0, matrix.ColumnCount - 1, col), Throws.InstanceOf());
Assert.That(() => matrix.Column(0, 0, matrix.RowCount, col), Throws.InstanceOf());
}
+
+ [Theory, Timeout(200)]
+ public void CanSetRow(Matrix matrix)
+ {
+ // First Row
+ var m = matrix.Clone();
+ m.SetRow(0, CreateVector(matrix.ColumnCount));
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(i == 0 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Last Row
+ m = matrix.Clone();
+ m.SetRow(matrix.RowCount - 1, CreateVector(matrix.ColumnCount));
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(i == matrix.RowCount - 1 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Invalid Rows
+ Assert.That(() => matrix.SetRow(0, default(Vector)), Throws.InstanceOf());
+ Assert.That(() => matrix.SetRow(-1, CreateVector(matrix.ColumnCount)), Throws.InstanceOf());
+ Assert.That(() => matrix.SetRow(matrix.RowCount, CreateVector(matrix.ColumnCount)), Throws.InstanceOf());
+ Assert.That(() => matrix.SetRow(0, CreateVector(matrix.ColumnCount - 1)), Throws.ArgumentException);
+ Assert.That(() => matrix.SetRow(0, CreateVector(matrix.ColumnCount + 1)), Throws.ArgumentException);
+ }
+
+ [Theory, Timeout(200)]
+ public void CanSetRowArray(Matrix matrix)
+ {
+ // First Row
+ var m = matrix.Clone();
+ m.SetRow(0, CreateVector(matrix.ColumnCount).ToArray());
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(i == 0 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Last Row
+ m = matrix.Clone();
+ m.SetRow(matrix.RowCount - 1, new T[matrix.ColumnCount]);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(i == matrix.RowCount - 1 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Invalid Rows
+ Assert.That(() => matrix.SetRow(0, default(T[])), Throws.InstanceOf());
+ Assert.That(() => matrix.SetRow(-1, new T[matrix.ColumnCount]), Throws.InstanceOf());
+ Assert.That(() => matrix.SetRow(matrix.RowCount, new T[matrix.ColumnCount]), Throws.InstanceOf());
+ Assert.That(() => matrix.SetRow(0, new T[matrix.ColumnCount - 1]), Throws.ArgumentException);
+ Assert.That(() => matrix.SetRow(0, new T[matrix.ColumnCount + 1]), Throws.ArgumentException);
+ }
+
+ [Theory, Timeout(200)]
+ public void CanSetColumn(Matrix matrix)
+ {
+ // First Column
+ var m = matrix.Clone();
+ m.SetColumn(0, CreateVector(matrix.RowCount));
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(j == 0 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Last Column
+ m = matrix.Clone();
+ m.SetColumn(matrix.ColumnCount - 1, CreateVector(matrix.RowCount));
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(j == matrix.ColumnCount - 1 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Invalid Rows
+ Assert.That(() => matrix.SetColumn(0, default(Vector)), Throws.InstanceOf());
+ Assert.That(() => matrix.SetColumn(-1, CreateVector(matrix.RowCount)), Throws.InstanceOf());
+ Assert.That(() => matrix.SetColumn(matrix.ColumnCount, CreateVector(matrix.RowCount)), Throws.InstanceOf());
+ Assert.That(() => matrix.SetColumn(0, CreateVector(matrix.RowCount - 1)), Throws.ArgumentException);
+ Assert.That(() => matrix.SetColumn(0, CreateVector(matrix.RowCount + 1)), Throws.ArgumentException);
+ }
+
+ [Theory, Timeout(200)]
+ public void CanSetColumnArray(Matrix matrix)
+ {
+ // First Column
+ var m = matrix.Clone();
+ m.SetColumn(0, CreateVector(matrix.RowCount).ToArray());
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(j == 0 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Last Column
+ m = matrix.Clone();
+ m.SetColumn(matrix.ColumnCount - 1, new T[matrix.RowCount]);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(j == matrix.ColumnCount - 1 ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Invalid Rows
+ Assert.That(() => matrix.SetColumn(0, default(T[])), Throws.InstanceOf());
+ Assert.That(() => matrix.SetColumn(-1, new T[matrix.RowCount]), Throws.InstanceOf());
+ Assert.That(() => matrix.SetColumn(matrix.ColumnCount, new T[matrix.RowCount]), Throws.InstanceOf());
+ Assert.That(() => matrix.SetColumn(0, new T[matrix.RowCount - 1]), Throws.ArgumentException);
+ Assert.That(() => matrix.SetColumn(0, new T[matrix.RowCount + 1]), Throws.ArgumentException);
+ }
+
+ #endregion
+
+ #region Triangle Access
+
+ [Theory, Timeout(200)]
+ public void CanGetUpperTriangle(Matrix matrix)
+ {
+ var upper = matrix.UpperTriangle();
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(upper[i, j], Is.EqualTo(i <= j ? matrix[i, j] : Zero));
+ }
+ }
+ }
+
+ [Theory, Timeout(200)]
+ public void CanGetUpperTriangleIntoResult(Matrix matrix)
+ {
+ var dense = CreateDense(matrix.RowCount, matrix.ColumnCount);
+ matrix.UpperTriangle(dense);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(dense[i, j], Is.EqualTo(i <= j ? matrix[i, j] : Zero));
+ }
+ }
+
+ var sparse = CreateSparse(matrix.RowCount, matrix.ColumnCount);
+ matrix.UpperTriangle(sparse);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(sparse[i, j], Is.EqualTo(i <= j ? matrix[i, j] : Zero));
+ }
+ }
+
+ Assert.That(() => matrix.UpperTriangle(null), Throws.InstanceOf());
+ Assert.That(() => matrix.UpperTriangle(CreateSparse(matrix.RowCount + 1, matrix.ColumnCount)), Throws.ArgumentException);
+ Assert.That(() => matrix.UpperTriangle(CreateDense(matrix.RowCount, matrix.ColumnCount + 1)), Throws.ArgumentException);
+ }
+
+ [Theory, Timeout(200)]
+ public void CanGetLowerTriangle(Matrix matrix)
+ {
+ var upper = matrix.LowerTriangle();
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(upper[i, j], Is.EqualTo(i >= j ? matrix[i, j] : Zero));
+ }
+ }
+ }
+
+ [Theory, Timeout(200)]
+ public void CanGetLowerTriangleIntoResult(Matrix matrix)
+ {
+ var dense = CreateDense(matrix.RowCount, matrix.ColumnCount);
+ matrix.LowerTriangle(dense);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(dense[i, j], Is.EqualTo(i >= j ? matrix[i, j] : Zero));
+ }
+ }
+
+ var sparse = CreateSparse(matrix.RowCount, matrix.ColumnCount);
+ matrix.LowerTriangle(sparse);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(sparse[i, j], Is.EqualTo(i >= j ? matrix[i, j] : Zero));
+ }
+ }
+
+ Assert.That(() => matrix.LowerTriangle(null), Throws.InstanceOf());
+ Assert.That(() => matrix.LowerTriangle(CreateSparse(matrix.RowCount + 1, matrix.ColumnCount)), Throws.ArgumentException);
+ Assert.That(() => matrix.LowerTriangle(CreateDense(matrix.RowCount, matrix.ColumnCount + 1)), Throws.ArgumentException);
+ }
+
+ [Theory, Timeout(200)]
+ public void CanGetStrictlyUpperTriangle(Matrix matrix)
+ {
+ var upper = matrix.StrictlyUpperTriangle();
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(upper[i, j], Is.EqualTo(i < j ? matrix[i, j] : Zero));
+ }
+ }
+ }
+
+ [Theory, Timeout(200)]
+ public void CanGetStrictlyUpperTriangleIntoResult(Matrix matrix)
+ {
+ var dense = CreateDense(matrix.RowCount, matrix.ColumnCount);
+ matrix.StrictlyUpperTriangle(dense);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(dense[i, j], Is.EqualTo(i < j ? matrix[i, j] : Zero));
+ }
+ }
+
+ var sparse = CreateSparse(matrix.RowCount, matrix.ColumnCount);
+ matrix.StrictlyUpperTriangle(sparse);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(sparse[i, j], Is.EqualTo(i < j ? matrix[i, j] : Zero));
+ }
+ }
+
+ Assert.That(() => matrix.StrictlyUpperTriangle(null), Throws.InstanceOf());
+ Assert.That(() => matrix.StrictlyUpperTriangle(CreateSparse(matrix.RowCount + 1, matrix.ColumnCount)), Throws.ArgumentException);
+ Assert.That(() => matrix.StrictlyUpperTriangle(CreateDense(matrix.RowCount, matrix.ColumnCount + 1)), Throws.ArgumentException);
+ }
+
+ [Theory, Timeout(200)]
+ public void CanGetStrictlyLowerTriangle(Matrix matrix)
+ {
+ var upper = matrix.StrictlyLowerTriangle();
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(upper[i, j], Is.EqualTo(i > j ? matrix[i, j] : Zero));
+ }
+ }
+ }
+
+ [Theory, Timeout(200)]
+ public void CanGetStrictlyLowerTriangleIntoResult(Matrix matrix)
+ {
+ var dense = CreateDense(matrix.RowCount, matrix.ColumnCount);
+ matrix.StrictlyLowerTriangle(dense);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(dense[i, j], Is.EqualTo(i > j ? matrix[i, j] : Zero));
+ }
+ }
+
+ var sparse = CreateSparse(matrix.RowCount, matrix.ColumnCount);
+ matrix.StrictlyLowerTriangle(sparse);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(sparse[i, j], Is.EqualTo(i > j ? matrix[i, j] : Zero));
+ }
+ }
+
+ Assert.That(() => matrix.StrictlyLowerTriangle(null), Throws.InstanceOf());
+ Assert.That(() => matrix.StrictlyLowerTriangle(CreateSparse(matrix.RowCount + 1, matrix.ColumnCount)), Throws.ArgumentException);
+ Assert.That(() => matrix.StrictlyLowerTriangle(CreateDense(matrix.RowCount, matrix.ColumnCount + 1)), Throws.ArgumentException);
+ }
+
+ #endregion
+
+ #region Diagonal Access
+
+ [Theory, Timeout(200)]
+ public void CanGetDiagonal(Matrix matrix)
+ {
+ var diag = matrix.Diagonal();
+ Assert.That(diag.Count, Is.EqualTo(Math.Min(matrix.RowCount, matrix.ColumnCount)));
+ for (var i = 0; i < Math.Min(matrix.RowCount, matrix.ColumnCount); i++)
+ {
+ Assert.That(diag[i], Is.EqualTo(matrix[i, i]));
+ }
+ }
+
+ [Theory, Timeout(200)]
+ public void CanSetDiagonal(Matrix matrix)
+ {
+ var m = matrix.Clone();
+ m.SetDiagonal(CreateVector(Math.Min(matrix.RowCount, matrix.ColumnCount)));
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(i == j ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Invalid
+ Assert.That(() => matrix.SetDiagonal(default(Vector)), Throws.InstanceOf());
+ Assert.That(() => matrix.SetDiagonal(CreateVector(Math.Min(matrix.RowCount, matrix.ColumnCount) - 1)), Throws.ArgumentException);
+ Assert.That(() => matrix.SetDiagonal(CreateVector(Math.Min(matrix.RowCount, matrix.ColumnCount) + 1)), Throws.ArgumentException);
+ }
+
+ [Theory, Timeout(200)]
+ public void CanSetDiagonalArray(Matrix matrix)
+ {
+ var m = matrix.Clone();
+ m.SetDiagonal(new T[Math.Min(matrix.RowCount, matrix.ColumnCount)]);
+ for (var i = 0; i < matrix.RowCount; i++)
+ {
+ for (var j = 0; j < matrix.ColumnCount; j++)
+ {
+ Assert.That(m[i, j], Is.EqualTo(i == j ? Zero : matrix[i, j]));
+ }
+ }
+
+ // Invalid
+ Assert.That(() => matrix.SetDiagonal(default(T[])), Throws.InstanceOf());
+ Assert.That(() => matrix.SetDiagonal(new T[Math.Min(matrix.RowCount, matrix.ColumnCount) - 1]), Throws.ArgumentException);
+ Assert.That(() => matrix.SetDiagonal(new T[Math.Min(matrix.RowCount, matrix.ColumnCount) + 1]), Throws.ArgumentException);
+ }
+
+ #endregion
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs
index 622df1ec..71046b50 100644
--- a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs
@@ -319,94 +319,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column array.
- public override void CanSetColumnWithArray(string name, float[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithArray(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column values.
- public override void CanSetColumnWithVector(string name, float[] column)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetColumnWithVector(name, column);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row index.
- public override void CanSetRowWithArray(string name, float[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithArray(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row index.
- public override void CanSetRowWithVector(string name, float[] row)
- {
- try
- {
- // Pass all invoke to base
- base.CanSetRowWithVector(name, row);
- }
- catch (AggregateException ex)
- {
- // Supress only IndexOutOfRangeException exceptions due to Diagonal matrix nature
- if (ex.InnerExceptions.Any(innerException => !(innerException is IndexOutOfRangeException)))
- {
- throw;
- }
- }
- }
-
///
/// Can set a submatrix.
///
diff --git a/src/UnitTests/LinearAlgebraTests/Single/MatrixStructureTheory.cs b/src/UnitTests/LinearAlgebraTests/Single/MatrixStructureTheory.cs
index c55d3d20..4cc74623 100644
--- a/src/UnitTests/LinearAlgebraTests/Single/MatrixStructureTheory.cs
+++ b/src/UnitTests/LinearAlgebraTests/Single/MatrixStructureTheory.cs
@@ -45,5 +45,10 @@
{
return new DenseVector(size);
}
+
+ protected override float Zero
+ {
+ get { return 0f; }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs
index 48bb76ee..4aae70cf 100644
--- a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs
@@ -35,350 +35,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
///
public abstract partial class MatrixTests : MatrixLoader
{
- ///
- /// Can set a row.
- ///
- /// Row index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetRow(int rowIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetRow(rowIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(i == rowIndex ? 0.0f : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Can set a column.
- ///
- /// Column index.
- /// Matrix name.
- [TestCase(0, "Singular3x3")]
- [TestCase(1, "Square3x3")]
- [TestCase(2, "Square3x3")]
- public void CanSetColumn(int colIndex, string name)
- {
- var matrix = TestMatrices[name].Clone();
- matrix.SetColumn(colIndex, CreateVector(matrix.ColumnCount));
-
- for (var i = 0; i < matrix.RowCount; i++)
- {
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(j == colIndex ? 0.0f : TestMatrices[name][i, j], matrix[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangle(string name)
- {
- var data = TestMatrices[name];
- var upper = data.UpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : 0, upper[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanUpperTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.UpperTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i <= j ? data[i, j] : 0, result[i, j]);
- }
- }
- }
-
- ///
- /// Get an upper triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void UpperTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get an upper triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void UpperTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.UpperTriangle(result));
- }
-
- ///
- /// Get a lower triangle matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangle(string name)
- {
- var data = TestMatrices[name];
- var lower = data.LowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into a result matrix.
- ///
- /// Matrix name.
- [TestCase("Singular3x3")]
- [TestCase("Square3x3")]
- [TestCase("Square4x4")]
- [TestCase("Tall3x2")]
- [TestCase("Wide2x3")]
- public void CanLowerTriangleIntoResult(string name)
- {
- var data = TestMatrices[name];
- var result = CreateMatrix(data.RowCount, data.ColumnCount);
- data.LowerTriangle(result);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i >= j ? data[i, j] : 0, result[i, j]);
- }
- }
- }
-
- ///
- /// Get a lower triangle matrix into null result matrix throws ArgumentNullException.
- ///
- [Test]
- public void LowerTriangleIntoResultNullThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix result = null;
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal rows throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualRowsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a lower triangle into a result matrix with unequal columns throws ArgumentException.
- ///
- [Test]
- public void LowerTriangleIntoResultWithUnEqualColumnsThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var result = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.LowerTriangle(result));
- }
-
- ///
- /// Get a strictly lower triangle.
- ///
- [Test]
- public void CanStrictlyLowerTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyLowerTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyLowerTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyLowerTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i > j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly lower triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyLowerTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly lower triangle into result with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyLowerTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyLowerTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle.
- ///
- [Test]
- public void CanStrictlyUpperTriangle()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = data.StrictlyUpperTriangle();
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix.
- ///
- [Test]
- public void CanStrictlyUpperTriangleIntoResult()
- {
- foreach (var data in TestMatrices.Values)
- {
- var lower = CreateMatrix(data.RowCount, data.ColumnCount);
- data.StrictlyUpperTriangle(lower);
- for (var i = 0; i < data.RowCount; i++)
- {
- for (var j = 0; j < data.ColumnCount; j++)
- {
- Assert.AreEqual(i < j ? data[i, j] : 0, lower[i, j]);
- }
- }
- }
- }
-
- ///
- /// Get a strictly upper triangle with null parameter throws ArgumentNullException.
- ///
- [Test]
- public void StrictlyUpperTriangleWithNullParameterThrowsArgumentNullException()
- {
- var data = TestMatrices["Square3x3"];
- Matrix lower = null;
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal column number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalColumnNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount, data.ColumnCount + 1);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
- ///
- /// Get a strictly upper triangle into a result matrix with unequal row number throws ArgumentException.
- ///
- [Test]
- public void StrictlyUpperTriangleIntoResultWithUnequalRowNumberThrowsArgumentException()
- {
- var data = TestMatrices["Square3x3"];
- var lower = CreateMatrix(data.RowCount + 1, data.ColumnCount);
- Assert.Throws(() => data.StrictlyUpperTriangle(lower));
- }
-
///
/// Can transpose a matrix.
///
@@ -405,117 +61,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
}
}
- ///
- /// Can set a column with an array.
- ///
- /// Matrix name.
- /// Column array.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- public virtual void CanSetColumnWithArray(string name, float[] column)
- {
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], column[j]);
- }
- }
- }
-
- ///
- /// Set a column with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetColumnWithNullArrayThrowsArgumentNullException()
- {
- float[] vec = null;
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, vec));
- }
-
- ///
- /// Set a column with unequal array length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithArrayUnequalLengthThrowsArgumentException()
- {
- var array = new float[] { 1, 2, 3, 4, 5 };
- Assert.Throws(() => TestMatrices["Singular3x3"].SetColumn(1, array));
- }
-
- ///
- /// Set a column array with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithArrayWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- float[] column = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- Assert.Throws(() => matrix.SetColumn(-1, column));
- }
-
- ///
- /// Can set a column with a vector.
- ///
- /// Matrix name.
- /// Column values.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- public virtual void CanSetColumnWithVector(string name, float[] column)
- {
- var matrix = TestMatrices[name];
- var columnVector = CreateVector(column);
- for (var i = 0; i < matrix.ColumnCount; i++)
- {
- matrix.SetColumn(i, column);
- for (var j = 0; j < matrix.RowCount; j++)
- {
- Assert.AreEqual(matrix[j, i], columnVector[j]);
- }
- }
- }
-
- ///
- /// Set a column with vector with wrong length throws ArgumentException.
- ///
- [Test]
- public virtual void SetColumnWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var matrix = TestMatrices["Singular3x3"];
- var columnVector = CreateVector(new float[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set a column with null vector throw ArgumentNullException.
- ///
- [Test]
- public void SetColumnWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector columnVector = null;
- Assert.Throws(() => matrix.SetColumn(1, columnVector));
- }
-
- ///
- /// Set column vector with invalid column index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetColumnWithVectorWithInvalidColumnIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var column = CreateVector(new float[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetColumn(-1, column));
- Assert.Throws(() => matrix.SetColumn(matrix.ColumnCount + 1, column));
- }
-
///
/// Can insert a column.
///
@@ -576,106 +121,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
Assert.Throws(() => matrix.InsertColumn(0, column));
}
- ///
- /// Can set a row with an array.
- ///
- /// Matrix name.
- /// Row index.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- [TestCase("Wide2x3", new float[] { 1, 2, 3 })]
- public virtual void CanSetRowWithArray(string name, float[] row)
- {
- var matrix = TestMatrices[name];
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], row[j]);
- }
- }
- }
-
- ///
- /// Set a row with null array throws ArgumentNullException.
- ///
- [Test]
- public virtual void SetRowWithNullArrayThrowsArgumentNullException()
- {
- float[] arr = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, arr));
- }
-
- ///
- /// Set a row with an array with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithArrayWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- float[] row = { 1, 2, 3 };
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
- ///
- /// Can set a row with a vector.
- ///
- /// Matrix name.
- /// Row index.
- [TestCase("Singular3x3", new float[] { 1, 2, 3 })]
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- [TestCase("Wide2x3", new float[] { 1, 2, 3 })]
- public virtual void CanSetRowWithVector(string name, float[] row)
- {
- var matrix = TestMatrices[name];
- var rowVector = CreateVector(row);
- for (var i = 0; i < matrix.RowCount; i++)
- {
- matrix.SetRow(i, row);
- for (var j = 0; j < matrix.ColumnCount; j++)
- {
- Assert.AreEqual(matrix[i, j], rowVector[j]);
- }
- }
- }
-
- ///
- /// Set a row with a vector of unequal length throws ArgumentException.
- ///
- [Test]
- public virtual void SetRowWithVectorWithUnequalLengthThrowsArgumentException()
- {
- var vec = CreateVector(new float[] { 1, 2, 3, 4, 5 });
- Assert.Throws(() => TestMatrices["Square3x3"].SetRow(1, vec));
- }
-
- ///
- /// Set a row with a null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetRowWithNullVectorThrowsArgumentNullException()
- {
- var matrix = TestMatrices["Square3x3"];
- Vector rowVector = null;
- Assert.Throws(() => matrix.SetRow(1, rowVector));
- }
-
- ///
- /// Set a row with a vector with invalid row index throws ArgumentOutOfRangeException.
- ///
- [Test]
- public void SetRowWithVectorWithInvalidRowIndexThrowsArgumentOutOfRangeException()
- {
- var matrix = TestMatrices["Square3x3"];
- var row = CreateVector(new float[] { 1, 2, 3 });
- Assert.Throws(() => matrix.SetRow(-1, row));
- Assert.Throws(() => matrix.SetRow(matrix.RowCount + 1, row));
- }
-
///
/// Can set a submatrix.
///
@@ -758,91 +203,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
Assert.Throws(() => TestMatrices["Square3x3"].SetSubMatrix(0, 2, 0, 2, subMatrix));
}
- ///
- /// Can set a diagonal vector.
- ///
- /// Matrix name.
- /// Diagonal vector.
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- public void CanSetDiagonalVector(string name, float[] diagonal)
- {
- var matrix = TestMatrices[name];
- var vector = CreateVector(diagonal);
- matrix.SetDiagonal(vector);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < vector.Count; i++)
- {
- Assert.AreEqual(vector[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal vector with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalVectorWithUnequalLengthThrowsArgumentException()
- {
- var vector = CreateVector(new float[] { 1, 2, 3 });
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(vector));
- }
-
- ///
- /// Set a diagonal with null vector throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullVectorThrowsArgumentNullException()
- {
- Vector vector = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(vector));
- }
-
- ///
- /// Can set a diagonal array.
- ///
- /// Matrix name.
- /// Diagonal array.
- [TestCase("Square3x3", new float[] { 1, 2, 3 })]
- [TestCase("Wide2x3", new float[] { 1, 2 })]
- [TestCase("Tall3x2", new float[] { 1, 2 })]
- public void CanSetDiagonalArray(string name, float[] diagonal)
- {
- var matrix = TestMatrices[name];
- matrix.SetDiagonal(diagonal);
-
- var min = Math.Min(matrix.ColumnCount, matrix.RowCount);
- Assert.AreEqual(diagonal.Length, min);
-
- for (var i = 0; i < diagonal.Length; i++)
- {
- Assert.AreEqual(diagonal[i], matrix[i, i]);
- }
- }
-
- ///
- /// Set a diagonal array with unequal length throws ArgumentException.
- ///
- [Test]
- public void SetDiagonalArrayWithUnequalLengthThrowsArgumentException()
- {
- var array = new float[] { 1, 2, 3 };
- Assert.Throws(() => TestMatrices["Wide2x3"].SetDiagonal(array));
- }
-
- ///
- /// Set a diagonal with null array throws ArgumentNullException.
- ///
- [Test]
- public void SetDiagonalWithNullArrayThrowsArgumentNullException()
- {
- float[] array = null;
- Assert.Throws(() => TestMatrices["Square3x3"].SetDiagonal(array));
- }
-
///
/// Can insert a row.
///