diff options
author | MainShayne233 <shaynetremblay@hotmail.com> | 2019-04-05 18:51:13 -0400 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2019-04-07 08:54:47 +0000 |
commit | 673e9e907093bd448db3b108b3d654c13cdc66f7 (patch) | |
tree | 5d1b50f5ffb80b35c5d8a7c033e769f6337a1893 /src | |
parent | e6fc269473f9b60e12a3c4eb4d2e17d0bd0c8f4a (diff) | |
download | gleam_stdlib-673e9e907093bd448db3b108b3d654c13cdc66f7.tar.gz gleam_stdlib-673e9e907093bd448db3b108b3d654c13cdc66f7.zip |
Implement parse_int
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam__stdlib.erl | 11 | ||||
-rw-r--r-- | src/str.gleam | 31 |
2 files changed, 41 insertions, 1 deletions
diff --git a/src/gleam__stdlib.erl b/src/gleam__stdlib.erl index 8e288c0..7ee4ba8 100644 --- a/src/gleam__stdlib.erl +++ b/src/gleam__stdlib.erl @@ -6,7 +6,7 @@ atom_create_from_string/1, atom_to_string/1, map_fetch/2, iodata_append/2, iodata_prepend/2, identity/1, decode_int/1, decode_string/1, decode_bool/1, decode_float/1, decode_thunk/1, - decode_tuple/1, decode_list/1, decode_field/2]). + decode_tuple/1, decode_list/1, decode_field/2, parse_int/1]). expect_equal(Actual, Expected) -> ?assertEqual(Expected, Actual). expect_not_equal(Actual, Expected) -> ?assertNotEqual(Expected, Actual). @@ -69,3 +69,12 @@ decode_field(Data, Key) -> _ -> decode_error_msg(io_lib:format("a map with key `~p`", [Key]), Data) end. + +parse_int(String) -> + case string:to_integer(binary:bin_to_list(String)) of + {Integer, []} -> + {ok, Integer}; + + _ -> + {error, parse_error} + end. diff --git a/src/str.gleam b/src/str.gleam index b09b8dc..6ee8235 100644 --- a/src/str.gleam +++ b/src/str.gleam @@ -7,6 +7,9 @@ import list pub external fn length(String) -> Int = "string" "length" +pub enum ParseError = + | ParseError + test length { length("ß↑e̊") |> expect:equal(_, 3) @@ -90,6 +93,34 @@ test from_int { |> expect:equal(_, "123") } +pub external fn parse_int(String) -> Result(Int, ParseError) = "gleam__stdlib" "parse_int"; + +test parse_int { + "123" + |> parse_int + |> expect:equal(_, Ok(123)) + + "-123" + |> parse_int + |> expect:equal(_, Ok(-123)) + + "0123" + |> parse_int + |> expect:equal(_, Ok(123)) + + "" + |> parse_int + |> expect:equal(_, Error(ParseError)) + + "what" + |> parse_int + |> expect:equal(_, Error(ParseError)) + + "1.23" + |> parse_int + |> expect:equal(_, Error(ParseError)) +} + pub external fn base_from_int(Int, Int) -> String = "erlang" "integer_to_binary" test base_from_int { |