import test from 'node:test'; import assert from 'node:assert/strict'; import { generateWorld } from '../src/world/world-generator.js'; import { createMerchantTrafficPlans, merchantPointOnRoute, merchantRouteEndpoint, } from '../src/world/trade-traffic.js'; test('merchant traffic plans are deterministic for a world seed', () => { const world = generateWorld({ seed: 'MERCHANTS' }); assert.deepEqual( createMerchantTrafficPlans(world), createMerchantTrafficPlans(world), ); }); test('merchant traffic plans reference generated trade routes and stay bounded', () => { const world = generateWorld({ seed: 'ROUTES' }); const plans = createMerchantTrafficPlans(world, { maxShips: 12 }); const routeIds = new Set(world.tradeRoutes.map(({ id }) => id)); assert.ok(plans.length > 0); assert.ok(plans.length <= 12); for (const plan of plans) { assert.ok(routeIds.has(plan.routeId)); assert.ok(plan.progress >= 0 && plan.progress <= 1); assert.ok(plan.maxHull > 0); assert.ok(plan.cargoValue > 0); } }); test('merchant route point applies lane offset perpendicular to the route', () => { const route = { from: { x: 0, y: 0 }, to: { x: 100, y: 0 }, }; const point = merchantPointOnRoute(route, 0.5, 20); assert.deepEqual(point, { x: 50, y: 20 }); }); test('merchant route endpoint follows direction', () => { const route = { from: { x: 10, y: 20 }, to: { x: 110, y: 120 }, }; assert.deepEqual(merchantRouteEndpoint(route, 1, 0), route.to); assert.deepEqual(merchantRouteEndpoint(route, -1, 0), route.from); });