diff options
author | Louis Pilfold <louis@lpil.uk> | 2019-04-01 19:20:11 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2019-04-01 19:20:16 +0000 |
commit | 2c6031e323226abbf3c1bc961e7ee56213add0d1 (patch) | |
tree | 83e8f84effcc9d5ecc08bf288d77bb7b6e1d235f /src | |
parent | 6be7e9b778ddd9761d8000212232104dee39da6c (diff) | |
download | gleam_stdlib-2c6031e323226abbf3c1bc961e7ee56213add0d1.tar.gz gleam_stdlib-2c6031e323226abbf3c1bc961e7ee56213add0d1.zip |
Additional string fns
Diffstat (limited to 'src')
-rw-r--r-- | src/iodata.gleam | 41 | ||||
-rw-r--r-- | src/str.gleam | 48 |
2 files changed, 77 insertions, 12 deletions
diff --git a/src/iodata.gleam b/src/iodata.gleam index 856832f..81329d0 100644 --- a/src/iodata.gleam +++ b/src/iodata.gleam @@ -11,7 +11,16 @@ pub external fn prepend(Iodata, String) -> Iodata = pub external fn append(Iodata, String) -> Iodata = "gleam__stdlib" "iodata_append"; -pub external fn concat(List(String)) -> Iodata = +pub external fn prepend_iodata(Iodata, Iodata) -> Iodata = + "gleam__stdlib" "iodata_prepend"; + +pub external fn append_iodata(Iodata, Iodata) -> Iodata = + "gleam__stdlib" "iodata_append"; + +pub external fn from_strings(List(String)) -> Iodata = + "gleam__stdlib" "identity"; + +pub external fn concat(List(Iodata)) -> Iodata = "gleam__stdlib" "identity"; pub external fn new(String) -> Iodata = @@ -23,6 +32,9 @@ pub external fn to_string(Iodata) -> String = pub external fn byte_size(Iodata) -> Int = "erlang" "iolist_size"; +pub external fn from_float(Float) -> Iodata = + "io_lib_format" "fwrite_g"; + test iodata { let iodata = new("ello") |> append(_, ",") @@ -36,13 +48,26 @@ test iodata { iodata |> byte_size |> expect:equal(_, 13) + + let iodata = new("ello") + |> append_iodata(_, new(",")) + |> append_iodata(_, concat([new(" wo"), new("rld!")])) + |> prepend_iodata(_, new("H")) + + iodata + |> to_string + |> expect:equal(_, "Hello, world!") + + iodata + |> byte_size + |> expect:equal(_, 13) } pub external fn lowercase(Iodata) -> Iodata = "string" "lowercase" test lowercase { ["Gleam", "Gleam"] - |> concat + |> from_strings |> lowercase |> to_string |> expect:equal(_, "gleamgleam") @@ -52,7 +77,7 @@ pub external fn uppercase(Iodata) -> Iodata = "string" "uppercase" test uppercase { ["Gleam", "Gleam"] - |> concat + |> from_strings |> uppercase |> to_string |> expect:equal(_, "GLEAMGLEAM") @@ -77,9 +102,9 @@ test split { |> expect:equal(_, [new("Gleam"), new("Erlang"), new("Elixir")]) ["Gleam, Erl", "ang,Elixir"] - |> concat + |> from_strings |> split(_, ", ") - |> expect:equal(_, [new("Gleam"), concat(["Erl", "ang,Elixir"])]) + |> expect:equal(_, [new("Gleam"), from_strings(["Erl", "ang,Elixir"])]) } external fn erl_replace(Iodata, String, String, Direction) -> Iodata = @@ -93,7 +118,7 @@ pub external fn is_equal(Iodata, Iodata) -> Bool = "string" "equal" test is_equal { new("12") - |> is_equal(_, concat(["1", "2"])) + |> is_equal(_, from_strings(["1", "2"])) |> expect:true new("12") @@ -116,11 +141,11 @@ test is_empty { |> is_empty |> expect:false - concat([]) + from_strings([]) |> is_empty |> expect:true - concat(["", ""]) + from_strings(["", ""]) |> is_empty |> expect:true } diff --git a/src/str.gleam b/src/str.gleam index 8aa3e29..b09b8dc 100644 --- a/src/str.gleam +++ b/src/str.gleam @@ -16,10 +16,6 @@ test length { length("") |> expect:equal(_, 0) - - // TODO: This crashes. - // length("é") - // |> expect:equal(_, 1) } pub external fn lowercase(String) -> String = "string" "lowercase" @@ -77,3 +73,47 @@ test replace { |> replace(_, ",", "++") |> expect:equal(_, "Gleam++Erlang++Elixir") } + +pub external fn from_int(Int) -> String = "erlang" "integer_to_binary" + +test from_int { + 123 + |> from_int + |> expect:equal(_, "123") + + -123 + |> from_int + |> expect:equal(_, "-123") + + 0123 + |> from_int + |> expect:equal(_, "123") +} + +pub external fn base_from_int(Int, Int) -> String = "erlang" "integer_to_binary" + +test base_from_int { + 100 + |> base_from_int(_, 16) + |> expect:equal(_, "64") + + -100 + |> base_from_int(_, 16) + |> expect:equal(_, "-64") +} + +pub fn from_float(f) { + f + |> iodata:from_float + |> iodata:to_string +} + +test from_float { + 123.0 + |> from_float + |> expect:equal(_, "123.0") + + -8.1 + |> from_float + |> expect:equal(_, "-8.1") +} |