aboutsummaryrefslogtreecommitdiff
path: root/gen
diff options
context:
space:
mode:
Diffstat (limited to 'gen')
-rw-r--r--gen/src/gleam@list.erl12
-rw-r--r--gen/test/gleam@list_test.erl4
2 files changed, 13 insertions, 3 deletions
diff --git a/gen/src/gleam@list.erl b/gen/src/gleam@list.erl
index 411a6c8..7781dcc 100644
--- a/gen/src/gleam@list.erl
+++ b/gen/src/gleam@list.erl
@@ -295,8 +295,7 @@ merge_sort(A, B, Compare) ->
end
end.
-sort(List, Compare) ->
- ListLength = length(List),
+do_sort(List, Compare, ListLength) ->
case ListLength < 2 of
true ->
List;
@@ -305,9 +304,16 @@ sort(List, Compare) ->
SplitLength = ListLength div 2,
AList = take(List, SplitLength),
BList = drop(List, SplitLength),
- merge_sort(sort(AList, Compare), sort(BList, Compare), Compare)
+ merge_sort(
+ do_sort(AList, Compare, SplitLength),
+ do_sort(BList, Compare, ListLength - SplitLength),
+ Compare
+ )
end.
+sort(List, Compare) ->
+ do_sort(List, Compare, length(List)).
+
range(Start, Stop) ->
case gleam@int:compare(Start, Stop) of
eq ->
diff --git a/gen/test/gleam@list_test.erl b/gen/test/gleam@list_test.erl
index 1037884..2411f0b 100644
--- a/gen/test/gleam@list_test.erl
+++ b/gen/test/gleam@list_test.erl
@@ -183,6 +183,10 @@ sort_test() ->
gleam@list:sort([4, 3, 6, 5, 4], fun gleam@int:compare/2),
[3, 4, 4, 5, 6]
),
+ gleam@expect:equal(
+ gleam@list:sort([4, 3, 6, 5, 4, 1], fun gleam@int:compare/2),
+ [1, 3, 4, 4, 5, 6]
+ ),
gleam@expect:equal(gleam@list:sort([], fun gleam@int:compare/2), []).
index_map_test() ->