diff --git a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs index 7cc5299d..92be7284 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs @@ -280,22 +280,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex Assert.Throws(() => matrixp.PermuteColumns(permutation)); } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - public override void CanPermuteMatrixRows(string name) - { - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - public override void CanPermuteMatrixColumns(string name) - { - } - /// /// Can pointwise divide matrices into a result matrix. /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs index f7b5060b..9d2a096f 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs @@ -152,60 +152,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex } } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Tall3x2")] - public virtual void CanPermuteMatrixRows(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteRows(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[permutation[i], j]); - } - } - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Wide2x3")] - public virtual void CanPermuteMatrixColumns(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteColumns(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[i, permutation[j]]); - } - } - } - /// /// Can append matrices. /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs index bdde8a11..3321b0a4 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs @@ -280,22 +280,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 Assert.Throws(() => matrixp.PermuteColumns(permutation)); } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - public override void CanPermuteMatrixRows(string name) - { - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - public override void CanPermuteMatrixColumns(string name) - { - } - /// /// Can pointwise divide matrices into a result matrix. /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs index fb454064..b8bb356e 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs @@ -152,60 +152,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 } } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Tall3x2")] - public virtual void CanPermuteMatrixRows(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteRows(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[permutation[i], j]); - } - } - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Wide2x3")] - public virtual void CanPermuteMatrixColumns(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteColumns(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[i, permutation[j]]); - } - } - } - /// /// Can append matrices. /// diff --git a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs index a00a7c02..86cbef04 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs @@ -280,22 +280,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double Assert.Throws(() => matrixp.PermuteColumns(permutation)); } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - public override void CanPermuteMatrixRows(string name) - { - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - public override void CanPermuteMatrixColumns(string name) - { - } - /// /// Can pointwise divide matrices into a result matrix. /// diff --git a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs index 2ae08413..add92612 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs @@ -125,60 +125,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double } } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Tall3x2")] - public virtual void CanPermuteMatrixRows(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteRows(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[permutation[i], j]); - } - } - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Wide2x3")] - public virtual void CanPermuteMatrixColumns(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteColumns(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[i, permutation[j]]); - } - } - } - /// /// Can append matrices. /// diff --git a/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.Reform.cs b/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.Reform.cs index 5504d2e3..81f5d28b 100644 --- a/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.Reform.cs +++ b/src/UnitTests/LinearAlgebraTests/MatrixStructureTheory.Reform.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using MathNet.Numerics.LinearAlgebra.Generic; using NUnit.Framework; @@ -6,6 +7,64 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests { partial class MatrixStructureTheory { + [Theory, Timeout(200)] + public void CanPermuteRows(Matrix matrix) + { + var m = matrix.Clone(); + var rnd = new System.Random(0); + var permutation = new Permutation(Enumerable.Range(0, matrix.RowCount).OrderBy(i => rnd.Next()).ToArray()); + + try + { + m.PermuteRows(permutation); + } + catch(InvalidOperationException) + { + Assert.Ignore("Matrix type {0} does not support permutations", matrix.GetType().FullName); + } + + Assert.That(m, Is.Not.SameAs(matrix)); + Assert.That(m.RowCount, Is.EqualTo(matrix.RowCount)); + Assert.That(m.ColumnCount, Is.EqualTo(matrix.ColumnCount)); + var inverse = permutation.Inverse(); + for (var i = 0; i < matrix.RowCount; i++) + { + for (var j = 0; j < matrix.ColumnCount; j++) + { + Assert.That(m[i, j], Is.EqualTo(matrix[inverse[i], j])); + } + } + } + + [Theory, Timeout(200)] + public void CanPermuteColumns(Matrix matrix) + { + var m = matrix.Clone(); + var rnd = new System.Random(0); + var permutation = new Permutation(Enumerable.Range(0, matrix.ColumnCount).OrderBy(i => rnd.Next()).ToArray()); + + try + { + m.PermuteColumns(permutation); + } + catch (InvalidOperationException) + { + Assert.Ignore("Matrix type {0} does not support permutations", matrix.GetType().FullName); + } + + Assert.That(m, Is.Not.SameAs(matrix)); + Assert.That(m.RowCount, Is.EqualTo(matrix.RowCount)); + Assert.That(m.ColumnCount, Is.EqualTo(matrix.ColumnCount)); + var inverse = permutation.Inverse(); + for (var i = 0; i < matrix.RowCount; i++) + { + for (var j = 0; j < matrix.ColumnCount; j++) + { + Assert.That(m[i, j], Is.EqualTo(matrix[i, inverse[j]])); + } + } + } + [Theory, Timeout(200)] public void CanInsertRow(Matrix matrix) { diff --git a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs index 94c9d1ae..ae3b1ef2 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs @@ -279,22 +279,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single Assert.Throws(() => matrixp.PermuteColumns(permutation)); } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - public override void CanPermuteMatrixRows(string name) - { - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - public override void CanPermuteMatrixColumns(string name) - { - } - /// /// Can pointwise divide matrices into a result matrix. /// diff --git a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs index e940cf51..56e98ad9 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs @@ -125,60 +125,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single } } - /// - /// Can permute matrix rows. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Tall3x2")] - public virtual void CanPermuteMatrixRows(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteRows(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[permutation[i], j]); - } - } - } - - /// - /// Can permute matrix columns. - /// - /// Matrix name. - [TestCase("Singular3x3")] - [TestCase("Square3x3")] - [TestCase("Wide2x3")] - public virtual void CanPermuteMatrixColumns(string name) - { - var matrix = CreateMatrix(TestData2D[name]); - var matrixp = CreateMatrix(TestData2D[name]); - - var permutation = new Permutation(new[] { 2, 0, 1 }); - matrixp.PermuteColumns(permutation); - - Assert.AreNotSame(matrix, matrixp); - Assert.AreEqual(matrix.RowCount, matrixp.RowCount); - Assert.AreEqual(matrix.ColumnCount, matrixp.ColumnCount); - for (var i = 0; i < matrix.RowCount; i++) - { - for (var j = 0; j < matrix.ColumnCount; j++) - { - Assert.AreEqual(matrix[i, j], matrixp[i, permutation[j]]); - } - } - } - /// /// Can append matrices. ///