import { describe, expect, it } from "vitest"; import { calculateSubstats, generateBuild, SUBSTAT_SCALARS } from "./generate"; import type { Build } from "./types"; const build: Build = { id: "test", characterId: "10000032", characterKey: "bennett", characterName: "Bennett", characterImageUrl: "", level: 90, maxLevel: 90, constellation: 6, talents: [9, 12, 13], weaponId: "11401", weaponKey: "favoniussword", weaponName: "Favonius Sword", weaponLevel: 90, weaponMaxLevel: 90, refinement: 5, artifactMode: "4pc", artifactOneId: "15007", artifactOneKey: "noblesseoblige", artifactOneName: "Noblesse Oblige", artifactTwoId: "", artifactTwoKey: "", artifactTwoName: "", sands: "er", goblet: "pyro%", circlet: "cr", rolls: { hp: 2, atk: 1, def: 0, em: 2, er: 3, "hp%": 0, "atk%": 4, "def%": 1, cr: 5, cd: 6 }, }; describe("gcsim generator", () => { it("uses current average roll scalars", () => { expect(SUBSTAT_SCALARS["def%"]).toBe(0.062); expect(calculateSubstats(build).hp).toBeCloseTo(507.88); expect(calculateSubstats(build).cd).toBeCloseTo(0.3972); }); it("generates a complete build block", () => { expect(generateBuild(build)).toBe(`bennett char lvl=90/90 cons=6 talent=9,12,13; bennett add weapon="favoniussword" refine=5 lvl=90/90; bennett add set="noblesseoblige" count=4; bennett add stats hp=4780 atk=311 er=0.518 pyro%=0.466 cr=0.311; # main stats bennett add stats hp=507.88 atk=16.54 em=39.64 er=0.1653 atk%=0.1984 def%=0.062 cr=0.1655 cd=0.3972; # substats`); }); });