Last active
February 10, 2017 00:35
-
-
Save DavidAntaramian/d6bdedf44b78165b1250127a86927fea to your computer and use it in GitHub Desktop.
ExUnit Test for whether one element appears before another in a list
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule ExUnitAssertOrder do | |
def assert_order(list, first, second) do | |
assert_order(list, first, second, nil) | |
end | |
def assert_order([], first, second, first) do | |
raise ExUnit.AssertionError, message: "Encountered #{first}, but never encountered #{second}" | |
end | |
def assert_order([], first, second, second) do | |
raise ExUnit.AssertionError, message: "Encountered #{second}, but never encountered #{first}" | |
end | |
def assert_order([], _first, _second, nil) do | |
raise ExUnit.AssertionError, message: "Never encountered either value" | |
end | |
def assert_order([first | _tail], first, second, second) do | |
raise ExUnit.AssertionError, message: "Encountered #{first} after #{second}" | |
end | |
def assert_order([first | tail], first, second, nil) do | |
assert_order(tail, first, second, first) | |
end | |
def assert_order([second | tail], first, second, nil) do | |
assert_order(tail, first, second, second) | |
end | |
def assert_order([second | _tail], first, second, first) do | |
true | |
end | |
def assert_order([_ | tail], first, second, state) do | |
assert_order(tail, first, second, state) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment