diff options
author | MainShayne233 <shaynetremblay@hotmail.com> | 2019-04-07 00:24:24 -0400 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2019-04-07 08:54:53 +0000 |
commit | 8cf56dae7043c25b152e10aa02d0a7ead7454380 (patch) | |
tree | 150e46aab0d7741e0eec8c7e31d80d658939366f | |
parent | 673e9e907093bd448db3b108b3d654c13cdc66f7 (diff) | |
download | gleam_stdlib-8cf56dae7043c25b152e10aa02d0a7ead7454380.tar.gz gleam_stdlib-8cf56dae7043c25b152e10aa02d0a7ead7454380.zip |
Implement parse_float
-rw-r--r-- | gen/str.erl | 15 | ||||
-rw-r--r-- | src/gleam__stdlib.erl | 11 | ||||
-rw-r--r-- | src/str.gleam | 28 |
3 files changed, 52 insertions, 2 deletions
diff --git a/gen/str.erl b/gen/str.erl index 3b1497e..b403187 100644 --- a/gen/str.erl +++ b/gen/str.erl @@ -2,7 +2,7 @@ -compile(no_auto_import). -include_lib("eunit/include/eunit.hrl"). --export([length/1, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, from_int/1, parse_int/1, base_from_int/2, from_float/1]). +-export([length/1, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, from_int/1, parse_int/1, parse_float/1, base_from_int/2, from_float/1]). length(A) -> string:length(A). @@ -81,6 +81,19 @@ parse_int_test() -> expect:equal(parse_int(<<"1.23">>), {error, parse_error}). -endif. +parse_float(A) -> + gleam__stdlib:parse_float(A). + +-ifdef(TEST). +parse_float_test() -> + expect:equal(parse_float(<<"1.23">>), {ok, 1.23}), + expect:equal(parse_float(<<"5.0">>), {ok, 5.0}), + expect:equal(parse_float(<<"0.123456789">>), {ok, 0.123456789}), + expect:equal(parse_float(<<"">>), {error, parse_error}), + expect:equal(parse_float(<<"what">>), {error, parse_error}), + expect:equal(parse_float(<<"1">>), {error, parse_error}). +-endif. + base_from_int(A, B) -> erlang:integer_to_binary(A, B). diff --git a/src/gleam__stdlib.erl b/src/gleam__stdlib.erl index 7ee4ba8..05623c6 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, parse_int/1]). + decode_tuple/1, decode_list/1, decode_field/2, parse_int/1, parse_float/1]). expect_equal(Actual, Expected) -> ?assertEqual(Expected, Actual). expect_not_equal(Actual, Expected) -> ?assertNotEqual(Expected, Actual). @@ -78,3 +78,12 @@ parse_int(String) -> _ -> {error, parse_error} end. + +parse_float(String) -> + case string:to_float(binary:bin_to_list(String)) of + {Float, []} -> + {ok, Float}; + + _ -> + {error, parse_error} + end. diff --git a/src/str.gleam b/src/str.gleam index 6ee8235..bd027a1 100644 --- a/src/str.gleam +++ b/src/str.gleam @@ -121,6 +121,34 @@ test parse_int { |> expect:equal(_, Error(ParseError)) } +pub external fn parse_float(String) -> Result(Float, ParseError) = "gleam__stdlib" "parse_float"; + +test parse_float { + "1.23" + |> parse_float + |> expect:equal(_, Ok(1.23)) + + "5.0" + |> parse_float + |> expect:equal(_, Ok(5.0)) + + "0.123456789" + |> parse_float + |> expect:equal(_, Ok(0.123456789)) + + "" + |> parse_float + |> expect:equal(_, Error(ParseError)) + + "what" + |> parse_float + |> expect:equal(_, Error(ParseError)) + + "1" + |> parse_float + |> expect:equal(_, Error(ParseError)) +} + pub external fn base_from_int(Int, Int) -> String = "erlang" "integer_to_binary" test base_from_int { |