geninq
Version:
A JavaScript version of the Linq library for Generators
230 lines (225 loc) • 4.7 kB
text/typescript
import { SIt, AIt } from "../test-utils";
import "./group-join";
import "./select";
import "./async";
const people = [
{ name: "Hedlund, Magnus" },
{ name: "Adams, Terry" },
{ name: "Weiss, Charlotte" },
];
SIt(
"Performs a basic join",
(s) =>
s
.group_join(
[
{ name: "Barley", owner: people[1] },
{ name: "Boots", owner: people[1] },
{ name: "Whiskers", owner: people[2] },
{ name: "Daisy", owner: people[0] },
].geninq(),
(person) => person.name,
(pet) => pet.owner.name,
(a, b) => ({
owner: a.name,
pets: b.select((p) => p.name).array(),
})
)
.array(),
[
{
owner: "Hedlund, Magnus",
pets: ["Daisy"],
},
{
owner: "Adams, Terry",
pets: ["Barley", "Boots"],
},
{
owner: "Weiss, Charlotte",
pets: ["Whiskers"],
},
],
people
);
AIt(
"Performs a basic join",
(s) =>
s
.group_join(
[
{ name: "Barley", owner: people[1] },
{ name: "Boots", owner: people[1] },
{ name: "Whiskers", owner: people[2] },
{ name: "Daisy", owner: people[0] },
]
.geninq()
.async(),
(person) => person.name,
(pet) => pet.owner.name,
async (a, b) => ({
owner: a.name,
pets: await b.select((p) => p.name).array(),
})
)
.array(),
[
{
owner: "Hedlund, Magnus",
pets: ["Daisy"],
},
{
owner: "Adams, Terry",
pets: ["Barley", "Boots"],
},
{
owner: "Weiss, Charlotte",
pets: ["Whiskers"],
},
],
people
);
SIt(
"Performs a custom comparitor",
(s) =>
s
.group_join(
[
{ name: "Barley", owner: people[1] },
{ name: "Boots", owner: people[1] },
{ name: "Whiskers", owner: people[2] },
{ name: "Daisy", owner: people[0] },
].geninq(),
(person) => person,
(pet) => pet.owner,
(a, b) => ({
owner: a.name,
pets: b.select((p) => p.name).array(),
}),
(a, b) => a.name === b.name
)
.array(),
[
{
owner: "Hedlund, Magnus",
pets: ["Daisy"],
},
{
owner: "Adams, Terry",
pets: ["Barley", "Boots"],
},
{
owner: "Weiss, Charlotte",
pets: ["Whiskers"],
},
],
people
);
AIt(
"Performs a basic join",
(s) =>
s
.group_join(
[
{ name: "Barley", owner: people[1] },
{ name: "Boots", owner: people[1] },
{ name: "Whiskers", owner: people[2] },
{ name: "Daisy", owner: people[0] },
]
.geninq()
.async(),
(person) => person,
(pet) => pet.owner,
async (a, b) => ({
owner: a.name,
pets: await b.select((p) => p.name).array(),
}),
(a, b) => a.name === b.name
)
.array(),
[
{
owner: "Hedlund, Magnus",
pets: ["Daisy"],
},
{
owner: "Adams, Terry",
pets: ["Barley", "Boots"],
},
{
owner: "Weiss, Charlotte",
pets: ["Whiskers"],
},
],
people
);
SIt(
"Performs a basic join on an array",
(s) =>
s
.group_join(
[
{ name: "Barley", owner: people[1] },
{ name: "Boots", owner: people[1] },
{ name: "Whiskers", owner: people[2] },
{ name: "Daisy", owner: people[0] },
],
(person) => person.name,
(pet) => pet.owner.name,
(a, b) => ({
owner: a.name,
pets: b.select((p) => p.name).array(),
})
)
.array(),
[
{
owner: "Hedlund, Magnus",
pets: ["Daisy"],
},
{
owner: "Adams, Terry",
pets: ["Barley", "Boots"],
},
{
owner: "Weiss, Charlotte",
pets: ["Whiskers"],
},
],
people
);
AIt(
"Performs a basic join on an array",
(s) =>
s
.group_join(
[
{ name: "Barley", owner: people[1] },
{ name: "Boots", owner: people[1] },
{ name: "Whiskers", owner: people[2] },
{ name: "Daisy", owner: people[0] },
],
(person) => person.name,
(pet) => pet.owner.name,
async (a, b) => ({
owner: a.name,
pets: await b.select((p) => p.name).array(),
})
)
.array(),
[
{
owner: "Hedlund, Magnus",
pets: ["Daisy"],
},
{
owner: "Adams, Terry",
pets: ["Barley", "Boots"],
},
{
owner: "Weiss, Charlotte",
pets: ["Whiskers"],
},
],
people
);