diff --git a/PhoneNumber/PhoneNumberExample.elm b/PhoneNumber/PhoneNumberExample.elm new file mode 100644 index 0000000..c7a45d5 --- /dev/null +++ b/PhoneNumber/PhoneNumberExample.elm @@ -0,0 +1,24 @@ +module PhoneNumberExample where + +import String + +nums = ['1','2','3','4','5','6','7','8','9','0'] + +getNumber : String -> String +getNumber text = getValidNum (String.filter isDigit text) + +isDigit : Char -> Bool +isDigit char = List.any (\n -> n == char) nums + +getValidNum : String -> String +getValidNum num = + if String.length num == 10 then num else + if (String.length num == 11) && (String.left 1 num == "1") then String.dropLeft 1 num else + String.repeat 10 "0" + +printPretty : String -> String +printPretty input = formatNumber (getNumber input) + + +formatNumber : String -> String +formatNumber input = String.concat ["(", (String.slice 0 3 input), ") ", (String.slice 3 6 input), "-", (String.slice 6 10 input)] diff --git a/PhoneNumber/PhoneNumberTest.elm b/PhoneNumber/PhoneNumberTest.elm new file mode 100644 index 0000000..7657d38 --- /dev/null +++ b/PhoneNumber/PhoneNumberTest.elm @@ -0,0 +1,28 @@ +module PhoneNumberTest where + +-- TODO - remove example inclusion once Problem sets are ready to go live or CI is set up. + +import PhoneNumberExample exposing (getNumber, printPretty) + +import ElmTest.Test exposing (test, Test, suite) +import ElmTest.Assertion exposing (assert, assertEqual) +import ElmTest.Runner.Element exposing (runDisplay) + +tests : Test +tests = suite "PhoneNumber test suite" + [ + test "cleans number" (assertEqual "1234567890" (getNumber "(123) 456-7890")), + test "cleans number with dots" (assertEqual "1234567890" (getNumber "123.456.7890")), + test "valid when 11 digits and first is 1" (assertEqual "1234567890" (getNumber "11234567890")), + test "invalid when 11 digits" (assertEqual "0000000000" (getNumber "21234567890")), + test "invalid when 9 digits" (assertEqual "0000000000" (getNumber "123456789")), + test "invalid when 12 digits" (assertEqual "0000000000" (getNumber "123456789012")), + test "invalid when empty" (assertEqual "0000000000" (getNumber "")), + test "invalid when no digits present" (assertEqual "0000000000" (getNumber " (-) ")), + test "valid with leading characters" (assertEqual "1234567890" (getNumber "my number is 123 456 7890")), + test "valid with trailing characters" (assertEqual "1234567890" (getNumber "123 456 7890 - bob")), + test "pretty print" (assertEqual "(123) 456-7890" (printPretty "1234567890")), + test "pretty print with full us phone number" (assertEqual "(123) 456-7890" (printPretty "11234567890")) + ] + +main = runDisplay tests diff --git a/elm-package.json b/elm-package.json index 6eb0b95..0d6af7f 100644 --- a/elm-package.json +++ b/elm-package.json @@ -26,7 +26,8 @@ "Strain", "SpaceAge", "Anagram", - "NucleotideCount" + "NucleotideCount", + "PhoneNumber" ], "exposed-modules": [], "dependencies": {