Browse Source

Tests: replace matrix structural tests with theory (part 8) - ToArray, Create, Iterate

la-knuth
Christoph Ruegg 14 years ago
parent
commit
95219f9963
  1. 65
      src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
  2. 197
      src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs
  3. 65
      src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
  4. 197
      src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs
  5. 65
      src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
  6. 197
      src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
  7. 138
      src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.cs
  8. 66
      src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs
  9. 197
      src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs

65
src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs

@ -369,71 +369,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
Assert.Throws<ArgumentException>(() => matrix.Determinant());
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public override void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex(1.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(Complex.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(Complex.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(Complex.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(Complex.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(Complex.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(Complex.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(Complex.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex(3.0, 1.0), item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>

197
src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs

@ -26,9 +26,7 @@
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
{
using System;
using System.Numerics;
using LinearAlgebra.Generic;
using NUnit.Framework;
/// <summary>
@ -88,70 +86,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
}
}
/// <summary>
/// Can convert a matrix to a multidimensional array.
/// </summary>
[Test]
public void CanToArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToArray();
Assert.AreEqual(data.RowCount, array.GetLength(0));
Assert.AreEqual(data.ColumnCount, array.GetLength(1));
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[i, j]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a column-wise array.
/// </summary>
[Test]
public void CanToColumnWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToColumnWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(j * data.RowCount) + i]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a row-wise array.
/// </summary>
[Test]
public void CanToRowWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToRowWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(i * data.ColumnCount) + j]);
}
}
}
}
/// <summary>
/// Can compute Frobenius norm.
/// </summary>
@ -215,71 +149,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
AssertHelpers.AlmostEqual(7.35826643761172, matrix.L2Norm(), 14);
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public virtual void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex(1.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(new Complex(1.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex(2.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex(1.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(new Complex(1.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex(2.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex(1.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(new Complex(1.0, 1.0), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex(2.0, 1.0), item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>
@ -292,71 +161,5 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
/// <summary>
/// Test whether we can create a matrix from a list of column vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromColumns()
{
var column1 = CreateVector(new Complex[] { 1.0 });
var column2 = CreateVector(new Complex[] { 1.0, 2.0, 3.0, 4.0 });
var column3 = CreateVector(new Complex[] { 1.0, 2.0 });
var columnVectors = new System.Collections.Generic.List<Vector<Complex>>
{
column1,
column2,
column3
};
var matrix = Matrix<Complex>.CreateFromColumns(columnVectors);
Assert.AreEqual(matrix.RowCount, 4);
Assert.AreEqual(matrix.ColumnCount, 3);
Assert.AreEqual(1.0, matrix[0, 0].Real);
Assert.AreEqual(0.0, matrix[1, 0].Real);
Assert.AreEqual(0.0, matrix[2, 0].Real);
Assert.AreEqual(0.0, matrix[3, 0].Real);
Assert.AreEqual(1.0, matrix[0, 1].Real);
Assert.AreEqual(2.0, matrix[1, 1].Real);
Assert.AreEqual(3.0, matrix[2, 1].Real);
Assert.AreEqual(4.0, matrix[3, 1].Real);
Assert.AreEqual(1.0, matrix[0, 2].Real);
Assert.AreEqual(2.0, matrix[1, 2].Real);
Assert.AreEqual(0.0, matrix[2, 2].Real);
Assert.AreEqual(0.0, matrix[3, 2].Real);
}
/// <summary>
/// Test whether we can create a matrix from a list of row vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromRows()
{
var row1 = CreateVector(new Complex[] { 1.0 });
var row2 = CreateVector(new Complex[] { 1.0, 2.0, 3.0, 4.0 });
var row3 = CreateVector(new Complex[] { 1.0, 2.0 });
var rowVectors = new System.Collections.Generic.List<Vector<Complex>>
{
row1,
row2,
row3
};
var matrix = Matrix<Complex>.CreateFromRows(rowVectors);
Assert.AreEqual(matrix.RowCount, 3);
Assert.AreEqual(matrix.ColumnCount, 4);
Assert.AreEqual(1.0, matrix[0, 0].Real);
Assert.AreEqual(0.0, matrix[0, 1].Real);
Assert.AreEqual(0.0, matrix[0, 2].Real);
Assert.AreEqual(0.0, matrix[0, 3].Real);
Assert.AreEqual(1.0, matrix[1, 0].Real);
Assert.AreEqual(2.0, matrix[1, 1].Real);
Assert.AreEqual(3.0, matrix[1, 2].Real);
Assert.AreEqual(4.0, matrix[1, 3].Real);
Assert.AreEqual(1.0, matrix[2, 0].Real);
Assert.AreEqual(2.0, matrix[2, 1].Real);
Assert.AreEqual(0.0, matrix[2, 2].Real);
Assert.AreEqual(0.0, matrix[2, 3].Real);
}
}
}

65
src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs

@ -369,71 +369,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
Assert.Throws<ArgumentException>(() => matrix.Determinant());
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public override void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(Complex32.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(Complex32.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(Complex32.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(Complex32.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(Complex32.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(Complex32.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(Complex32.Zero, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex32(3.0f, 1.0f), item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>

197
src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs

@ -26,8 +26,6 @@
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
{
using System;
using LinearAlgebra.Generic;
using NUnit.Framework;
using Complex32 = Numerics.Complex32;
@ -88,70 +86,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
}
}
/// <summary>
/// Can convert a matrix to a multidimensional array.
/// </summary>
[Test]
public void CanToArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToArray();
Assert.AreEqual(data.RowCount, array.GetLength(0));
Assert.AreEqual(data.ColumnCount, array.GetLength(1));
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[i, j]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a column-wise array.
/// </summary>
[Test]
public void CanToColumnWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToColumnWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(j * data.RowCount) + i]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a row-wise array.
/// </summary>
[Test]
public void CanToRowWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToRowWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(i * data.ColumnCount) + j]);
}
}
}
}
/// <summary>
/// Can compute Frobenius norm.
/// </summary>
@ -215,71 +149,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
AssertHelpers.AlmostEqual(7.3582664f, matrix.L2Norm().Real, 6);
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public virtual void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(new Complex32(1.0f, 1.0f), item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(new Complex32(2.0f, 1.0f), item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>
@ -292,71 +161,5 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
/// <summary>
/// Test whether we can create a matrix from a list of column vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromColumns()
{
var column1 = CreateVector(new Complex32[] { 1.0f });
var column2 = CreateVector(new Complex32[] { 1.0f, 2.0f, 3.0f, 4.0f });
var column3 = CreateVector(new Complex32[] { 1.0f, 2.0f });
var columnVectors = new System.Collections.Generic.List<Vector<Complex32>>
{
column1,
column2,
column3
};
var matrix = Matrix<Complex32>.CreateFromColumns(columnVectors);
Assert.AreEqual(matrix.RowCount, 4);
Assert.AreEqual(matrix.ColumnCount, 3);
Assert.AreEqual(1.0, matrix[0, 0].Real);
Assert.AreEqual(0.0, matrix[1, 0].Real);
Assert.AreEqual(0.0, matrix[2, 0].Real);
Assert.AreEqual(0.0, matrix[3, 0].Real);
Assert.AreEqual(1.0, matrix[0, 1].Real);
Assert.AreEqual(2.0, matrix[1, 1].Real);
Assert.AreEqual(3.0, matrix[2, 1].Real);
Assert.AreEqual(4.0, matrix[3, 1].Real);
Assert.AreEqual(1.0, matrix[0, 2].Real);
Assert.AreEqual(2.0, matrix[1, 2].Real);
Assert.AreEqual(0.0, matrix[2, 2].Real);
Assert.AreEqual(0.0, matrix[3, 2].Real);
}
/// <summary>
/// Test whether we can create a matrix from a list of row vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromRows()
{
var row1 = CreateVector(new Complex32[] { 1.0f });
var row2 = CreateVector(new Complex32[] { 1.0f, 2.0f, 3.0f, 4.0f });
var row3 = CreateVector(new Complex32[] { 1.0f, 2.0f });
var rowVectors = new System.Collections.Generic.List<Vector<Complex32>>
{
row1,
row2,
row3
};
var matrix = Matrix<Complex32>.CreateFromRows(rowVectors);
Assert.AreEqual(matrix.RowCount, 3);
Assert.AreEqual(matrix.ColumnCount, 4);
Assert.AreEqual(1.0, matrix[0, 0].Real);
Assert.AreEqual(0.0, matrix[0, 1].Real);
Assert.AreEqual(0.0, matrix[0, 2].Real);
Assert.AreEqual(0.0, matrix[0, 3].Real);
Assert.AreEqual(1.0, matrix[1, 0].Real);
Assert.AreEqual(2.0, matrix[1, 1].Real);
Assert.AreEqual(3.0, matrix[1, 2].Real);
Assert.AreEqual(4.0, matrix[1, 3].Real);
Assert.AreEqual(1.0, matrix[2, 0].Real);
Assert.AreEqual(2.0, matrix[2, 1].Real);
Assert.AreEqual(0.0, matrix[2, 2].Real);
Assert.AreEqual(0.0, matrix[2, 3].Real);
}
}
}

65
src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs

@ -369,71 +369,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
Assert.Throws<ArgumentException>(() => matrix.Determinant());
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public override void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(0.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(0.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(0.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(0.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(0.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(0.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(0.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(3.0, item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>

197
src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs

@ -26,8 +26,6 @@
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
{
using System;
using LinearAlgebra.Generic;
using NUnit.Framework;
/// <summary>
@ -61,70 +59,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
}
}
/// <summary>
/// Can convert a matrix to a multidimensional array.
/// </summary>
[Test]
public void CanToArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToArray();
Assert.AreEqual(data.RowCount, array.GetLength(0));
Assert.AreEqual(data.ColumnCount, array.GetLength(1));
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[i, j]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a column-wise array.
/// </summary>
[Test]
public void CanToColumnWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToColumnWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(j * data.RowCount) + i]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a row-wise array.
/// </summary>
[Test]
public void CanToRowWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToRowWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(i * data.ColumnCount) + j]);
}
}
}
}
/// <summary>
/// Can compute Frobenius norm.
/// </summary>
@ -188,71 +122,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
AssertHelpers.AlmostEqual(7.182727033856683, matrix.L2Norm(), 14);
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public virtual void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(1.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(2.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(1.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(2.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(1.0, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(2.0, item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>
@ -265,71 +134,5 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
/// <summary>
/// Test whether we can create a matrix from a list of column vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromColumns()
{
var column1 = CreateVector(new[] { 1.0 });
var column2 = CreateVector(new[] { 1.0, 2.0, 3.0, 4.0 });
var column3 = CreateVector(new[] { 1.0, 2.0 });
var columnVectors = new System.Collections.Generic.List<Vector<double>>
{
column1,
column2,
column3
};
var matrix = Matrix<double>.CreateFromColumns(columnVectors);
Assert.AreEqual(matrix.RowCount, 4);
Assert.AreEqual(matrix.ColumnCount, 3);
Assert.AreEqual(1.0, matrix[0, 0]);
Assert.AreEqual(0.0, matrix[1, 0]);
Assert.AreEqual(0.0, matrix[2, 0]);
Assert.AreEqual(0.0, matrix[3, 0]);
Assert.AreEqual(1.0, matrix[0, 1]);
Assert.AreEqual(2.0, matrix[1, 1]);
Assert.AreEqual(3.0, matrix[2, 1]);
Assert.AreEqual(4.0, matrix[3, 1]);
Assert.AreEqual(1.0, matrix[0, 2]);
Assert.AreEqual(2.0, matrix[1, 2]);
Assert.AreEqual(0.0, matrix[2, 2]);
Assert.AreEqual(0.0, matrix[3, 2]);
}
/// <summary>
/// Test whether we can create a matrix from a list of row vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromRows()
{
var row1 = CreateVector(new[] { 1.0 });
var row2 = CreateVector(new[] { 1.0, 2.0, 3.0, 4.0 });
var row3 = CreateVector(new[] { 1.0, 2.0 });
var rowVectors = new System.Collections.Generic.List<Vector<double>>
{
row1,
row2,
row3
};
var matrix = Matrix<double>.CreateFromRows(rowVectors);
Assert.AreEqual(matrix.RowCount, 3);
Assert.AreEqual(matrix.ColumnCount, 4);
Assert.AreEqual(1.0, matrix[0, 0]);
Assert.AreEqual(0.0, matrix[0, 1]);
Assert.AreEqual(0.0, matrix[0, 2]);
Assert.AreEqual(0.0, matrix[0, 3]);
Assert.AreEqual(1.0, matrix[1, 0]);
Assert.AreEqual(2.0, matrix[1, 1]);
Assert.AreEqual(3.0, matrix[1, 2]);
Assert.AreEqual(4.0, matrix[1, 3]);
Assert.AreEqual(1.0, matrix[2, 0]);
Assert.AreEqual(2.0, matrix[2, 1]);
Assert.AreEqual(0.0, matrix[2, 2]);
Assert.AreEqual(0.0, matrix[2, 3]);
}
}
}

138
src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.cs

@ -1,4 +1,6 @@
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests
using System.Collections.Generic;
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests
{
using System;
using LinearAlgebra.Generic;
@ -90,6 +92,57 @@
Assert.That(() => matrix.CopyTo(CreateDense(matrix.RowCount, matrix.ColumnCount + 1)), Throws.ArgumentException);
}
[Theory, Timeout(200)]
public void CanGetHashCode(Matrix<T> matrix)
{
Assert.That(matrix.GetHashCode(), Is.Not.EqualTo(matrix.CreateMatrix(matrix.RowCount, matrix.ColumnCount).GetHashCode()));
}
[Theory, Timeout(200)]
public void CanClear(Matrix<T> matrix)
{
var cleared = matrix.Clone();
cleared.Clear();
Assert.That(cleared, Is.EqualTo(matrix.CreateMatrix(matrix.RowCount, matrix.ColumnCount)));
}
[Theory, Timeout(200)]
public void CanToArray(Matrix<T> matrix)
{
var array = matrix.ToArray();
Assert.That(array.GetLength(0), Is.EqualTo(matrix.RowCount));
Assert.That(array.GetLength(1), Is.EqualTo(matrix.ColumnCount));
for (var i = 0; i < matrix.RowCount; i++)
{
for (var j = 0; j < matrix.ColumnCount; j++)
{
Assert.That(array[i, j], Is.EqualTo(matrix[i, j]));
}
}
}
[Theory, Timeout(200)]
public void CanToColumnWiseArray(Matrix<T> matrix)
{
var array = matrix.ToColumnWiseArray();
Assert.That(array.Length, Is.EqualTo(matrix.RowCount * matrix.ColumnCount));
for (int i = 0; i < array.Length; i++)
{
Assert.That(array[i], Is.EqualTo(matrix[i % matrix.RowCount, i / matrix.RowCount]));
}
}
[Theory, Timeout(200)]
public void CanToRowWiseArray(Matrix<T> matrix)
{
var array = matrix.ToRowWiseArray();
Assert.That(array.Length, Is.EqualTo(matrix.RowCount * matrix.ColumnCount));
for (int i = 0; i < array.Length; i++)
{
Assert.That(array[i], Is.EqualTo(matrix[i / matrix.ColumnCount, i % matrix.ColumnCount]));
}
}
[Theory, Timeout(200)]
public void CanCreateSameType(Matrix<T> matrix)
{
@ -102,18 +155,85 @@
Assert.That(() => matrix.CreateMatrix(-1, -1), Throws.InstanceOf<ArgumentOutOfRangeException>());
}
[Theory, Timeout(200)]
public void CanGetHashCode(Matrix<T> matrix)
[Test, Timeout(200)]
public void CanCreateFromColumns()
{
Assert.That(matrix.GetHashCode(), Is.Not.EqualTo(matrix.CreateMatrix(matrix.RowCount, matrix.ColumnCount).GetHashCode()));
var column1 = CreateVector(1, 0);
var column2 = CreateVector(4, 1);
var column3 = CreateVector(2, 3);
var matrix = Matrix<T>.CreateFromColumns(new List<Vector<T>>
{
column1,
column2,
column3
});
Assert.That(matrix.RowCount, Is.EqualTo(4));
Assert.That(matrix.ColumnCount, Is.EqualTo(3));
Assert.That(matrix[0, 0], Is.EqualTo(column1[0]));
Assert.That(matrix[0, 1], Is.EqualTo(column2[0]));
Assert.That(matrix[1, 1], Is.EqualTo(column2[1]));
Assert.That(matrix[2, 1], Is.EqualTo(column2[2]));
Assert.That(matrix[3, 1], Is.EqualTo(column2[3]));
Assert.That(matrix[0, 2], Is.EqualTo(column3[0]));
Assert.That(matrix[1, 2], Is.EqualTo(column3[1]));
Assert.That(matrix[1, 0], Is.EqualTo(Zero));
Assert.That(matrix[2, 0], Is.EqualTo(Zero));
Assert.That(matrix[3, 0], Is.EqualTo(Zero));
Assert.That(matrix[2, 2], Is.EqualTo(Zero));
Assert.That(matrix[3, 2], Is.EqualTo(Zero));
}
[Theory, Timeout(200)]
public void CanClear(Matrix<T> matrix)
[Test, Timeout(200)]
public void CanCreateFromRows()
{
var cleared = matrix.Clone();
cleared.Clear();
Assert.That(cleared, Is.EqualTo(matrix.CreateMatrix(matrix.RowCount, matrix.ColumnCount)));
var row1 = CreateVector(1, 0);
var row2 = CreateVector(4, 1);
var row3 = CreateVector(2, 3);
var matrix = Matrix<T>.CreateFromRows(new List<Vector<T>>
{
row1,
row2,
row3
});
Assert.That(matrix.RowCount, Is.EqualTo(3));
Assert.That(matrix.ColumnCount, Is.EqualTo(4));
Assert.That(matrix[0, 0], Is.EqualTo(row1[0]));
Assert.That(matrix[1, 0], Is.EqualTo(row2[0]));
Assert.That(matrix[1, 1], Is.EqualTo(row2[1]));
Assert.That(matrix[1, 2], Is.EqualTo(row2[2]));
Assert.That(matrix[1, 3], Is.EqualTo(row2[3]));
Assert.That(matrix[2, 0], Is.EqualTo(row3[0]));
Assert.That(matrix[2, 1], Is.EqualTo(row3[1]));
Assert.That(matrix[0, 1], Is.EqualTo(Zero));
Assert.That(matrix[0, 2], Is.EqualTo(Zero));
Assert.That(matrix[0, 3], Is.EqualTo(Zero));
Assert.That(matrix[2, 2], Is.EqualTo(Zero));
Assert.That(matrix[2, 3], Is.EqualTo(Zero));
}
[Test, Timeout(200)]
public void CanEnumerateWithIndex()
{
var dense = CreateDense(2, 3, 0);
using(var enumerator = dense.IndexedEnumerator().GetEnumerator())
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
enumerator.MoveNext();
Assert.AreEqual(i, enumerator.Current.Item1);
Assert.AreEqual(j, enumerator.Current.Item2);
Assert.AreEqual(dense[i, j], enumerator.Current.Item3);
}
}
}
}
}

66
src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs

@ -368,72 +368,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
Assert.Throws<ArgumentException>(() => matrix.Determinant());
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public override void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(0.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(0.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(0.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(0.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(0.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(0.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(0.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(3.0f, item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>

197
src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs

@ -26,8 +26,6 @@
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
{
using System;
using LinearAlgebra.Generic;
using NUnit.Framework;
/// <summary>
@ -61,70 +59,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
}
}
/// <summary>
/// Can convert a matrix to a multidimensional array.
/// </summary>
[Test]
public void CanToArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToArray();
Assert.AreEqual(data.RowCount, array.GetLength(0));
Assert.AreEqual(data.ColumnCount, array.GetLength(1));
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[i, j]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a column-wise array.
/// </summary>
[Test]
public void CanToColumnWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToColumnWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(j * data.RowCount) + i]);
}
}
}
}
/// <summary>
/// Can convert a matrix to a row-wise array.
/// </summary>
[Test]
public void CanToRowWiseArray()
{
foreach (var data in TestMatrices.Values)
{
var array = data.ToRowWiseArray();
Assert.AreEqual(data.RowCount * data.ColumnCount, array.Length);
for (var i = 0; i < data.RowCount; i++)
{
for (var j = 0; j < data.ColumnCount; j++)
{
Assert.AreEqual(data[i, j], array[(i * data.ColumnCount) + j]);
}
}
}
}
/// <summary>
/// Can compute Frobenius norm.
/// </summary>
@ -188,71 +122,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
AssertHelpers.AlmostEqual(7.182727033856683f, matrix.L2Norm(), 5);
}
/// <summary>
/// Test whether the index enumerator returns the correct values.
/// </summary>
[Test]
public virtual void CanUseIndexedEnumerator()
{
var matrix = TestMatrices["Singular3x3"];
using (var enumerator = matrix.IndexedEnumerator().GetEnumerator())
{
enumerator.MoveNext();
var item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(1.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(0, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(2.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(1.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(1, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(2.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(0, item.Item2);
Assert.AreEqual(1.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(1, item.Item2);
Assert.AreEqual(1.0f, item.Item3);
enumerator.MoveNext();
item = enumerator.Current;
Assert.AreEqual(2, item.Item1);
Assert.AreEqual(2, item.Item2);
Assert.AreEqual(2.0f, item.Item3);
}
}
/// <summary>
/// Can check if a matrix is symmetric.
/// </summary>
@ -265,71 +134,5 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
/// <summary>
/// Test whether we can create a matrix from a list of column vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromColumns()
{
var column1 = CreateVector(new[] { 1.0f });
var column2 = CreateVector(new[] { 1.0f, 2.0f, 3.0f, 4.0f });
var column3 = CreateVector(new[] { 1.0f, 2.0f });
var columnVectors = new System.Collections.Generic.List<Vector<float>>
{
column1,
column2,
column3
};
var matrix = Matrix<float>.CreateFromColumns(columnVectors);
Assert.AreEqual(matrix.RowCount, 4);
Assert.AreEqual(matrix.ColumnCount, 3);
Assert.AreEqual(1.0, matrix[0, 0]);
Assert.AreEqual(0.0, matrix[1, 0]);
Assert.AreEqual(0.0, matrix[2, 0]);
Assert.AreEqual(0.0, matrix[3, 0]);
Assert.AreEqual(1.0, matrix[0, 1]);
Assert.AreEqual(2.0, matrix[1, 1]);
Assert.AreEqual(3.0, matrix[2, 1]);
Assert.AreEqual(4.0, matrix[3, 1]);
Assert.AreEqual(1.0, matrix[0, 2]);
Assert.AreEqual(2.0, matrix[1, 2]);
Assert.AreEqual(0.0, matrix[2, 2]);
Assert.AreEqual(0.0, matrix[3, 2]);
}
/// <summary>
/// Test whether we can create a matrix from a list of row vectors.
/// </summary>
[Test]
public virtual void CanCreateMatrixFromRows()
{
var row1 = CreateVector(new[] { 1.0f });
var row2 = CreateVector(new[] { 1.0f, 2.0f, 3.0f, 4.0f });
var row3 = CreateVector(new[] { 1.0f, 2.0f });
var rowVectors = new System.Collections.Generic.List<Vector<float>>
{
row1,
row2,
row3
};
var matrix = Matrix<float>.CreateFromRows(rowVectors);
Assert.AreEqual(matrix.RowCount, 3);
Assert.AreEqual(matrix.ColumnCount, 4);
Assert.AreEqual(1.0, matrix[0, 0]);
Assert.AreEqual(0.0, matrix[0, 1]);
Assert.AreEqual(0.0, matrix[0, 2]);
Assert.AreEqual(0.0, matrix[0, 3]);
Assert.AreEqual(1.0, matrix[1, 0]);
Assert.AreEqual(2.0, matrix[1, 1]);
Assert.AreEqual(3.0, matrix[1, 2]);
Assert.AreEqual(4.0, matrix[1, 3]);
Assert.AreEqual(1.0, matrix[2, 0]);
Assert.AreEqual(2.0, matrix[2, 1]);
Assert.AreEqual(0.0, matrix[2, 2]);
Assert.AreEqual(0.0, matrix[2, 3]);
}
}
}

Loading…
Cancel
Save