[
{
"name": "records fall into buckets named by the value at the key",
"args": [[{ "name": "Ada", "team": "core" }, { "name": "Grace", "team": "ops" }, { "name": "Linus", "team": "core" }], "team"],
"expect": {
"core": [{ "name": "Ada", "team": "core" }, { "name": "Linus", "team": "core" }],
"ops": [{ "name": "Grace", "team": "ops" }]
}
},
{
"name": "grouping a sorted list does not unsort it: input order survives inside each group",
"args": [[{ "seq": 1, "team": "a" }, { "seq": 2, "team": "b" }, { "seq": 3, "team": "a" }, { "seq": 4, "team": "b" }, { "seq": 5, "team": "a" }], "team"],
"expect": {
"a": [{ "seq": 1, "team": "a" }, { "seq": 3, "team": "a" }, { "seq": 5, "team": "a" }],
"b": [{ "seq": 2, "team": "b" }, { "seq": 4, "team": "b" }]
}
},
{
"name": "one record is one group of one",
"args": [[{ "name": "Ada", "team": "core" }], "team"],
"expect": { "core": [{ "name": "Ada", "team": "core" }] }
},
{
"name": "no records is no groups, not a group of nothing",
"args": [[], "team"],
"expect": {}
},
{
"name": "every distinct value is its own group",
"args": [[{ "team": "a" }, { "team": "b" }, { "team": "c" }], "team"],
"expect": { "a": [{ "team": "a" }], "b": [{ "team": "b" }], "c": [{ "team": "c" }] }
},
{
"name": "one shared value is one group holding everything",
"args": [[{ "seq": 1, "team": "a" }, { "seq": 2, "team": "a" }, { "seq": 3, "team": "a" }], "team"],
"expect": { "a": [{ "seq": 1, "team": "a" }, { "seq": 2, "team": "a" }, { "seq": 3, "team": "a" }] }
},
{
"name": "a missing key groups under the empty string rather than dropping the record",
"args": [[{ "seq": 1, "team": "a" }, { "seq": 2 }], "team"],
"expect": { "a": [{ "seq": 1, "team": "a" }], "": [{ "seq": 2 }] }
},
{
"name": "a null value and a missing key land in the same group, because they mean the same",
"args": [[{ "seq": 1, "team": null }, { "seq": 2 }, { "seq": 3, "team": "a" }], "team"],
"expect": { "": [{ "seq": 1, "team": null }, { "seq": 2 }], "a": [{ "seq": 3, "team": "a" }] }
},
{
"name": "integers name their group by their decimal digits",
"args": [[{ "name": "Ada", "owner": 17 }, { "name": "Grace", "owner": 42 }, { "name": "Linus", "owner": 17 }], "owner"],
"expect": {
"17": [{ "name": "Ada", "owner": 17 }, { "name": "Linus", "owner": 17 }],
"42": [{ "name": "Grace", "owner": 42 }]
}
},
{
"name": "a negative integer keeps its sign in the group name",
"args": [[{ "delta": -3 }, { "delta": 0 }, { "delta": -3 }], "delta"],
"expect": { "-3": [{ "delta": -3 }, { "delta": -3 }], "0": [{ "delta": 0 }] }
},
{
"name": "booleans render as true and false in every language, not True and False",
"args": [[{ "seq": 1, "active": true }, { "seq": 2, "active": false }, { "seq": 3, "active": true }], "active"],
"expect": {
"true": [{ "seq": 1, "active": true }, { "seq": 3, "active": true }],
"false": [{ "seq": 2, "active": false }]
}
},
{
"name": "records with different shapes group on the one field they share",
"args": [[{ "kind": "invoice", "total": 120 }, { "kind": "credit", "reason": "returned" }, { "kind": "invoice", "lines": [1, 2] }], "kind"],
"expect": {
"invoice": [{ "kind": "invoice", "total": 120 }, { "kind": "invoice", "lines": [1, 2] }],
"credit": [{ "kind": "credit", "reason": "returned" }]
}
},
{
"name": "the empty string is an ordinary group name when it is the real value",
"args": [[{ "seq": 1, "team": "" }, { "seq": 2, "team": "a" }], "team"],
"expect": { "": [{ "seq": 1, "team": "" }], "a": [{ "seq": 2, "team": "a" }] }
},
{
"name": "a fractional number cannot name a group: the three languages print it differently",
"args": [[{ "rate": 1.5 }], "rate"],
"expectError": "fractional number"
},
{
"name": "a list cannot name a group",
"args": [[{ "tags": ["a", "b"] }], "tags"],
"expectError": "list or map"
},
{
"name": "a map cannot name a group",
"args": [[{ "meta": { "team": "a" } }], "meta"],
"expectError": "list or map"
},
{
"name": "an integer too large to survive a JavaScript round trip is rejected",
"args": [[{ "id": 9007199254740993 }], "id"],
"expectError": "out-of-range number"
},
{
"name": "an empty key name is a caller bug",
"args": [[{ "team": "a" }], ""],
"expectError": "non-empty key name"
}
]