PesterMatchArray.Tests.ps1

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace(".Tests.", ".")
. "$here\$sut"

Describe "MatchArrayUnordered" {
    It "returns true for matching single item arrays" {
        , @("a") | Should MatchArrayUnordered @("a")
    }
    It "returns true for matching single item and single item array" {
        "a" | Should MatchArrayUnordered @("a")
    }
    It "returns true for matching single item array and single item" {
        , (@("a")) | Should MatchArrayUnordered "a"
    }
    It "returns true for arrays with the same contents" {
        , @("a", 1) | Should MatchArrayUnordered @("a", 1)
    }
    It "returns true for arrays with the same contents in different orders" {
        , (@("a", 1)) | Should MatchArrayUnordered @(1, "a")
    }

    It "returns false if arrays differ in content" {
        , (@(1)) | Should Not MatchArrayUnordered @(2)
    }
    It "returns false if arrays differ in length" {
        , (@(1)) | Should Not MatchArrayUnordered @(1, 1)
    }
    It "returns false if arrays differ in the number of each item" {
        , (@(1, 1, 2)) | Should Not MatchArrayUnordered @(1, 2, 2)
    }
}


Describe "MatchArrayOrdered" {
    It "returns true for matching single item arrays" {
        , @("a") | Should MatchArrayOrdered @("a")
    }
    It "returns true for matching single item and single item array" {
        "a" | Should MatchArrayOrdered @("a")
    }
    It "returns true for matching single item array and single item" {
        , @("a") | Should MatchArrayOrdered  "a"
    }
    It "returns true for arrays with the same contents in the same order" {
        , @("a", 1)  | Should MatchArrayOrdered  @("a", 1)
    }
    It "returns false for arrays with the same contents in different orders" {
        , @("a", 1) | Should Not MatchArrayOrdered  @(1, "a")
    }

    It "returns false if arrays differ in content" {
        , @(1)  | Should Not MatchArrayOrdered  @(2)
    }
    It "returns false if arrays differ in length" {
        , @(1)  | Should Not MatchArrayOrdered  @(1, 1)
    }
    It "returns false if arrays differ in the number of each item" {
        , (@(1, 1, 2)) | Should Not MatchArrayOrdered @(1, 2, 2)
    }
}