Packages
map_sorter
0.2.68
0.2.70
0.2.69
0.2.68
0.2.67
0.2.66
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Sorts a list of maps per a list of sort specs.
Current section
Files
Jump to
Current section
Files
lib/map_sorter/test_setup.ex
defmodule MapSorter.TestSetup.Person do
@behaviour Access
defstruct [:name, :likes, :dob]
defdelegate fetch(person, key), to: Map
defdelegate get_and_update(person, key, fun), to: Map
defdelegate pop(person, key), to: Map
end
defmodule MapSorter.TestSetup do
alias __MODULE__.Person
@spec setup_all(module) :: map
def setup_all(test_module)
def setup_all(MapSorterTest) do
people = [
%Person{name: "Mike", likes: "ski, arts", dob: "1992-04-15"},
%Person{name: "Mary", likes: "travels", dob: "1992-04-15"},
%Person{name: "Ann", likes: "reading", dob: "1992-04-15"},
%Person{name: "Ray", likes: "cycling", dob: "1977-08-28"},
%Person{name: "Bill", likes: "karate", dob: "1977-08-28"},
%Person{name: "Joe", likes: "boxing", dob: "1977-08-28"},
%Person{name: "Jill", likes: "cooking", dob: "1976-09-28"}
]
people_sort_specs = [asc: :dob, desc: :likes]
partly_sort_specs = [asc: :dob, asc: :what, desc: :likes, desc: :where]
people_sorted = [
%Person{name: "Jill", likes: "cooking", dob: "1976-09-28"},
%Person{name: "Bill", likes: "karate", dob: "1977-08-28"},
%Person{name: "Ray", likes: "cycling", dob: "1977-08-28"},
%Person{name: "Joe", likes: "boxing", dob: "1977-08-28"},
%Person{name: "Mary", likes: "travels", dob: "1992-04-15"},
%Person{name: "Mike", likes: "ski, arts", dob: "1992-04-15"},
%Person{name: "Ann", likes: "reading", dob: "1992-04-15"}
]
keywords = [
[name: "Mike", likes: "ski, arts", dob: "1992-04-15"],
[name: "Mary", likes: "travels", dob: "1992-04-15"],
[name: "Ann", likes: "reading", dob: "1992-04-15"],
[name: "Ray", likes: "cycling", dob: "1977-08-28"],
[name: "Bill", likes: "karate", dob: "1977-08-28"],
[name: "Joe", likes: "boxing", dob: "1977-08-28"],
[name: "Jill", likes: "cooking", dob: "1976-09-28"]
]
keywords_sort_specs = [asc: :dob, desc: :likes]
keywords_sorted = [
[name: "Jill", likes: "cooking", dob: "1976-09-28"],
[name: "Bill", likes: "karate", dob: "1977-08-28"],
[name: "Ray", likes: "cycling", dob: "1977-08-28"],
[name: "Joe", likes: "boxing", dob: "1977-08-28"],
[name: "Mary", likes: "travels", dob: "1992-04-15"],
[name: "Mike", likes: "ski, arts", dob: "1992-04-15"],
[name: "Ann", likes: "reading", dob: "1992-04-15"]
]
mixed_bags = [
%{{1.0} => {"1"}, [:"2"] => ["1"], ~D[2003-03-03] => ~T[14:30:51]},
%{{1.0} => {"2"}, [:"2"] => ["2"], ~D[2003-03-03] => ~T[14:30:52]},
%{{1.0} => {"3"}, [:"2"] => ["3"], ~D[2003-03-03] => ~T[14:30:52]},
%{{1.0} => {"4"}, [:"2"] => ["4"], ~D[2003-03-03] => ~T[14:30:52]},
%{{1.0} => {"5"}, [:"2"] => ["5"], ~D[2003-03-03] => ~T[14:30:55]}
]
mixed_bags_sort_specs = [desc: ~D[2003-03-03], desc: {1.0}]
mixed_bags_sorted = [
%{{1.0} => {"5"}, [:"2"] => ["5"], ~D[2003-03-03] => ~T[14:30:55]},
%{{1.0} => {"4"}, [:"2"] => ["4"], ~D[2003-03-03] => ~T[14:30:52]},
%{{1.0} => {"3"}, [:"2"] => ["3"], ~D[2003-03-03] => ~T[14:30:52]},
%{{1.0} => {"2"}, [:"2"] => ["2"], ~D[2003-03-03] => ~T[14:30:52]},
%{{1.0} => {"1"}, [:"2"] => ["1"], ~D[2003-03-03] => ~T[14:30:51]}
]
versions = [
%{id: "2.0.1-beta", version: Version.parse!("2.0.1-beta")},
%{id: "2.0.1-omega", version: Version.parse!("2.0.1-omega")},
%{id: "2.0.1-alpha", version: Version.parse!("2.0.1-alpha")},
%{id: "0.0.1", version: Version.parse!("0.0.1")}
]
versions_sort_specs = [desc: {:version, Version}]
versions_sorted = [
%{id: "2.0.1-omega", version: Version.parse!("2.0.1-omega")},
%{id: "2.0.1-beta", version: Version.parse!("2.0.1-beta")},
%{id: "2.0.1-alpha", version: Version.parse!("2.0.1-alpha")},
%{id: "0.0.1", version: Version.parse!("0.0.1")}
]
regexs = [
%{id: "abc.*defi", regex: ~r{abc.*def}i},
%{id: "ABC.*defi", regex: ~r{ABC.*def}i},
%{id: "(abc)def$", regex: ~r/(abc)def$/},
%{id: "^abc.*def$", regex: ~r/^abc.*def$/},
%{id: "0.0.1", regex: ~r/0.0.1/}
]
regexs_sort_specs = [asc: {:regex, MapSorter.Regex}]
regexs_sorted = [
%{id: "(abc)def$", regex: ~r/(abc)def$/},
%{id: "0.0.1", regex: ~r/0.0.1/},
%{id: "ABC.*defi", regex: ~r{ABC.*def}i},
%{id: "^abc.*def$", regex: ~r/^abc.*def$/},
%{id: "abc.*defi", regex: ~r{abc.*def}i}
]
clients = [
%Person{name: "Mike", likes: "ski, arts", dob: ~D[1992-04-15]},
%Person{name: "Mary", likes: "travels", dob: ~N[1992-04-15 23:59:59]},
%Person{name: "Ann", likes: "reading", dob: ~D[1992-04-15]},
%Person{name: "Ray", likes: "cycling", dob: ~D[1977-08-28]},
%Person{name: "Bill", likes: "karate", dob: ~N[1977-08-28 00:00:01]},
%Person{name: "Joe", likes: "boxing", dob: ~D[1977-08-28]},
%Person{name: "Jill", likes: "cooking", dob: ~D[1976-09-28]}
]
clients_sort_specs = [asc: {:dob, Date}, desc: :likes]
clients_sorted = [
%Person{name: "Jill", likes: "cooking", dob: ~D[1976-09-28]},
%Person{name: "Bill", likes: "karate", dob: ~N[1977-08-28 00:00:01]},
%Person{name: "Ray", likes: "cycling", dob: ~D[1977-08-28]},
%Person{name: "Joe", likes: "boxing", dob: ~D[1977-08-28]},
%Person{name: "Mary", likes: "travels", dob: ~N[1992-04-15 23:59:59]},
%Person{name: "Mike", likes: "ski, arts", dob: ~D[1992-04-15]},
%Person{name: "Ann", likes: "reading", dob: ~D[1992-04-15]}
]
nested_data = [
%{name: [last: "Hill"], birth: [date: ~D[1977-01-23]]},
%{name: [last: "Howe"], birth: [date: ~N[1977-01-23 01:02:03]]},
%{name: [last: "Holt"], birth: [date: ~N[1988-01-23 23:59:59]]},
%{name: [last: "Hunt"], birth: [date: ~D[1988-01-23]]}
]
nested_data_sort_specs = [
desc: {[:birth, :date], Date},
asc: [:name, :last]
]
nested_data_sorted = [
%{name: [last: "Holt"], birth: [date: ~N[1988-01-23 23:59:59]]},
%{name: [last: "Hunt"], birth: [date: ~D[1988-01-23]]},
%{name: [last: "Hill"], birth: [date: ~D[1977-01-23]]},
%{name: [last: "Howe"], birth: [date: ~N[1977-01-23 01:02:03]]}
]
%{
people: people,
people_sort_specs: people_sort_specs,
partly_sort_specs: partly_sort_specs,
people_sorted: people_sorted,
keywords: keywords,
keywords_sort_specs: keywords_sort_specs,
keywords_sorted: keywords_sorted,
mixed_bags: mixed_bags,
mixed_bags_sort_specs: mixed_bags_sort_specs,
mixed_bags_sorted: mixed_bags_sorted,
versions: versions,
versions_sort_specs: versions_sort_specs,
versions_sorted: versions_sorted,
regexs: regexs,
regexs_sort_specs: regexs_sort_specs,
regexs_sorted: regexs_sorted,
clients: clients,
clients_sort_specs: clients_sort_specs,
clients_sorted: clients_sorted,
nested_data: nested_data,
nested_data_sort_specs: nested_data_sort_specs,
nested_data_sorted: nested_data_sorted
}
end
def setup_all(MapSorter.SortSpecsTest) do
true_doc = """
& cond do
true -> true or &1 * &2
end
"""
{:ok, true_ast} = true_doc |> Code.string_to_quoted()
{true_fun, []} = true_doc |> Code.eval_string()
here_doc = """
& cond do
&1[:dob] < &2[:dob] -> true
&1[:dob] > &2[:dob] -> false
&1[:likes] > &2[:likes] -> true
&1[:likes] < &2[:likes] -> false
true -> true or &1 * &2
end
"""
{:ok, here_ast} = here_doc |> Code.string_to_quoted()
{here_fun, []} = here_doc |> Code.eval_string()
sort_specs = [:dob, desc: :likes]
tuple = List.to_tuple(sort_specs)
tuple_ast = quote do: Tuple.to_list(unquote(tuple))
tuple_str = "MapSorter.Compare.fun(Tuple.to_list({:dob, {:desc, :likes}}))"
%{
true_ast: true_ast,
true_fun: true_fun,
here_ast: here_ast,
here_fun: here_fun,
sort_specs: sort_specs,
tuple: tuple,
tuple_ast: tuple_ast,
tuple_str: tuple_str
}
end
def setup_all(MapSorter.CompareTest) do
setup_all(MapSorter.SortSpecsTest)
end
end