summaryrefslogtreecommitdiff
path: root/lib/elixir/test/elixir/list_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/elixir/test/elixir/list_test.exs')
-rw-r--r--lib/elixir/test/elixir/list_test.exs68
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/elixir/test/elixir/list_test.exs b/lib/elixir/test/elixir/list_test.exs
index d1259f099..f022bc9f6 100644
--- a/lib/elixir/test/elixir/list_test.exs
+++ b/lib/elixir/test/elixir/list_test.exs
@@ -107,6 +107,74 @@ defmodule ListTest do
assert List.keysort([a: 4, c: 1, b: 2], 0) == [a: 4, b: 2, c: 1]
end
+ test "keysort/3 with stable sorting" do
+ collection = [
+ {2, 4},
+ {1, 5},
+ {2, 2},
+ {3, 1},
+ {4, 3}
+ ]
+
+ # Stable sorting
+ assert List.keysort(collection, 0) == [
+ {1, 5},
+ {2, 4},
+ {2, 2},
+ {3, 1},
+ {4, 3}
+ ]
+
+ assert List.keysort(collection, 0) ==
+ List.keysort(collection, 0, :asc)
+
+ assert List.keysort(collection, 0, &</2) == [
+ {1, 5},
+ {2, 2},
+ {2, 4},
+ {3, 1},
+ {4, 3}
+ ]
+
+ assert List.keysort(collection, 0, :desc) == [
+ {4, 3},
+ {3, 1},
+ {2, 4},
+ {2, 2},
+ {1, 5}
+ ]
+ end
+
+ test "keysort/3 with module and stable sorting" do
+ collection = [
+ {~D[2010-01-02], 4},
+ {~D[2010-01-01], 5},
+ {~D[2010-01-02], 2},
+ {~D[2010-01-03], 1},
+ {~D[2010-01-04], 3}
+ ]
+
+ # Stable sorting
+ assert List.keysort(collection, 0, Date) == [
+ {~D[2010-01-01], 5},
+ {~D[2010-01-02], 4},
+ {~D[2010-01-02], 2},
+ {~D[2010-01-03], 1},
+ {~D[2010-01-04], 3}
+ ]
+
+ assert List.keysort(collection, 0, Date) ==
+ List.keysort(collection, 0, {:asc, Date})
+
+ assert List.keysort(collection, 0, {:desc, Date}) == [
+ {~D[2010-01-04], 3},
+ {~D[2010-01-03], 1},
+ {~D[2010-01-02], 4},
+ {~D[2010-01-02], 2},
+ {~D[2010-01-01], 5}
+ ]
+ end
+
test "keystore/4" do
assert List.keystore([a: 1, b: 2], :a, 0, {:a, 3}) == [a: 3, b: 2]
assert List.keystore([a: 1], :b, 0, {:b, 2}) == [a: 1, b: 2]