tests/Matrix.Tests.ps1
& (Join-Path $PSScriptRoot '_setup.ps1') 'matrix' Describe 'Matrix helper functions' -Tag 'Local', 'Remote' { It 'can provide wrapper for matrix creation' { $A = 1..9 | New-Matrix 3, 3 $A.Size | Should -Be 3, 3 $A.Rows[0] | Should -Be 1, 2, 3 $A.Rows[1] | Should -Be 4, 5, 6 $A.Rows[2] | Should -Be 7, 8, 9 $A = New-Matrix -Size 3, 3 -Values (1..9) $A.Size | Should -Be 3, 3 $A.Rows[0] | Should -Be 1, 2, 3 $A.Rows[1] | Should -Be 4, 5, 6 $A.Rows[2] | Should -Be 7, 8, 9 $A = New-Matrix $A.Size | Should -Be 2, 2 -Because '2x2 is the default matrix size' $A.Rows[0] | Should -Be 0, 0 -Because 'an empty matrix should be created by default' $A.Rows[1] | Should -Be 0, 0 -Because 'an empty matrix should be created by default' $A = @(1, 2, 3, @(4, 5, 6)) | New-Matrix 2, 3 $A = 1..6 | New-Matrix 2, 3 $A.Rows[0] | Should -Be 1, 2, 3 -Because 'function accepts non-square sizes' $A.Rows[1] | Should -Be 4, 5, 6 -Because 'values array should be flattened' } It 'can create diagonal matrices' { $A = 1..3 | New-Matrix 3, 3 -Diagonal $A.Size | Should -Be 3, 3 $A.Rows[0] | Should -Be 1, 0, 0 $A.Rows[1] | Should -Be 0, 2, 0 $A.Rows[2] | Should -Be 0, 0, 3 $A = New-Matrix -Values (1..3) -Size 3, 3 -Diagonal $A.Size | Should -Be 3, 3 $A.Rows[0] | Should -Be 1, 0, 0 $A.Rows[1] | Should -Be 0, 2, 0 $A.Rows[2] | Should -Be 0, 0, 3 } It 'can test if a matrix is diagonal' { 1, 0, 0, 0, 2, 0, 0, 0, 3 | New-Matrix 3, 3 | Test-DiagonalMatrix | Should -BeTrue 1, 0, 0, 2, 2, 0, 3, 0, 3 | New-Matrix 3, 3 | Test-DiagonalMatrix | Should -BeFalse -Because 'second and third rows have non-zero elements off the main diagonal' 1, 0, 0, 0, 2, 1, 0, 0, 3 | New-Matrix 3, 3 | Test-DiagonalMatrix | Should -BeFalse -Because 'second row has a non-zero element off the main diagonal' 1, 0, 0, 1 | New-Matrix | Test-DiagonalMatrix | Should -BeTrue 1, 0, 0, 0, 2, 0 | New-Matrix 2, 3 | Test-DiagonalMatrix | Should -BeFalse -Because 'only square matrices can be diagonal' 1, 0, 2, 0, 2, 2 | New-Matrix 2, 3 | Test-DiagonalMatrix | Should -BeFalse -Because 'only square matrices can be diagonal' } It 'can test if a matrix is square' { (1..4) | New-Matrix | Test-SquareMatrix | Should -BeTrue (1..9) | New-Matrix 3, 3 | Test-SquareMatrix | Should -BeTrue (1..6) | New-Matrix 3, 2 | Test-SquareMatrix | Should -BeFalse -Because 'the # of rows and # of columns are different' } It 'can test if a matrix is symmetric' { 1, 2, 3, 2, 1, 4, 3, 4, 1 | New-Matrix 3, 3 | Test-SymmetricMatrix | Should -BeTrue (1..9) | New-Matrix 3, 3 | Test-SymmetricMatrix | Should -BeFalse -Because 'elements off main diagonal are not equal' 1, 1, 1, 1 | New-Matrix | Test-SymmetricMatrix | Should -BeTrue 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 | New-Matrix 4, 4 | Test-SymmetricMatrix | Should -BeTrue -Because 'diagonal matrices are symmetric' 1, 0, 0, 2, 2, 0, 3, 0, 3 | New-Matrix 3, 3 | Test-SymmetricMatrix | Should -BeFalse 1, 0, 0, 0, 2, 1, 0, 0, 3 | New-Matrix 2, 3 | Test-SymmetricMatrix | Should -BeFalse 1, 0, 0, 0, 0, 3 | New-Matrix 2, 3 | Test-SymmetricMatrix | Should -BeFalse -Because 'only square matrices can be symmetric' } } |