diff options
author | Louis Pilfold <louis@lpil.uk> | 2019-04-22 22:33:15 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2019-04-22 22:33:15 +0000 |
commit | 077aaf3468c640b84ff53fc92171292ddae55bf4 (patch) | |
tree | a152edcc2240f053681ca6ba315dfeb9ed8fa793 | |
parent | afdabad5cd2df77eb3f309aab9da3d34e36a0b49 (diff) | |
download | gleam_stdlib-077aaf3468c640b84ff53fc92171292ddae55bf4.tar.gz gleam_stdlib-077aaf3468c640b84ff53fc92171292ddae55bf4.zip |
Int and float modules
-rw-r--r-- | CHANGELOG.md | 5 | ||||
-rw-r--r-- | gen/src/float.erl | 10 | ||||
-rw-r--r-- | gen/src/int.erl | 13 | ||||
-rw-r--r-- | gen/src/str.erl | 17 | ||||
-rw-r--r-- | gen/test/float_test.erl | 16 | ||||
-rw-r--r-- | gen/test/int_test.erl | 21 | ||||
-rw-r--r-- | gen/test/list_test.erl | 2 | ||||
-rw-r--r-- | gen/test/str_test.erl | 31 | ||||
-rw-r--r-- | src/float.gleam | 13 | ||||
-rw-r--r-- | src/int.gleam | 8 | ||||
-rw-r--r-- | src/str.gleam | 14 | ||||
-rw-r--r-- | test/float_test.gleam | 38 | ||||
-rw-r--r-- | test/int_test.gleam | 52 | ||||
-rw-r--r-- | test/list_test.gleam | 3 | ||||
-rw-r--r-- | test/str_test.gleam | 86 |
15 files changed, 180 insertions, 149 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 33257e8..b3b5924 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,10 @@ `unique`, and `zip` functions. - `map_dict:Map` renamed to `map_dict:MapDict`. - `map_dict` module gains `drop`, and `take` functions. -- `str` module gains `append` function. +- `str` module gains `append` function and loses `from_int`, `parse_int`, + `from_float`, `parse_float`, and `base_from_int`. +- `int` module created with `parse`, `to_string`, and `to_base_string`. +- `float` module created with `parse`, and `to_string`. ## v0.1.1 - 2019-04-17 diff --git a/gen/src/float.erl b/gen/src/float.erl new file mode 100644 index 0000000..e5f843b --- /dev/null +++ b/gen/src/float.erl @@ -0,0 +1,10 @@ +-module(float). +-compile(no_auto_import). + +-export([parse/1, to_string/1]). + +parse(A) -> + gleam__stdlib:parse_float(A). + +to_string(F) -> + iodata:to_string(iodata:from_float(F)). diff --git a/gen/src/int.erl b/gen/src/int.erl new file mode 100644 index 0000000..d3b5939 --- /dev/null +++ b/gen/src/int.erl @@ -0,0 +1,13 @@ +-module(int). +-compile(no_auto_import). + +-export([parse/1, to_string/1, to_base_string/2]). + +parse(A) -> + gleam__stdlib:parse_int(A). + +to_string(A) -> + erlang:integer_to_binary(A). + +to_base_string(A, B) -> + erlang:integer_to_binary(A, B). diff --git a/gen/src/str.erl b/gen/src/str.erl index 4a35a35..153fd49 100644 --- a/gen/src/str.erl +++ b/gen/src/str.erl @@ -1,7 +1,7 @@ -module(str). -compile(no_auto_import). --export([length/1, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, append/2, from_int/1, parse_int/1, parse_float/1, base_from_int/2, from_float/1]). +-export([length/1, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, append/2]). length(A) -> string:length(A). @@ -23,18 +23,3 @@ replace(String, Pattern, With) -> append(S1, S2) -> iodata:to_string(iodata:append(iodata:new(S1), S2)). - -from_int(A) -> - erlang:integer_to_binary(A). - -parse_int(A) -> - gleam__stdlib:parse_int(A). - -parse_float(A) -> - gleam__stdlib:parse_float(A). - -base_from_int(A, B) -> - erlang:integer_to_binary(A, B). - -from_float(F) -> - iodata:to_string(iodata:from_float(F)). diff --git a/gen/test/float_test.erl b/gen/test/float_test.erl new file mode 100644 index 0000000..642e5ed --- /dev/null +++ b/gen/test/float_test.erl @@ -0,0 +1,16 @@ +-module(float_test). +-compile(no_auto_import). + +-export([parse_test/0, to_string_test/0]). + +parse_test() -> + expect:equal(float:parse(<<"1.23">>), {ok, 1.23}), + expect:equal(float:parse(<<"5.0">>), {ok, 5.0}), + expect:equal(float:parse(<<"0.123456789">>), {ok, 0.123456789}), + expect:is_error(float:parse(<<"">>)), + expect:is_error(float:parse(<<"what">>)), + expect:is_error(float:parse(<<"1">>)). + +to_string_test() -> + expect:equal(float:to_string(123.0), <<"123.0">>), + expect:equal(float:to_string(-8.1), <<"-8.1">>). diff --git a/gen/test/int_test.erl b/gen/test/int_test.erl new file mode 100644 index 0000000..a50b5e6 --- /dev/null +++ b/gen/test/int_test.erl @@ -0,0 +1,21 @@ +-module(int_test). +-compile(no_auto_import). + +-export([to_string/0, parse/0, to_base_string/0]). + +to_string() -> + expect:equal(int:to_string(123), <<"123">>), + expect:equal(int:to_string(-123), <<"-123">>), + expect:equal(int:to_string(123), <<"123">>). + +parse() -> + expect:equal(int:parse(<<"123">>), {ok, 123}), + expect:equal(int:parse(<<"-123">>), {ok, -123}), + expect:equal(int:parse(<<"0123">>), {ok, 123}), + expect:is_error(int:parse(<<"">>)), + expect:is_error(int:parse(<<"what">>)), + expect:is_error(int:parse(<<"1.23">>)). + +to_base_string() -> + expect:equal(int:to_base_string(100, 16), <<"64">>), + expect:equal(int:to_base_string(-100, 16), <<"-64">>). diff --git a/gen/test/list_test.erl b/gen/test/list_test.erl index 1944d25..3011c7e 100644 --- a/gen/test/list_test.erl +++ b/gen/test/list_test.erl @@ -136,6 +136,6 @@ sort_test() -> index_map_test() -> expect:equal(list:index_map([3, 4, 5], fun(I, X) -> {I, X} end), [{0, 3}, {1, 4}, {2, 5}]), - F = fun(I, X) -> str:append(X, str:from_int(I)) end, + F = fun(I, X) -> str:append(X, int:to_string(I)) end, expect:equal(list:index_map([<<"a">>, <<"b">>, <<"c">>], F), [<<"a0">>, <<"b1">>, <<"c2">>]). diff --git a/gen/test/str_test.erl b/gen/test/str_test.erl index b3a89b2..f6a16a3 100644 --- a/gen/test/str_test.erl +++ b/gen/test/str_test.erl @@ -1,7 +1,7 @@ -module(str_test). -compile(no_auto_import). --export([length_test/0, lowercase_test/0, uppercase_test/0, reverse_test/0, split_test/0, replace_test/0, append_test/0, from_int_test/0, parse_int_test/0, parse_float_test/0, base_from_int_test/0, from_float_test/0]). +-export([length_test/0, lowercase_test/0, uppercase_test/0, reverse_test/0, split_test/0, replace_test/0, append_test/0]). length_test() -> expect:equal(str:length(<<"ß↑e̊">>), 3), @@ -29,32 +29,3 @@ replace_test() -> append_test() -> expect:equal(str:append(<<"Test">>, <<" Me">>), <<"Test Me">>). - -from_int_test() -> - expect:equal(str:from_int(123), <<"123">>), - expect:equal(str:from_int(-123), <<"-123">>), - expect:equal(str:from_int(123), <<"123">>). - -parse_int_test() -> - expect:equal(str:parse_int(<<"123">>), {ok, 123}), - expect:equal(str:parse_int(<<"-123">>), {ok, -123}), - expect:equal(str:parse_int(<<"0123">>), {ok, 123}), - expect:is_error(str:parse_int(<<"">>)), - expect:is_error(str:parse_int(<<"what">>)), - expect:is_error(str:parse_int(<<"1.23">>)). - -parse_float_test() -> - expect:equal(str:parse_float(<<"1.23">>), {ok, 1.23}), - expect:equal(str:parse_float(<<"5.0">>), {ok, 5.0}), - expect:equal(str:parse_float(<<"0.123456789">>), {ok, 0.123456789}), - expect:is_error(str:parse_float(<<"">>)), - expect:is_error(str:parse_float(<<"what">>)), - expect:is_error(str:parse_float(<<"1">>)). - -base_from_int_test() -> - expect:equal(str:base_from_int(100, 16), <<"64">>), - expect:equal(str:base_from_int(-100, 16), <<"-64">>). - -from_float_test() -> - expect:equal(str:from_float(123.0), <<"123.0">>), - expect:equal(str:from_float(-8.1), <<"-8.1">>). diff --git a/src/float.gleam b/src/float.gleam new file mode 100644 index 0000000..2d3ca3c --- /dev/null +++ b/src/float.gleam @@ -0,0 +1,13 @@ +import iodata + +pub enum NotAFloat = + | NotAFloat + +pub external fn parse(String) -> Result(Float, NotAFloat) = + "gleam__stdlib" "parse_float"; + +pub fn to_string(f) { + f + |> iodata:from_float + |> iodata:to_string +} diff --git a/src/int.gleam b/src/int.gleam new file mode 100644 index 0000000..00571de --- /dev/null +++ b/src/int.gleam @@ -0,0 +1,8 @@ +pub enum NotAnInt = + | NotAnInt + +pub external fn parse(String) -> Result(Int, NotAnInt) = "gleam__stdlib" "parse_int"; + +pub external fn to_string(Int) -> String = "erlang" "integer_to_binary" + +pub external fn to_base_string(Int, Int) -> String = "erlang" "integer_to_binary" diff --git a/src/str.gleam b/src/str.gleam index 8a7708b..9a6c3f3 100644 --- a/src/str.gleam +++ b/src/str.gleam @@ -37,17 +37,3 @@ pub fn replace(string, pattern, with) { pub fn append(s1, s2) { iodata:new(s1) |> iodata:append(_, s2) |> iodata:to_string(_) } - -pub external fn from_int(Int) -> String = "erlang" "integer_to_binary" - -pub external fn parse_int(String) -> Result(Int, ParseError) = "gleam__stdlib" "parse_int"; - -pub external fn parse_float(String) -> Result(Float, ParseError) = "gleam__stdlib" "parse_float"; - -pub external fn base_from_int(Int, Int) -> String = "erlang" "integer_to_binary" - -pub fn from_float(f) { - f - |> iodata:from_float - |> iodata:to_string -} diff --git a/test/float_test.gleam b/test/float_test.gleam new file mode 100644 index 0000000..161f6df --- /dev/null +++ b/test/float_test.gleam @@ -0,0 +1,38 @@ +import expect +import float + +pub fn parse_test() { + "1.23" + |> float:parse + |> expect:equal(_, Ok(1.23)) + + "5.0" + |> float:parse + |> expect:equal(_, Ok(5.0)) + + "0.123456789" + |> float:parse + |> expect:equal(_, Ok(0.123456789)) + + "" + |> float:parse + |> expect:is_error + + "what" + |> float:parse + |> expect:is_error + + "1" + |> float:parse + |> expect:is_error +} + +pub fn to_string_test() { + 123.0 + |> float:to_string + |> expect:equal(_, "123.0") + + -8.1 + |> float:to_string + |> expect:equal(_, "-8.1") +} diff --git a/test/int_test.gleam b/test/int_test.gleam new file mode 100644 index 0000000..d5f0f58 --- /dev/null +++ b/test/int_test.gleam @@ -0,0 +1,52 @@ +import expect +import int + +pub fn to_string() { + 123 + |> int:to_string + |> expect:equal(_, "123") + + -123 + |> int:to_string + |> expect:equal(_, "-123") + + 0123 + |> int:to_string + |> expect:equal(_, "123") +} + +pub fn parse() { + "123" + |> int:parse + |> expect:equal(_, Ok(123)) + + "-123" + |> int:parse + |> expect:equal(_, Ok(-123)) + + "0123" + |> int:parse + |> expect:equal(_, Ok(123)) + + "" + |> int:parse + |> expect:is_error + + "what" + |> int:parse + |> expect:is_error + + "1.23" + |> int:parse + |> expect:is_error +} + +pub fn to_base_string() { + 100 + |> int:to_base_string(_, 16) + |> expect:equal(_, "64") + + -100 + |> int:to_base_string(_, 16) + |> expect:equal(_, "-64") +} diff --git a/test/list_test.gleam b/test/list_test.gleam index 493dfb7..ba5c4c5 100644 --- a/test/list_test.gleam +++ b/test/list_test.gleam @@ -1,5 +1,6 @@ import expect import list +import int import str pub fn length_test() { @@ -255,7 +256,7 @@ pub fn index_map_test() { |> expect:equal(_, [{0, 3}, {1, 4}, {2, 5}]) let f = fn(i, x) { - str:append(x, str:from_int(i)) + str:append(x, int:to_string(i)) } list:index_map(["a", "b", "c"], f) |> expect:equal(_, ["a0", "b1", "c2"]) diff --git a/test/str_test.gleam b/test/str_test.gleam index 49e45e7..5d0d6ba 100644 --- a/test/str_test.gleam +++ b/test/str_test.gleam @@ -47,89 +47,3 @@ pub fn append_test() { str:append("Test", " Me") |> expect:equal(_, "Test Me") } - -pub fn from_int_test() { - 123 - |> str:from_int - |> expect:equal(_, "123") - - -123 - |> str:from_int - |> expect:equal(_, "-123") - - 0123 - |> str:from_int - |> expect:equal(_, "123") -} - -pub fn parse_int_test() { - "123" - |> str:parse_int - |> expect:equal(_, Ok(123)) - - "-123" - |> str:parse_int - |> expect:equal(_, Ok(-123)) - - "0123" - |> str:parse_int - |> expect:equal(_, Ok(123)) - - "" - |> str:parse_int - |> expect:is_error - - "what" - |> str:parse_int - |> expect:is_error - - "1.23" - |> str:parse_int - |> expect:is_error -} - -pub fn parse_float_test() { - "1.23" - |> str:parse_float - |> expect:equal(_, Ok(1.23)) - - "5.0" - |> str:parse_float - |> expect:equal(_, Ok(5.0)) - - "0.123456789" - |> str:parse_float - |> expect:equal(_, Ok(0.123456789)) - - "" - |> str:parse_float - |> expect:is_error - - "what" - |> str:parse_float - |> expect:is_error - - "1" - |> str:parse_float - |> expect:is_error -} - -pub fn base_from_int_test() { - 100 - |> str:base_from_int(_, 16) - |> expect:equal(_, "64") - - -100 - |> str:base_from_int(_, 16) - |> expect:equal(_, "-64") -} - -pub fn from_float_test() { - 123.0 - |> str:from_float - |> expect:equal(_, "123.0") - - -8.1 - |> str:from_float - |> expect:equal(_, "-8.1") -} |