import { describe, it, expect } from 'vitest';
import { World, type System } from '../ecs';
describe('ECS', () => {
it('создание, компоненты, запросы', () => {
const world = new World();
const a = world.createEntity();
const b = world.createEntity();
world.addComponent(a, 'pos', { x: 1, y: 2 });
world.addComponent(a, 'hp', { value: 10 });
world.addComponent(b, 'pos', { x: 0, y: 0 });
expect(world.query('pos')).toHaveLength(2);
expect(world.query('pos', 'hp')).toEqual([a]);
expect(world.getComponent<{ value: number }>(a, 'hp')!.value).toBe(10);
world.destroyEntity(a);
expect(world.isAlive(a)).toBe(false);
expect(world.query('pos')).toEqual([b]);
});
it('системы обновляются по порядку', () => {
const world = new World();
const log: string[] = [];
const makeSys = (name: string): System => ({
update(_w, _dt) {
log.push(name);
}
});
world.addSystem(makeSys('first'));
world.addSystem(makeSys('second'));
world.update(1 / 60);
expect(log).toEqual(['first', 'second']);
});
});