Skip to content

Instantly share code, notes, and snippets.

@ivportilla
Created February 26, 2017 03:58
Show Gist options
  • Save ivportilla/474686b7d1c968ab755dc59d017e6f08 to your computer and use it in GitHub Desktop.
Save ivportilla/474686b7d1c968ab755dc59d017e6f08 to your computer and use it in GitHub Desktop.
-module(vars_and_patterns).
-export([xOr1/2, xOr2/2, xOr3/2, maxThree/3, howManyEqual/3]).
xOr1(X, Y) when X and Y ->
false;
xOr1(X, Y) when not(X or Y) ->
false;
xOr1(_, _) -> true.
xOr2(X, Y) when X == Y ->
false;
xOr2(_, _) -> true.
xOr3(X, Y) when X =/= Y ->
true;
xOr3(_, _) -> false.
maxThree(A, B, C) when (A >= B) ->
if
A > C -> A;
true -> C
end;
maxThree(_, B, C) when (B >= C) -> B;
maxThree(_, _, C) -> C.
howManyEqual(A, A, A) -> 3;
howManyEqual(A, B, C) when (A =/= B) and (B =/= C) and (A =/= C) -> 0;
howManyEqual(_, _, _) -> 2.
-module(vars_and_patterns_test).
-include_lib("eunit/include/eunit.hrl").
-import(vars_and_patterns, [xOr1/2, xOr2/2, xOr3/2, maxThree/3, howManyEqual/3]).
xOr1_test() ->
?assertEqual(false, xOr1(false, false)),
?assertEqual(false, xOr1(true, true)),
?assertEqual(true, xOr1(true, false)),
?assertEqual(true, xOr1(false, true)).
xOr2_test() ->
?assertEqual(false, xOr2(false, false)),
?assertEqual(false, xOr2(true, true)),
?assertEqual(true, xOr2(true, false)),
?assertEqual(true, xOr2(false, true)).
xOr3_test() ->
?assertEqual(false, xOr3(false, false)),
?assertEqual(false, xOr3(true, true)),
?assertEqual(true, xOr3(true, false)),
?assertEqual(true, xOr3(false, true)).
maxThree_test() ->
?assertEqual(3, maxThree(1, 2, 3)),
?assertEqual(2, maxThree(2, 1, 2)),
?assertEqual(1, maxThree(1, 1, 1)),
?assertEqual(5, maxThree(2, 5, 3)).
howManyEqual_test() ->
?assertEqual(0, howManyEqual(1, 2, 3)),
?assertEqual(2, howManyEqual(1, 1, 3)),
?assertEqual(3, howManyEqual(0, 0, 0)),
?assertEqual(2, howManyEqual(1, 3, 3)),
?assertEqual(2, howManyEqual(1, 0, 1)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment