diff --git a/src/DataUnitTests/Matlab/MatlabWriterTests.cs b/src/DataUnitTests/Matlab/MatlabWriterTests.cs index fd50abba..8bd02309 100644 --- a/src/DataUnitTests/Matlab/MatlabWriterTests.cs +++ b/src/DataUnitTests/Matlab/MatlabWriterTests.cs @@ -29,6 +29,7 @@ using System.IO; using System.Numerics; using MathNet.Numerics.Data.Matlab; using MathNet.Numerics.LinearAlgebra; +using MathNet.Numerics.LinearAlgebra.Storage; using NUnit.Framework; namespace MathNet.Numerics.Data.UnitTests.Matlab @@ -98,6 +99,8 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab Assert.AreEqual(w.ColumnCount, r.ColumnCount); Assert.IsTrue(w.Equals(r)); } + + File.Delete("testd.mat"); } [Test] @@ -146,6 +149,8 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab Assert.AreEqual(w.ColumnCount, r.ColumnCount); Assert.IsTrue(w.Equals(r)); } + + File.Delete("tests.mat"); } /// @@ -197,6 +202,8 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab Assert.AreEqual(w.ColumnCount, r.ColumnCount); Assert.IsTrue(w.Equals(r)); } + + File.Delete("testc.mat"); } /// @@ -248,6 +255,8 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab Assert.AreEqual(w.ColumnCount, r.ColumnCount); Assert.IsTrue(w.Equals(r)); } + + File.Delete("testz.mat"); } /// @@ -269,5 +278,48 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab { Assert.Throws(() => MatlabWriter.Write("somefile2", null, "matrix")); } + + [Test] + public void MatlabMatrixRoundtrip() + { + var denseDouble = Matrix.Build.Random(20, 20); + var denseComplex = Matrix.Build.Random(10, 10); + var diagonalDouble = Matrix.Build.DiagonalOfDiagonalArray(new[] { 1.0, 2.0, 3.0 }); + var sparseDouble = Matrix.Build.Sparse(20, 20, (i, j) => i%(j+1) == 2 ? i + 10*j : 0); + + var denseDoubleP = MatlabWriter.Pack(denseDouble, "denseDouble"); + var denseComplexP = MatlabWriter.Pack(denseComplex, "denseComplex"); + var diagonalDoubleP = MatlabWriter.Pack(diagonalDouble, "diagonalDouble"); + var sparseDoubleP = MatlabWriter.Pack(sparseDouble, "sparseDouble"); + + Assert.That(MatlabReader.Unpack(denseDoubleP).Equals(denseDouble)); + Assert.That(MatlabReader.Unpack(denseComplexP).Equals(denseComplex)); + Assert.That(MatlabReader.Unpack(diagonalDoubleP).Equals(diagonalDouble)); + Assert.That(MatlabReader.Unpack(sparseDoubleP).Equals(sparseDouble)); + + Assert.That(MatlabReader.Unpack(denseDoubleP).Storage, Is.TypeOf>()); + Assert.That(MatlabReader.Unpack(denseComplexP).Storage, Is.TypeOf>()); + Assert.That(MatlabReader.Unpack(diagonalDoubleP).Storage, Is.TypeOf>()); + Assert.That(MatlabReader.Unpack(sparseDoubleP).Storage, Is.TypeOf>()); + + if (File.Exists("testrt.mat")) + { + File.Delete("testrt.mat"); + } + + MatlabWriter.Store("testrt.mat", new[] { denseDoubleP, denseComplexP, diagonalDoubleP, sparseDoubleP }); + + Assert.That(MatlabReader.Read("testrt.mat", "denseDouble").Equals(denseDouble)); + Assert.That(MatlabReader.Read("testrt.mat", "denseComplex").Equals(denseComplex)); + Assert.That(MatlabReader.Read("testrt.mat", "diagonalDouble").Equals(diagonalDouble)); + Assert.That(MatlabReader.Read("testrt.mat", "sparseDouble").Equals(sparseDouble)); + + Assert.That(MatlabReader.Read("testrt.mat", "denseDouble").Storage, Is.TypeOf>()); + Assert.That(MatlabReader.Read("testrt.mat", "denseComplex").Storage, Is.TypeOf>()); + Assert.That(MatlabReader.Read("testrt.mat", "diagonalDouble").Storage, Is.TypeOf>()); + Assert.That(MatlabReader.Read("testrt.mat", "sparseDouble").Storage, Is.TypeOf>()); + + File.Delete("testrt.mat"); + } } }