Skip to content

Instantly share code, notes, and snippets.

@stockwellb
Last active June 7, 2016 01:25
Show Gist options
  • Save stockwellb/3bf4faac552d9b2d0ccab0f39d0be9bb to your computer and use it in GitHub Desktop.
Save stockwellb/3bf4faac552d9b2d0ccab0f39d0be9bb to your computer and use it in GitHub Desktop.
Hello world in Elixir with some odd twists
defmodule HelloWorld do
def greet("") do
{:ok, "Hello World"}
end
def greet([]) do
{:ok, "Hello World"}
end
def greet(names) when is_list(names) do
name_list = Joiner.join(names,", ", " and ")
{:ok, "Hello #{name_list}"}
end
def greet(name) do
{:ok, "Hello #{name}"}
end
end
defmodule Joiner do
def join(list, sep, last_sep) do
list |> do_join(sep, last_sep) |> Enum.join
end
defp do_join([], _, _), do: []
defp do_join([x], _, _), do: [x]
defp do_join([x,y], _, last_sep) do
[x, last_sep, y]
end
defp do_join([head|rest], sep, last_sep) do
[head, sep | do_join(rest, sep, last_sep)]
end
end
ExUnit.start
defmodule HelloWorldTest do
use ExUnit.Case, async: true
test "returns hello world" do
{_, greeting} = HelloWorld.greet("")
assert greeting == "Hello World"
end
test "return hello <username>" do
name = "Bruce"
{_, greeting} = HelloWorld.greet(name)
assert greeting == "Hello " <> name
end
test "returns hello world for no users" do
names = []
{_, greeting} = HelloWorld.greet(names)
assert greeting == "Hello World"
end
test "returns hello user1, user2 ...." do
names = ["Bruce", "Lora", "Carter"]
{_, greeting} = HelloWorld.greet(names)
assert greeting == "Hello Bruce, Lora and Carter"
end
end
defmodule JoinerTests do
use ExUnit.Case, async: true
test "join many names" do
value = Joiner.join(["a", "b", "c", "d"], ", ", " and ")
assert value == "a, b, c and d"
end
test "join two names" do
value = Joiner.join(["a", "b"], ", ", " and ")
assert value == "a and b"
end
test "join one names" do
value = Joiner.join(["a"], ", ", " and ")
assert value == "a"
end
test "join empty names" do
value = Joiner.join([], ", ", " and ")
assert value == ""
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment