mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-09 20:30:54 -05:00
* Add abilityPoints migration * Initial stats * Build stats UI * Add TODO * Update css file name * Popular builds page
151 lines
3.6 KiB
TypeScript
151 lines
3.6 KiB
TypeScript
import { suite } from "uvu";
|
|
import * as assert from "uvu/assert";
|
|
import {
|
|
abilityPointCountsToAverages,
|
|
popularBuilds,
|
|
} from "./build-stats-utils";
|
|
|
|
const AbilityPointCountsToAverages = suite("abilityPointCountsToAverages()");
|
|
const PopularBuilds = suite("popularBuilds()");
|
|
|
|
const commonAbilities = [
|
|
{
|
|
ability: "QR" as const,
|
|
abilityPointsSum: 57,
|
|
},
|
|
{
|
|
ability: "SJ" as const,
|
|
abilityPointsSum: 10,
|
|
},
|
|
{
|
|
ability: "CB" as const,
|
|
abilityPointsSum: 10,
|
|
},
|
|
{
|
|
ability: "T" as const,
|
|
abilityPointsSum: 10,
|
|
},
|
|
{
|
|
ability: "SS" as const,
|
|
abilityPointsSum: 27,
|
|
},
|
|
];
|
|
|
|
const allAbilities = [
|
|
...commonAbilities,
|
|
{ ability: "BRU" as const, abilityPointsSum: 57 },
|
|
];
|
|
|
|
AbilityPointCountsToAverages("calculates build count", () => {
|
|
const { weaponBuildsCount } = abilityPointCountsToAverages({
|
|
allAbilities,
|
|
weaponAbilities: commonAbilities,
|
|
});
|
|
|
|
assert.is(weaponBuildsCount, 2);
|
|
});
|
|
|
|
AbilityPointCountsToAverages("calculates average ap (main only)", () => {
|
|
const { mainOnlyAbilities } = abilityPointCountsToAverages({
|
|
allAbilities,
|
|
weaponAbilities: commonAbilities,
|
|
});
|
|
|
|
assert.is(
|
|
mainOnlyAbilities.find((a) => a.name === "T")?.percentage.weapon,
|
|
50
|
|
);
|
|
});
|
|
|
|
AbilityPointCountsToAverages("calculates average ap (stackable)", () => {
|
|
const { stackableAbilities } = abilityPointCountsToAverages({
|
|
allAbilities,
|
|
weaponAbilities: commonAbilities,
|
|
});
|
|
|
|
assert.is(
|
|
stackableAbilities.find((a) => a.name === "SS")?.apAverage.weapon,
|
|
13.5
|
|
);
|
|
});
|
|
|
|
AbilityPointCountsToAverages("calculates average ap for all builds", () => {
|
|
const { mainOnlyAbilities } = abilityPointCountsToAverages({
|
|
allAbilities,
|
|
weaponAbilities: commonAbilities,
|
|
});
|
|
|
|
assert.is(
|
|
mainOnlyAbilities.find((a) => a.name === "T")?.percentage.all,
|
|
33.33
|
|
);
|
|
});
|
|
|
|
PopularBuilds("calculates popular build", () => {
|
|
const builds = popularBuilds([
|
|
...new Array(10).fill(null).map(() => ({
|
|
abilities: [{ ability: "QR" as const, abilityPoints: 57 }],
|
|
})),
|
|
{
|
|
abilities: [{ ability: "BRU" as const, abilityPoints: 57 }],
|
|
},
|
|
]);
|
|
|
|
assert.is(builds.length, 1);
|
|
assert.is(builds[0]!.count, 10);
|
|
assert.is(builds[0]!.abilities[0]!.ability, "QR");
|
|
});
|
|
|
|
PopularBuilds("calculates second most popular build (sorted by count)", () => {
|
|
const builds = popularBuilds([
|
|
...new Array(10).fill(null).map(() => ({
|
|
abilities: [{ ability: "QR" as const, abilityPoints: 57 }],
|
|
})),
|
|
...new Array(3).fill(null).map(() => ({
|
|
abilities: [{ ability: "SS" as const, abilityPoints: 57 }],
|
|
})),
|
|
...new Array(5).fill(null).map(() => ({
|
|
abilities: [{ ability: "SSU" as const, abilityPoints: 57 }],
|
|
})),
|
|
]);
|
|
|
|
assert.is(builds.length, 3);
|
|
assert.is(builds[1]!.abilities[0]!.ability, "SSU");
|
|
});
|
|
|
|
PopularBuilds("sums up abilities", () => {
|
|
const builds = popularBuilds([
|
|
{ abilities: [{ ability: "QR" as const, abilityPoints: 57 }] },
|
|
{
|
|
abilities: [
|
|
{ ability: "QR" as const, abilityPoints: 10 },
|
|
{ ability: "QR" as const, abilityPoints: 47 },
|
|
],
|
|
},
|
|
]);
|
|
|
|
assert.is(builds.length, 1);
|
|
});
|
|
|
|
PopularBuilds("sorts abilities", () => {
|
|
const builds = popularBuilds([
|
|
{
|
|
abilities: [
|
|
{ ability: "QR" as const, abilityPoints: 10 },
|
|
{ ability: "SS" as const, abilityPoints: 47 },
|
|
],
|
|
},
|
|
{
|
|
abilities: [
|
|
{ ability: "QR" as const, abilityPoints: 10 },
|
|
{ ability: "SS" as const, abilityPoints: 47 },
|
|
],
|
|
},
|
|
]);
|
|
|
|
assert.is(builds[0]!.abilities[1]!.ability, "QR");
|
|
});
|
|
|
|
AbilityPointCountsToAverages.run();
|
|
PopularBuilds.run();
|