test(runtime): verify native Control node stage transitions
Docs Deploy / Build and Deploy MkDocs (push) Successful in 32s

This commit is contained in:
Valentin Popov committed 2026-10-23 14:24:00 +04:00
1 parent d9fe0fcc66
commit 3cec599688
4 files changed
+527 -9

No files matched your search

+17
View File
@@ -897,6 +897,23 @@ row `1` в общей позиции `22` со значением `6000.0`.
даёт `[14, 28, 10]`. При вычитании последовательный способ начинает с последней
строки. Так одна таблица описывает и текущее значение, и то, как оно меняется.
У строк есть и связи с родительскими узлами. Когда стадия родителя меняется,
Control пересчитывает дочерние строки в глубину: ребёнка вместе со всем его
поддеревом, затем следующего ребёнка. Для числа вариантов `count` внутренняя
стадия вычисляется как `count - ceil(f32(count * ratio))`, а видимое значение
ограничивается диапазоном модели. Например, при трёх стадиях доли
`[0.1, 0.4, 0.5, 1, 0]` дали `[2, 1, 1, 0, 3]`; последнее значение — sentinel
истощения, а в модель передаётся индекс не выше `count - 1`. Нативные проверки
подтвердили порядок обхода и передачу состояния в AniMesh.
Выбранная стадия также задаёт, какие данные MSH попадают в пересчёт видимости.
У одного синтетического узла первый слот давал `[42, 330]`, а слот другой стадии —
`[102, 570]`. В проверенных векторах одинаковые данные при скрытии и повторном
включении восстановили суммы; переходы с разными слотами — нет. Эти проверки
исполняют исходные DLL на тестовых строках, но не являются запуском Control на
полной миссии; Rust пока сохраняет только начальное состояние provider-строк.
Подробные границы приведены в [техническом приложении](../appendices/script-vm.md#родители-стадии-и-видимость-provider-узлов).
Для точного повтора важен порядок округления. При исходных значениях `[2^24, 2]`
и запросе `-1` оригинал сначала складывает общий итог с изменением, затем
вычитает прежний итог. Из-за округления фактическое изменение получается `-2`.