defmodule IntegerToEnglish do
@moduledoc "Convert an integer into english words."
use IntegerToEnglish.Macros
@doc """
Convert an integer into english words.
## Examples
iex> IntegerToEnglish.integer_to_english(12)
"twelve"
iex> IntegerToEnglish.integer_to_english(-3034)
"negative three thousand and thirty four"
iex> IntegerToEnglish.integer_to_english(3823404)
"three million, eight hundred twenty three thousand, four hundred four"
"""
def integer_to_english(i) when i < 0, do: "negative " <> integer_to_english(i * -1)
def integer_to_english(0), do: "zero"
def integer_to_english(1), do: "one"
def integer_to_english(2), do: "two"
def integer_to_english(3), do: "three"
def integer_to_english(4), do: "four"
def integer_to_english(5), do: "five"
def integer_to_english(6), do: "six"
def integer_to_english(7), do: "seven"
def integer_to_english(8), do: "eight"
def integer_to_english(9), do: "nine"
def integer_to_english(10), do: "ten"
def integer_to_english(11), do: "eleven"
def integer_to_english(12), do: "twelve"
def integer_to_english(13), do: "thirteen"
def integer_to_english(14), do: "fourteen"
def integer_to_english(15), do: "fifteen"
def integer_to_english(16), do: "sixteen"
def integer_to_english(17), do: "seventeen"
def integer_to_english(18), do: "eighteen"
def integer_to_english(19), do: "nineteen"
generate_clause("twenty", 20, 30)
generate_clause("thirty", 30, 40)
generate_clause("fourty", 40, 50)
generate_clause("fifty", 50, 60)
generate_clause("sixty", 60, 70)
generate_clause("seventy", 70, 80)
generate_clause("eighty", 80, 90)
generate_clause("ninety", 90, 100)
generate_clause("hundred", 100, 1000)
generate_clause("thousand", 1000, 1_000_000)
generate_clause("million", 1_000_000, 1_000_000_000)
generate_clause("billion", 1_000_000_000, 1_000_000_000_000)
end