Files
portal/tools/step-pointer.test.mjs
T

30 lines
1.3 KiB
JavaScript

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);
});
});