Skip to content

Instantly share code, notes, and snippets.

@DavidAntaramian
Last active February 10, 2017 00:35
Show Gist options
  • Save DavidAntaramian/d6bdedf44b78165b1250127a86927fea to your computer and use it in GitHub Desktop.
Save DavidAntaramian/d6bdedf44b78165b1250127a86927fea to your computer and use it in GitHub Desktop.
ExUnit Test for whether one element appears before another in a list
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