Files
probability/tests/knowledge.test.js
T

43 lines
1.7 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { createWorld, advance } from '../src/sim/world.js';
import { playerKnownPrices } from '../src/sim/knowledge.js';
import { playerSystem } from '../src/sim/player.js';
describe('knowledge', () => {
it('knows every planet at game start via the day-0 snapshot', () => {
const w = createWorld('know-test', { systemCount: 10, npcCount: 5 });
for (const planet of w.galaxy.planets) {
const known = playerKnownPrices(w, planet.id);
expect(known).not.toBeNull();
expect(known.time).toBe(0);
expect(known.ageDays).toBe(0);
}
});
it('intel ages and refreshes as news travels', () => {
const w = createWorld('know-test', { systemCount: 10, npcCount: 5 });
const sys = playerSystem(w);
const far = w.galaxy.planets.find((p) => w.hops[sys][p.systemId] >= 2);
advance(w, 5);
const known = playerKnownPrices(w, far.id);
const hops = w.hops[sys][far.systemId];
// freshest possible news is `hops` days old
expect(known.ageDays).toBeGreaterThanOrEqual(hops - 1e-9);
expect(known.ageDays).toBeLessThanOrEqual(hops + 1 + 1e-9);
});
it('local planet intel is near-live', () => {
const w = createWorld('know-test', { systemCount: 10, npcCount: 5 });
advance(w, 5);
const local = w.galaxy.planets.find((p) => p.systemId === playerSystem(w));
expect(playerKnownPrices(w, local.id).ageDays).toBeLessThanOrEqual(1);
});
it('the observe heartbeat marks co-located NPCs as seen', () => {
const w = createWorld('know-test', { systemCount: 10, npcCount: 40 });
advance(w, 10);
// with 40 NPCs over 10 days, some must have passed through the player's system
expect(w.player.seenNpcs.size).toBeGreaterThan(0);
});
});