Packages

Elixir library extending `Enum.min_by/2`, `Enum.max_by/2` and `Enum.min_max_by/2` to return a list of results instead of just one.

Current section

Files

Jump to
minmaxlist test minmaxlist_test.exs
Raw

test/minmaxlist_test.exs

defmodule MinmaxlistTest do
use ExUnit.Case
doctest Minmaxlist
test "min list by" do
assert Minmaxlist.min_list_by(["a", "b", "aa", "bb", "bbb", "aaa"], fn(x) -> String.length(x) end) == ["a", "b"]
assert Minmaxlist.min_list_by([], fn(x) -> String.length(x) end) == []
end
test "max list by" do
assert Minmaxlist.max_list_by(["a", "b", "aa", "bb", "bbb", "aaa"], fn(x) -> String.length(x) end) == ["bbb", "aaa"]
assert Minmaxlist.max_list_by([], fn(x) -> String.length(x) end) == []
end
test "min max list by" do
assert Minmaxlist.min_max_list_by(["a", "b", "aa", "bb", "bbb", "aaa"], fn(x) -> String.length(x) end) == {["a", "b"], ["bbb", "aaa"]}
assert Minmaxlist.min_max_list_by([], fn(x) -> String.length(x) end) == {[], []}
end
test "README examples" do
import Minmaxlist
dataset = [
%{name: "A", age: 24, income: 4000},
%{name: "B", age: 22, income: 3300},
%{name: "C", age: 22, income: 2800},
%{name: "D", age: 25, income: 5000},
%{name: "E", age: 22, income: 3300},
%{name: "F", age: 25, income: 5500},
%{name: "G", age: 24, income: 4500},
]
result = dataset |> min_list_by(&(&1.age)) |> max_list_by(&(&1.income))
assert result == [%{name: "B", age: 22, income: 3300}, %{name: "E", age: 22, income: 3300}]
result = dataset |> min_max_list_by(&(&1.age))
assert result == {
[%{name: "B", age: 22, income: 3300}, %{name: "C", age: 22, income: 2800}, %{name: "E", age: 22, income: 3300}],
[%{name: "D", age: 25, income: 5000}, %{name: "F", age: 25, income: 5500}]
}
end
end