import ExUnit.AssertionsControl Flow - Making decisions and choosing paths
result = if true, do: "yes", else: "no"assert result == ___result =
if 1 + 1 == 2 do
"math works"
else
"math is broken"
endassert result == ___result = unless false, do: "will execute", else: "will not execute"assert result == ___assert if(nil, do: "truthy", else: "falsy") == ___assert if(false, do: "truthy", else: "falsy") == ___assert if(0, do: "truthy", else: "falsy") == ___assert if("", do: "truthy", else: "falsy") == ___assert if([], do: "truthy", else: "falsy") == ___result =
case {1, 2, 3} do
{4, 5, 6} -> "no match"
{1, x, 3} -> "matched with x = #{x}"
endassert result == ___check_number = fn x ->
case x do
0 -> "zero"
n when n > 0 -> "positive"
n when n < 0 -> "negative"
end
endassert check_number.(5) == ___assert check_number.(0) == ___assert check_number.(-3) == ___check_list = fn list ->
case list do
[] -> "empty"
[_] -> "one element"
[_, _] -> "two elements"
_ -> "many elements"
end
endassert check_list.([]) == ___assert check_list.([:a]) == ___assert check_list.([:a, :b]) == ___assert check_list.([:a, :b, :c, :d]) == ___temperature = 25
weather =
cond do
temperature < 0 -> "freezing"
temperature < 10 -> "cold"
temperature < 25 -> "cool"
temperature < 30 -> "warm"
true -> "hot"
endassert weather == ___safe_divide = fn x, y ->
cond do
y == 0 -> {:error, "division by zero"}
true -> {:ok, x / y}
end
endassert safe_divide.(10, 2) == ___assert safe_divide.(10, 0) == ___parse_response = fn response ->
case response do
{:ok, %{status: 200, body: body}} -> "Success: #{body}"
{:ok, %{status: status}} when status >= 400 -> "Client error: #{status}"
{:ok, %{status: status}} when status >= 500 -> "Server error: #{status}"
{:error, reason} -> "Request failed: #{reason}"
end
endassert parse_response.({:ok, %{status: 200, body: "Hello"}}) == ___assert parse_response.({:ok, %{status: 404}}) == ___assert parse_response.({:error, :timeout}) == ___categorize = fn number ->
case number do
n when is_integer(n) and n > 0 and rem(n, 2) == 0 -> "positive even integer"
n when is_integer(n) and n > 0 and rem(n, 2) == 1 -> "positive odd integer"
n when is_integer(n) and n < 0 -> "negative integer"
n when is_float(n) -> "float"
_ -> "other"
end
endassert categorize.(4) == ___assert categorize.(3) == ___assert categorize.(-5) == ___assert categorize.(3.14) == ___assert categorize.("hello") == ___process_user = fn user ->
if user.active do
if user.verified do
if user.premium do
"premium verified active user"
else
"verified active user"
end
else
"unverified active user"
end
else
"inactive user"
end
end
user = %{active: true, verified: true, premium: false}assert process_user.(user) == ___