Module for matching
When you use Kernel.match?/2
- can't use functions as pattern
- can't match not strict equality (only
===, no==)
RecursiveMatch.match_r/3 allows you:
- use functions as patterns
- match not strictly (with option
strict: false) - ignore order of lists item (with option
ignore_order: true)
It is same as assert RecursiveMatch.match_r, but with detailed fail message.
ExUnit has no special message for match_r/3 and even no special message for match?/2 is not detailed enough, it has no diff in fail message.
assert_match/3 provides diff in test fail message
If available in Hex, the package can be installed
by adding test_match to your list of dependencies in mix.exs:
Requires elixir ~> 1.5
def deps do
[
{:test_match, "~> 2.0"}
]
enddefmodule YourModule do
import RecursiveMatch
def function1 do
...
end
def function2 do
...
match_r 1, 2
match_r a, b
match_r :_, b
match_r function1(), 1
match_r [1, 2], [2, 1], ignore_order: true # true
match_r 1, 1.0, strict: true # false
match_r {1, 2}, {2, 1}, ignore_order: true # false, nope :)
...
end
enddefmodule YourModuleTest do
use ExUnit.Case
import RecursiveMatch
test "some test" do
...
assert_match 1, 2 # false
assert_match :_, b
assert_match a, b
assert_match [1, 2], [2, 1], ignore_order: true
refute_match 1, 1.0
assert_match 1, 1.0, strict: false
refute_match a, c
assert_match YourModule.function1(), 1
...
end
endstrict: whentruecompare using===, whenfalsecompare using==, defaulttrueignore_order, whentrue- ignore order of items in lists, defaultfalsemessage: Custom message on fail
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/test_match.
