using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; using Azimuth.DenseLinearAlgebra; using Azimuth.SparseLinearAlgebra; namespace Azimuth.UnitTests.SparseLinearAlgebra { public class BandedUpperTriangularTests : UnitTestSharp.TestFixture { public class Ctor : UnitTestSharp.TestFixture { public void FromScalarArray() { var elements = new Scalar[,] { { 1, 2, 0, 0, }, { 0, 3, 4, 0, }, { 0, 0, 5, 6, }, { 0, 0, 0, 7, }, }; var band = new BandedUpperTriangular(elements); var mat = new SquareMatrix(elements); CheckEqual(4, band.Size); CheckEqual(2, band.Bandwidth); CheckEqual(mat, band); } public void FromSquareMatrix() { var elements = new Scalar[,] { { 1, 2, 0, 0, }, { 0, 3, 4, 0, }, { 0, 0, 5, 6, }, { 0, 0, 0, 7, }, }; var mat = new SquareMatrix(elements); var band = new BandedUpperTriangular(mat); CheckEqual(4, band.Size); CheckEqual(2, band.Bandwidth); CheckEqual(mat, band); } public void OffBand() { CheckThrow(typeof(Exception)); var band = new BandedUpperTriangular(new Scalar[,] { { 1, 2, 0, 0, }, { 0, 3, 4, 0, }, { 0, 0, 5, 6, }, { 1, 0, 0, 7, }, }); } public void UnfortunateBandwidth() { var elements = new Scalar[,] { { 1, 2, 0, 1, }, { 0, 3, 4, 0, }, { 0, 0, 5, 6, }, { 0, 0, 0, 7, }, }; var mat = new SquareMatrix(elements); var band = new BandedUpperTriangular(mat); CheckEqual(4, band.Size); CheckEqual(4, band.Bandwidth); CheckEqual(mat, band); } } public class Passthrough : UnitTestSharp.TestFixture { public void Basic() { var band = new BandedUpperTriangular(new Scalar[,] { { 1, 2, 0, 0, }, { 0, 3, 4, 0, }, { 0, 0, 5, 6, }, { 0, 0, 0, 7, }, }); var gauss = new GaussTransform { Index = 1, Weight = 2, }; band.Passthrough(ref gauss); var expectedBand = new BandedUpperTriangular(new Scalar[,] { { 1, 2, 0, 0, }, { 0, 11, 4, 0, }, { 0, 0, 15.0/11.0, 6, }, { 0, 0, 0, 7, }, }); var expectedGauss = new GaussTransform { Index = 1, Weight = -10.0/11.0, }; CheckEqual(expectedGauss, gauss); CheckEqual(expectedBand, band); } } } }