Skip to content

Commit 05ae60f

Browse files
committed
Tests: fix tests related to CSR/CSC matrix import
1 parent 08df9b3 commit 05ae60f

1 file changed

Lines changed: 43 additions & 80 deletions

File tree

src/Numerics.Tests/LinearAlgebraTests/MatrixStructureTheory.cs

Lines changed: 43 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
using MathNet.Numerics.LinearAlgebra;
3131
using NUnit.Framework;
3232
using System;
33+
using System.Collections.Generic;
3334
using System.Linq;
3435

3536
namespace MathNet.Numerics.UnitTests.LinearAlgebraTests
@@ -615,9 +616,10 @@ public void CanCreateSparseFromCoordinateFormat()
615616
Assert.That(A.RowCount, Is.EqualTo(3));
616617
Assert.That(A.ColumnCount, Is.EqualTo(4));
617618

618-
cooRowIndices.Reverse();
619-
cooColumnIndices.Reverse();
620-
cooValues.Reverse();
619+
Array.Reverse(cooRowIndices);
620+
Array.Reverse(cooColumnIndices);
621+
Array.Reverse(cooValues);
622+
621623
var B = Matrix<T>.Build.SparseFromCoordinateFormat(rowCount, columnCount, valueCount, cooRowIndices, cooColumnIndices, cooValues);
622624

623625
for (int j = 0; j < 4; j++)
@@ -634,133 +636,94 @@ public void CanCreateSparseFromCoordinateFormat()
634636
public void CanCreateSparseFromNonOrderedDuplicatedCoordinateFormat()
635637
{
636638
int rowCount = 2, columnCount = 2, valueCount = 5;
637-
var cooRowIndices = new int[5] { 1, 0, 1, 0, 1 };
638-
var cooColumnIndices = new int[5] { 1, 0, 0, 1, 1 };
639+
var cooRowIndices = new[] { 1, 0, 1, 0, 1 };
640+
var cooColumnIndices = new[] { 1, 0, 0, 1, 1 };
639641
var cooValues = Vector<T>.Build.Random(5, 0).ToArray();
640642

641643
var A = Matrix<T>.Build.SparseFromCoordinateFormat(rowCount, columnCount, valueCount, cooRowIndices, cooColumnIndices, cooValues);
642644

643-
cooRowIndices.Reverse();
644-
cooColumnIndices.Reverse();
645-
cooValues.Reverse();
645+
Array.Reverse(cooRowIndices);
646+
Array.Reverse(cooColumnIndices);
647+
Array.Reverse(cooValues);
646648

647649
var B = Matrix<T>.Build.SparseFromCoordinateFormat(rowCount, columnCount, valueCount, cooRowIndices, cooColumnIndices, cooValues);
648650

649-
for (int j = 0; j < columnCount; j++)
650-
{
651-
for (int i = 0; i < rowCount; i++)
652-
{
653-
Assert.That(A[i, j], Is.EqualTo(B[i, j]));
654-
}
655-
}
651+
Assert.That(A.Equals(B));
656652
}
657653

658654
[Test]
659655
public void CanCreateSparseFromCompressedSparseRowFormat()
660656
{
661-
var rows = new[]
662-
{
663-
Vector<T>.Build.Random(4, 0),
664-
Vector<T>.Build.Random(4, 1),
665-
Vector<T>.Build.Random(4, 3)
666-
};
657+
var dense = Matrix<T>.Build.Random(4, 3, seed: 0);
658+
dense.At(0, 2, Matrix<T>.Zero);
659+
dense.At(2, 1, Matrix<T>.Zero);
667660

668-
var rowCount = rows.Length;
669-
var columnCount = 4;
670-
var valueCount = rowCount * columnCount;
661+
var rowCount = dense.RowCount;
662+
var columnCount = dense.ColumnCount;
671663

672664
var csrRowPointers = new int[rowCount + 1];
673-
var csrColumnIndices = new int[valueCount];
674-
var csrValues = new T[valueCount];
665+
var csrColumnIndicesList = new List<int>(rowCount * columnCount);
666+
var csrValuesList = new List<T>(rowCount * columnCount);
675667

676-
int loc = 0;
677668
for (int i = 0; i < rowCount; i++)
678669
{
679670
for (int j = 0; j < columnCount; j++)
680671
{
681672
csrRowPointers[i + 1]++;
682-
csrColumnIndices[loc] = j;
683-
csrValues[loc] = rows[i].At(j);
684-
loc++;
673+
csrColumnIndicesList.Add(j);
674+
csrValuesList.Add(dense.At(i, j));
685675
}
686676
}
687677
for (int i = 1; i < rowCount + 1; i++)
688678
{
689679
csrRowPointers[i] += csrRowPointers[i - 1];
690680
}
691681

692-
var A = Matrix<T>.Build.SparseFromCompressedSparseRowFormat(rowCount, columnCount, valueCount, csrRowPointers, csrColumnIndices, csrValues);
693-
Assert.That(A.GetType().Name, Is.EqualTo("SparseMatrix"));
694-
Assert.That(A.RowCount, Is.EqualTo(3));
695-
Assert.That(A.ColumnCount, Is.EqualTo(4));
696-
697-
csrRowPointers.Reverse();
698-
csrColumnIndices.Reverse();
699-
csrValues.Reverse();
700-
var B = Matrix<T>.Build.SparseFromCompressedSparseRowFormat(rowCount, columnCount, valueCount, csrRowPointers, csrColumnIndices, csrValues);
682+
var csrColumnIndices = csrColumnIndicesList.ToArray();
683+
var csrValues = csrValuesList.ToArray();
701684

702-
for (int j = 0; j < 4; j++)
703-
{
704-
for (int i = 0; i < 3; i++)
705-
{
706-
Assert.That(A[i, j], Is.EqualTo(rows[i][j]));
707-
Assert.That(B[i, j], Is.EqualTo(rows[i][j]));
708-
}
709-
}
685+
var A = Matrix<T>.Build.SparseFromCompressedSparseRowFormat(rowCount, columnCount, csrValues.Length, csrRowPointers, csrColumnIndices, csrValues);
686+
Assert.That(A.GetType().Name, Is.EqualTo("SparseMatrix"));
687+
Assert.That(A.Equals(dense), "A = dense");
710688
}
711689

712690
[Test]
713691
public void CanCreateSparseFromCompressedSparseColumnFormat()
714692
{
715-
var rows = new[]
716-
{
717-
Vector<T>.Build.Random(4, 0),
718-
Vector<T>.Build.Random(4, 1),
719-
Vector<T>.Build.Random(4, 3)
720-
};
693+
var dense = Matrix<T>.Build.Random(4, 3, seed: 0);
694+
dense.At(0, 2, Matrix<T>.Zero);
695+
dense.At(2, 1, Matrix<T>.Zero);
721696

722-
var rowCount = rows.Length;
723-
var columnCount = 4;
724-
var valueCount = rowCount * columnCount;
697+
var rowCount = dense.RowCount;
698+
var columnCount = dense.ColumnCount;
725699

726-
var cscRowIndices = new int[valueCount];
727700
var cscColumnPointers = new int[columnCount + 1];
728-
var cscValues = new T[valueCount];
701+
var cscRowIndicesList = new List<int>(rowCount * columnCount);
702+
var cscValuesList = new List<T>(rowCount * columnCount);
729703

730-
int loc = 0;
731704
for (int j = 0; j < columnCount; j++)
732705
{
733706
for (int i = 0; i < rowCount; i++)
734707
{
735-
cscColumnPointers[j + 1]++;
736-
cscRowIndices[loc] = i;
737-
cscValues[loc] = rows[i].At(j);
738-
loc++;
708+
if (!Matrix<T>.Zero.Equals(dense.At(i, j)))
709+
{
710+
cscColumnPointers[j + 1]++;
711+
cscRowIndicesList.Add(i);
712+
cscValuesList.Add(dense.At(i, j));
713+
}
739714
}
740715
}
741716
for (int i = 1; i < columnCount + 1; i++)
742717
{
743718
cscColumnPointers[i] += cscColumnPointers[i - 1];
744719
}
745720

746-
var A = Matrix<T>.Build.SparseFromCompressedSparseColumnFormat(rowCount, columnCount, valueCount, cscRowIndices, cscColumnPointers, cscValues);
747-
Assert.That(A.GetType().Name, Is.EqualTo("SparseMatrix"));
748-
Assert.That(A.RowCount, Is.EqualTo(3));
749-
Assert.That(A.ColumnCount, Is.EqualTo(4));
750-
751-
cscRowIndices.Reverse();
752-
cscColumnPointers.Reverse();
753-
cscValues.Reverse();
754-
var B = Matrix<T>.Build.SparseFromCompressedSparseColumnFormat(rowCount, columnCount, valueCount, cscRowIndices, cscColumnPointers, cscValues);
721+
var cscRowIndices = cscRowIndicesList.ToArray();
722+
var cscValues = cscValuesList.ToArray();
755723

756-
for (int j = 0; j < 4; j++)
757-
{
758-
for (int i = 0; i < 3; i++)
759-
{
760-
Assert.That(A[i, j], Is.EqualTo(rows[i][j]));
761-
Assert.That(B[i, j], Is.EqualTo(rows[i][j]));
762-
}
763-
}
724+
var A = Matrix<T>.Build.SparseFromCompressedSparseColumnFormat(rowCount, columnCount, cscValues.Length, cscRowIndices, cscColumnPointers, cscValues);
725+
Assert.That(A.GetType().Name, Is.EqualTo("SparseMatrix"));
726+
Assert.That(A.Equals(dense), "A = dense");
764727
}
765728

766729
[Test]

0 commit comments

Comments
 (0)