Skip to content

Instantly share code, notes, and snippets.

@oferrigni
Forked from zeedunk/gist:848570
Created March 1, 2011 04:26
Show Gist options
  • Save oferrigni/848605 to your computer and use it in GitHub Desktop.
Save oferrigni/848605 to your computer and use it in GitHub Desktop.
-module(fizzbuzz).
-export([fizzbuzz/1,fizzbuzzify/1]).
fizzbuzz([]) -> [];
fizzbuzz([X]) -> [fizzbuzzify(X)];
fizzbuzz([H|T]) -> fizzbuzz(T, [fizzbuzzify(H)]).
fizzbuzz([H], Buzzed) -> Buzzed ++ [fizzbuzzify(H)];
fizzbuzz([H|T], Buzzed) -> fizzbuzz(T, Buzzed ++ [fizzbuzzify(H)]).
fizzbuzzify(H) when H rem 3 =:= 0 andalso H rem 5 =:= 0 -> "fizzbuzz";
fizzbuzzify(H) when H rem 3 =:= 0 -> "fizz";
fizzbuzzify(H) when H rem 5 =:= 0 -> "buzz";
fizzbuzzify(H) -> H.
-module(fizzbuzz_test).
-include_lib("eunit/include/eunit.hrl").
% tests from here down.
fizzbuzzify_not_divisible_by_three_or_five_test() ->
?assert(fizzbuzz:fizzbuzzify(1) == 1).
fizzbuzzify_should_turn_three_into_fizz_test() ->
?assert(fizzbuzz:fizzbuzzify(3) == "fizz").
fizzbuzzify_should_turn_mulitples_of_three_into_fizz_test() ->
?assert(fizzbuzz:fizzbuzzify(6) == "fizz"),
?assert(fizzbuzz:fizzbuzzify(9) == "fizz"),
?assert(fizzbuzz:fizzbuzzify(12) == "fizz").
fizzbuzzify_should_turn_five_into_buzz_test() ->
?assert(fizzbuzz:fizzbuzzify(5) == "buzz").
fizzbuzzify_should_turn_multiples_of_five_into_buzz_test() ->
?assert(fizzbuzz:fizzbuzzify(10) == "buzz"),
?assert(fizzbuzz:fizzbuzzify(20) == "buzz"),
?assert(fizzbuzz:fizzbuzzify(25) == "buzz").
fizzbuzzify_should_turn_multiples_of_three_and_five_into_fizzbuzz_test() ->
?assert(fizzbuzz:fizzbuzzify(15) == "fizzbuzz").
fizzbuzz_empty_list_test() ->
?assert(fizzbuzz:fizzbuzz([]) == []).
fizzbuzz_with_one_element_should_fizzbuzzify_that_element_test() ->
?assert(fizzbuzz:fizzbuzz([3]) == ["fizz"]),
?assert(fizzbuzz:fizzbuzz([5]) == ["buzz"]),
?assert(fizzbuzz:fizzbuzz([15]) == ["fizzbuzz"]),
?assert(fizzbuzz:fizzbuzz([14]) == [14]).
fizzbuzz_with_multiple_elements_should_fizzbuzzify_all_elements_test() ->
?assert(fizzbuzz:fizzbuzz([2,3,5,15]) == [2, "fizz", "buzz", "fizzbuzz"]).
-module(fizzbuzz).
-include_lib("eunit/include/eunit.hrl").
-export([fizzbuzz/1]).
fizzbuzz([]) -> [];
fizzbuzz([X]) -> [fizzbuzzify(X)];
fizzbuzz([H|T]) -> fizzbuzz(T, [fizzbuzzify(H)]).
fizzbuzz([H], Buzzed) -> Buzzed ++ [fizzbuzzify(H)];
fizzbuzz([H|T], Buzzed) -> fizzbuzz(T, Buzzed ++ [fizzbuzzify(H)]).
fizzbuzzify(H) when H rem 3 =:= 0 andalso H rem 5 =:= 0 -> "fizzbuzz";
fizzbuzzify(H) when H rem 3 =:= 0 -> "fizz";
fizzbuzzify(H) when H rem 5 =:= 0 -> "buzz";
fizzbuzzify(H) -> H.
% tests from here down.
fizzbuzzify_not_divisible_by_three_or_five_test() ->
?assert(fizzbuzzify(1) == 1).
fizzbuzzify_should_turn_three_into_fizz_test() ->
?assert(fizzbuzzify(3) == "fizz").
fizzbuzzify_should_turn_mulitples_of_three_into_fizz_test() ->
?assert(fizzbuzzify(6) == "fizz"),
?assert(fizzbuzzify(9) == "fizz"),
?assert(fizzbuzzify(12) == "fizz").
fizzbuzzify_should_turn_five_into_buzz_test() ->
?assert(fizzbuzzify(5) == "buzz").
fizzbuzzify_should_turn_multiples_of_five_into_buzz_test() ->
?assert(fizzbuzzify(10) == "buzz"),
?assert(fizzbuzzify(20) == "buzz"),
?assert(fizzbuzzify(25) == "buzz").
fizzbuzzify_should_turn_multiples_of_three_and_five_into_fizzbuzz_test() ->
?assert(fizzbuzzify(15) == "fizzbuzz").
fizzbuzz_empty_list_test() ->
?assert(fizzbuzz([]) == []).
fizzbuzz_with_one_element_should_fizzbuzzify_that_element_test() ->
?assert(fizzbuzz([3]) == ["fizz"]),
?assert(fizzbuzz([5]) == ["buzz"]),
?assert(fizzbuzz([15]) == ["fizzbuzz"]),
?assert(fizzbuzz([14]) == [14]).
fizzbuzz_with_multiple_elements_should_fizzbuzzify_all_elements_test() ->
?assert(fizzbuzz([2,3,5,15]) == [2, "fizz", "buzz", "fizzbuzz"]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment