using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnitTestSharp; using Azimuth.DenseLinearAlgebra; namespace Azimuth.UnitTests.DenseLinearAlgebra { public class DiagonalMatrixTests : TestFixture { public class Ctor : TestFixture { public void Works() { var matrix = new Scalar[] {1, 2, 3,}; new DiagonalMatrix(matrix); } public void ZeroLength() { var matrix = new Scalar[0]; new DiagonalMatrix(matrix); } } public class Equality : TestFixture { public void Equal() { var matrix1 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); var matrix2 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); CheckEqual(matrix1, matrix2); CheckEqual(matrix2, matrix1); } public void NotEqual_SameSize() { var matrix1 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); var matrix2 = new DiagonalMatrix(new Scalar[] { 7, 9, 10 }); CheckNotEqual(matrix1, matrix2); CheckNotEqual(matrix2, matrix1); } public void NotEqual_DifferentSize() { var matrix1 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); var matrix2 = new DiagonalMatrix(new Scalar[] { 1, 2 }); CheckNotEqual(matrix1, matrix2); CheckNotEqual(matrix2, matrix1); } public void Equal_Square() { var matrix1 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); ISquareMatrix matrix2 = new SquareMatrix(new Scalar[,] { { 1, 0, 0 }, { 0, 2, 0 }, { 0, 0, 3 }, }); CheckEqual(matrix1, matrix2); CheckEqual(matrix2, matrix1); Check(matrix1.Equals(matrix2)); Check(matrix2.Equals(matrix1)); } public void Equal_Rectangular() { var matrix1 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); IRectangularMatrix matrix2 = new RectangularMatrix(new Scalar[,] { { 1, 0, 0 }, { 0, 2, 0 }, { 0, 0, 3 }, }); CheckEqual(matrix1, matrix2); CheckEqual(matrix2, matrix1); Check(matrix1.Equals(matrix2)); Check(matrix2.Equals(matrix1)); } public void Not_Equal_Square() { var matrix1 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); ISquareMatrix matrix2 = new SquareMatrix(new Scalar[,] { { 1, 0, 1 }, { 0, 2, 0 }, { 0, 0, 3 }, }); CheckNotEqual(matrix1, matrix2); CheckNotEqual(matrix2, matrix1); CheckFalse(matrix1.Equals(matrix2)); CheckFalse(matrix2.Equals(matrix1)); } public void Not_Equal_Rectangular() { var matrix1 = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); IRectangularMatrix matrix2 = new RectangularMatrix(new Scalar[,] { { 1, 0, 1 }, { 0, 2, 0 }, { 0, 0, 3 }, }); CheckNotEqual(matrix1, matrix2); CheckNotEqual(matrix2, matrix1); CheckFalse(matrix1.Equals(matrix2)); CheckFalse(matrix2.Equals(matrix1)); } } public class ToStringTests : TestFixture { public void Basic() { var matrix = new DiagonalMatrix(new Scalar[] { 1, 2, 3 }); string expected = "[ 1 : 0 : 0 ]\n[ 0 : 2 : 0 ]\n[ 0 : 0 : 3 ]"; CheckEqual(expected, matrix.ToString()); } } public class GetColumn : TestFixture { DiagonalMatrix matrix; public override void TestSetup() { matrix = new DiagonalMatrix(new Scalar[] { 1, 2, 3, }); } public void Column0() { DenseVector expected = new DenseVector(new Scalar[] { 1, 0, 0 }); CheckEqual(expected, matrix.GetColumn(0)); } public void Column1() { DenseVector expected = new DenseVector(new Scalar[] { 0, 2, 0 }); CheckEqual(expected, matrix.GetColumn(1)); } public void Column2() { DenseVector expected = new DenseVector(new Scalar[] { 0, 0, 3 }); CheckEqual(expected, matrix.GetColumn(2)); } } public class SizeEtAl : TestFixture { DiagonalMatrix matrix = new DiagonalMatrix(new Scalar[] {1, 2, 3}); public void Size() { CheckEqual(3, matrix.Size); } public void RowCount() { CheckEqual(3, matrix.RowCount); } public void ColumnCount() { CheckEqual(3, matrix.ColumnCount); } } } }