import { describe, it, expect } from 'vitest'; import { createPointer, advance, enterSubPlan, exitSubPlan, currentPath, isDone } from './step-pointer.mjs'; describe('step-pointer (волны: линейный → дерево указателей, D6/OQ1)', () => { it('линейное продвижение даёт путь [n]', () => { let p = createPointer({ length: 3 }); expect(currentPath(p)).toEqual([0]); p = advance(p); expect(currentPath(p)).toEqual([1]); }); it('вход в под-план углубляет путь, выход возвращает', () => { let p = createPointer({ length: 2 }); p = enterSubPlan(p, { length: 2 }); expect(currentPath(p)).toEqual([0, 0]); p = advance(p); expect(currentPath(p)).toEqual([0, 1]); p = exitSubPlan(p); p = advance(p); expect(currentPath(p)).toEqual([1]); }); it('isDone когда корень исчерпан', () => { let p = createPointer({ length: 1 }); expect(isDone(p)).toBe(false); p = advance(p); expect(isDone(p)).toBe(true); }); it('линейный режим обратно совместим (один уровень = число indexAtRoot)', () => { let p = createPointer({ length: 5 }); p = advance(advance(p)); expect(p.indexAtRoot).toBe(2); }); });