Something went wrong. Try again.
Starship Simulator Controls thoriumsim.com
Something went wrong. Try again.
2.4 kB · 66 lines
TypeScript
at develop
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667import { thoriumContext } from "@thorium/utils/.server/context";import { createMockDataContext } from "@thorium/utils/.server/createMockDataContext";import { testDataStoreProps } from "@thorium/utils/.server/db-fs/testDataStoreProps";import { ECS, Entity } from "@thorium/utils/ecs";import { getAggregateDamage } from "@thorium/utils/flags/damageTypes";import { describe, expect, it, beforeEach, aroundEach } from "vitest";
import { PowerEfficiencyOverloadSystem } from "../PowerEfficiencyOverloadSystem";
aroundEach(async (runTest) => { await thoriumContext.run(testDataStoreProps, async () => { await runTest(); });});
describe("PowerEfficiencyOverloadSystem", () => { let ecs: ECS; let system: Entity; beforeEach(() => { const mockDataContext = createMockDataContext();
ecs = new ECS(mockDataContext.server); ecs.addSystem(new PowerEfficiencyOverloadSystem()); system = new Entity(); system.addComponent("power"); system.addComponent("damage"); ecs.addEntity(system); }); it("should slowly decrease when power is below the maxSafePower", () => { expect(Math.max(...system.components.power!.powerLevels)).toEqual(20); expect(system.components.power?.currentPower).toEqual(10); expect(system.components.damage?.efficiency).toEqual(1); for (let i = 0; i < 60; i++) { ecs.update(16); }
expect(system.components.damage?.efficiency).toMatchInlineSnapshot(`0.999959304016354`);
// The average mission length for (let i = 0; i < 60 * 60 * 60 * 2; i++) { ecs.update(16); } expect(system.components.damage?.efficiency).toMatchInlineSnapshot(`0.7527000312104539`); }); it("should decrease when power is above maxSafePower", () => { expect(Math.max(...system.components.power!.powerLevels)).toEqual(20); expect(system.components.damage?.efficiency).toEqual(1);
const system2 = new Entity(); system2.addComponent("power"); system2.addComponent("damage"); ecs.addEntity(system2); system2.updateComponent("power", { currentPower: 24 });
// It should run for 5 minutes at 20% for (let i = 0; i < 60 * 60 * 5; i++) { ecs.update(16); }
const systemDamage = getAggregateDamage(system); const system2Damage = getAggregateDamage(system2); expect(systemDamage > system2Damage); expect(system2Damage).toMatchInlineSnapshot(`0.2571257088981171`); }); it.todo("should apply entropy, even when the system isn't overloaded at all", () => {});});