sendou.ink/app/features/tournament-bracket/core/bestOf.test.ts

62 lines
2.0 KiB
TypeScript

import { suite } from "uvu";
import * as assert from "uvu/assert";
import { resolveBestOfs } from "./bestOf.server";
const ResolveBestOfs = suite("resolveBestOfs()");
const count = (bestOfs: [bestOf: 5 | 7, id: number][], target: 5 | 7) =>
bestOfs.reduce((acc, cur) => acc + (cur[0] === target ? 1 : 0), 0);
ResolveBestOfs("2 teams", () => {
const matches = [{ matchId: 1, roundNumber: 1, groupNumber: 1 }];
const bestOfs = resolveBestOfs(matches);
assert.equal(count(bestOfs, 5), 0);
assert.equal(count(bestOfs, 7), 1);
});
ResolveBestOfs("4 teams", () => {
const matches = [
{ matchId: 1, roundNumber: 1, groupNumber: 1 },
{ matchId: 2, roundNumber: 1, groupNumber: 1 },
{ matchId: 3, roundNumber: 2, groupNumber: 1 },
{ matchId: 4, roundNumber: 1, groupNumber: 2 },
{ matchId: 5, roundNumber: 2, groupNumber: 2 },
{ matchId: 6, roundNumber: 1, groupNumber: 3 },
{ matchId: 7, roundNumber: 2, groupNumber: 3 },
];
const bestOfs = resolveBestOfs(matches);
assert.equal(count(bestOfs, 5), 1);
assert.equal(count(bestOfs, 7), 2);
});
ResolveBestOfs("8 teams", () => {
const matches = [
{ matchId: 1, roundNumber: 1, groupNumber: 1 },
{ matchId: 2, roundNumber: 1, groupNumber: 1 },
{ matchId: 3, roundNumber: 1, groupNumber: 1 },
{ matchId: 4, roundNumber: 1, groupNumber: 1 },
{ matchId: 5, roundNumber: 2, groupNumber: 1 },
{ matchId: 6, roundNumber: 2, groupNumber: 1 },
{ matchId: 7, roundNumber: 3, groupNumber: 1 },
{ matchId: 8, roundNumber: 1, groupNumber: 2 },
{ matchId: 9, roundNumber: 1, groupNumber: 2 },
{ matchId: 10, roundNumber: 2, groupNumber: 2 },
{ matchId: 11, roundNumber: 2, groupNumber: 2 },
{ matchId: 12, roundNumber: 3, groupNumber: 2 },
{ matchId: 13, roundNumber: 4, groupNumber: 2 },
{ matchId: 14, roundNumber: 1, groupNumber: 3 },
{ matchId: 15, roundNumber: 2, groupNumber: 3 },
];
const bestOfs = resolveBestOfs(matches);
assert.equal(count(bestOfs, 5), 2);
assert.equal(count(bestOfs, 7), 2);
});
ResolveBestOfs.run();