aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMainShayne233 <shaynetremblay@gmail.com>2019-09-29 22:30:41 -0400
committerLouis Pilfold <louis@lpil.uk>2019-10-01 10:14:39 +0100
commitf5995d3490dd5e17d31c68bdd69eed3dbe121528 (patch)
tree1c81648acb1afd5930a3373284d460fc75c8deb8
parentdbb13018f405b98140e52206158b94e744efcc24 (diff)
downloadgleam_stdlib-f5995d3490dd5e17d31c68bdd69eed3dbe121528.tar.gz
gleam_stdlib-f5995d3490dd5e17d31c68bdd69eed3dbe121528.zip
Implement string.compare/2
-rw-r--r--gen/src/gleam@string.erl5
-rw-r--r--gen/test/gleam@string_test.erl9
-rw-r--r--src/gleam/string.gleam4
-rw-r--r--src/gleam_stdlib.erl12
-rw-r--r--test/gleam/string_test.gleam18
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)
+}