diff options
-rw-r--r-- | gen/src/gleam@string.erl | 5 | ||||
-rw-r--r-- | gen/test/gleam@string_test.erl | 9 | ||||
-rw-r--r-- | src/gleam/string.gleam | 4 | ||||
-rw-r--r-- | src/gleam_stdlib.erl | 12 | ||||
-rw-r--r-- | test/gleam/string_test.gleam | 18 |
5 files changed, 45 insertions, 3 deletions
diff --git a/gen/src/gleam@string.erl b/gen/src/gleam@string.erl index 00643c3..81b6495 100644 --- a/gen/src/gleam@string.erl +++ b/gen/src/gleam@string.erl @@ -1,7 +1,7 @@ -module(gleam@string). -compile(no_auto_import). --export([length/1, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, append/2]). +-export([length/1, lowercase/1, uppercase/1, compare/2, reverse/1, split/2, replace/3, append/2]). length(A) -> string:length(A). @@ -12,6 +12,9 @@ lowercase(A) -> uppercase(A) -> string:uppercase(A). +compare(A, B) -> + gleam_stdlib:compare_strings(A, B). + reverse(String) -> gleam@iodata:to_string(gleam@iodata:reverse(gleam@iodata:new(String))). diff --git a/gen/test/gleam@string_test.erl b/gen/test/gleam@string_test.erl index 767d11c..e28f696 100644 --- a/gen/test/gleam@string_test.erl +++ b/gen/test/gleam@string_test.erl @@ -1,7 +1,7 @@ -module(gleam@string_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]). +-export([length_test/0, lowercase_test/0, uppercase_test/0, reverse_test/0, split_test/0, replace_test/0, append_test/0, compare_test/0]). length_test() -> gleam@expect:equal(gleam@string:length(<<"ß↑e̊">>), 3), @@ -38,3 +38,10 @@ append_test() -> gleam@string:append(<<"Test">>, <<" Me">>), <<"Test Me">> ). + +compare_test() -> + gleam@expect:equal(gleam@string:compare(<<"">>, <<"">>), eq), + gleam@expect:equal(gleam@string:compare(<<"a">>, <<"">>), gt), + gleam@expect:equal(gleam@string:compare(<<"a">>, <<"A">>), gt), + gleam@expect:equal(gleam@string:compare(<<"A">>, <<"B">>), lt), + gleam@expect:equal(gleam@string:compare(<<"t">>, <<"ABC">>), gt). diff --git a/src/gleam/string.gleam b/src/gleam/string.gleam index 9714220..9c5791c 100644 --- a/src/gleam/string.gleam +++ b/src/gleam/string.gleam @@ -1,5 +1,6 @@ import gleam/iodata import gleam/list +import gleam/order pub external fn length(String) -> Int = "string" "length" @@ -7,6 +8,9 @@ pub external fn lowercase(String) -> String = "string" "lowercase" pub external fn uppercase(String) -> String = "string" "uppercase" +pub external fn compare(String, String) -> order.Order = + "gleam_stdlib" "compare_strings" + pub fn reverse(string) { string |> iodata.new diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl index 3bb762d..03f26e6 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_atom/1, - decode_pair/1, decode_list/1, decode_field/2, parse_int/1, parse_float/1]). + decode_pair/1, decode_list/1, decode_field/2, parse_int/1, parse_float/1, compare_strings/2]). expect_equal(Actual, Expected) -> ?assertEqual(Expected, Actual). expect_not_equal(Actual, Expected) -> ?assertNotEqual(Expected, Actual). @@ -90,3 +90,13 @@ parse_float(String) -> _ -> {error, nil} end. + +compare_strings(Lhs, Rhs) -> + if + Lhs == Rhs -> + eq; + Lhs < Rhs -> + lt; + true -> + gt + end. diff --git a/test/gleam/string_test.gleam b/test/gleam/string_test.gleam index 7487686..15a30f8 100644 --- a/test/gleam/string_test.gleam +++ b/test/gleam/string_test.gleam @@ -1,5 +1,6 @@ import gleam/string import gleam/expect +import gleam/order pub fn length_test() { string.length("ß↑e̊") @@ -48,3 +49,20 @@ pub fn append_test() { |> string.append(_, " Me") |> expect.equal(_, "Test Me") } + +pub fn compare_test() { + string.compare("", "") + |> expect.equal(_, order.Eq) + + string.compare("a", "") + |> expect.equal(_, order.Gt) + + string.compare("a", "A") + |> expect.equal(_, order.Gt) + + string.compare("A", "B") + |> expect.equal(_, order.Lt) + + string.compare("t", "ABC") + |> expect.equal(_, order.Gt) +} |