1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
from graphql.pyutils import group_by
def describe_group_by():
def does_accept_an_empty_list():
def key_fn(_x: str) -> str:
raise TypeError("Unexpected call of key function.")
assert group_by([], key_fn) == {}
def does_not_change_order():
def key_fn(_x: int) -> str:
return "all"
assert group_by([3, 1, 5, 4, 2, 6], key_fn) == {
"all": [3, 1, 5, 4, 2, 6],
}
def can_group_by_odd_and_even():
def key_fn(x: int) -> str:
return "odd" if x % 2 else "even"
assert group_by([3, 1, 5, 4, 2, 6], key_fn) == {
"odd": [3, 1, 5],
"even": [4, 2, 6],
}
def can_group_by_string_length():
def key_fn(s: str) -> int:
return len(s)
assert group_by(
[
"alpha",
"beta",
"gamma",
"delta",
"epsilon",
"zeta",
"eta",
"iota",
"kapp",
"lambda",
"my",
"ny",
"omikron",
],
key_fn,
) == {
2: ["my", "ny"],
3: ["eta"],
4: ["beta", "zeta", "iota", "kapp"],
5: ["alpha", "gamma", "delta"],
6: ["lambda"],
7: ["epsilon", "omikron"],
}
|