Files
owniverse/tests/README.md
T
Kirill a09e3df220 Refactor save manager validation and update state structure
- Updated the save manager to enforce a new format version (2) and improved validation checks for the save data structure.
- Enhanced the `validate_data` function to ensure all required fields are present and valid.
- Adjusted the handling of legacy saves and introduced new checks for various state fields.
- Improved number formatting in the global script for better readability of large numbers.
- Updated tests to reflect changes in the save manager and validation logic, ensuring compatibility with the new state structure.
- Added new tests for group indexing and production transactions to ensure correctness of entity management and resource production.
2026-09-20 20:56:15 +03:00

8.0 KiB
Raw Blame History

Проверки поэтапного переноса из Owniverse.U

Время: шаг 0,1 игрового года

godot --headless --path Owniverse.GI --script res://tests/test_time.gd

Команда выполняется из общей папки проектов. Тесты используют искусственные состояния; сохранение игрока не читается и не перезаписывается.

Проверяются границы десятых долей года, производство ресурсов на этих границах, накопление дробного остатка, скорости 1–10 000 лет/сек, продолжение после загрузки и недопустимые интервалы.

Схема состояния 0.1.1 хранит:

  • time.datetime — накопленный возраст, включая необработанную дробную часть;
  • time.year — последний рассчитанный возраст с точностью до десятой доли года.

Сохранения используют только актуальную структуру состояния и не поддерживают прежние форматы.

Согласованные правила эволюции

Сохраняются постепенные интервальные окна GI: начало преобразования — через lifespan, длительность окна — lifespan / 40 при lifespan > 10, иначе lifespan.

Вероятностные исходы используют накопление дробного остатка GI, без случайного округления. Этот же подход выбран для будущего создания планет. Шансы планет записаны долями (0.01 = 1%), а альтернативные исходы звёзд — процентами (%0.1 = 0.1%). Парсер планет сохраняет дроби и поддерживает один элемент без &.

Уязвимость к бластам читается из blastability таблицы GI: HP, EON и цивилизации до C1.2 включительно; C1.3 и выше неуязвимы. Это ограничение относится к бластам уровня 1; локальное уничтожение планет уровня 2 в Unity охватывает все планеты.

godot --headless --path Owniverse.GI --script res://tests/test_stellar_rules.gd

Проверяются парсер планет, граница уязвимости, накопление редких исходов, сериализация остатков и постепенное преобразование реальной партии RD в TWD.

Создание планет подключено к ручному и автоматическому производству звёзд. Бласты обрабатываются как события, а не ресурс. Выжившие планеты переходят преемнику звезды пропорционально числу реально полученных преемников; при отсутствии преемника освобождаются. Локальное разрушение выполняется перед передачей.

Дополнительно проверяются частичная передача, альтернативные преемники, уровни разрушения 1/2, накопление слабых бластов, сохранения, ручное/автоматическое создание планет и несколько поколений за длинный шаг. Правила и формулы описаны в ../simulation_rules.md.

Описания выбранных объектов

godot --headless --path Owniverse.GI --script res://tests/test_descriptions.gd

Источник текста — Global.Templates[Global.Locale]. Заголовок берётся из Name, основной текст — из Description. Поддерживаются ключи с классом (RD.Entity.Description) и старые ключи без класса (RD.Description).

%valueN% заменяется значением переменной, имя которой записано в поле valueN этой строки. Поддерживаются amount, colored costs, lifespan, voids, he / h, metallicity, показатели энергии, плотности и скорости времени. amount1–amount4 сил пока отображаются как —; неизвестные непустые обозначения тоже дают —, пустые поля — пустую строку. [p] превращается в разделение абзацев, цветовые BBCode-теги сохраняются.

Доступные требования зелёные, недоступные красные. Для объектов со связанными экземплярами выводится доступное количество и серым общее; для планет — общее количество. Скорость изменения вычисляется по реальному времени и обновляется раз в 0,25 секунды. Доли He/H вычисляются из текущих свободных запасов; при пустой смеси показывается —. Металличность и плотность используют расчёт среды GI. Счётчики исходной материи и этики Unity в текущей GI отсутствуют и здесь не добавляются.

Первичная жизнь

godot --headless --path Owniverse.GI --script res://tests/test_life.gd

Проверяются абиогенез, деградация, повторные попытки без создания дополнительных планет, появление C0.0 на прежней звезде, остатки вероятностей, сохранение/продолжение, однократная инициализация старых планет и отсутствие воскрешения после бластов.

Проверка загрузки этических правил, распределений и отделения космических цивилизаций:

godot --headless --path Owniverse.GI --script res://tests/test_civilization_state.gd

Тест цивилизаций дополнительно проверяет общий звёздный бюджет, повторное использование резерва при переходе, звёзды в структурах, массовый эквивалент SMBH, блокировку неподдержанного прогресса, каскад деградации и повторное применение ограничений без потерь.

Полная эволюция цивилизаций

godot --headless --path Owniverse.GI --script res://tests/test_civilization_evolution.gd

Проверяются реальные коэффициенты C0.2, войны и побочный ущерб C2.0, замена планет колониями с сохранением хозяина, дипломатическое влияние, бонус периода от структур и деградация при их отсутствии. Ускоренная модель проходит все стадии C0.2 → C4.4 → Ct. Проверки контролируют сохранение населения, целочисленность этик, валидацию сохранения и детерминированное продолжение после сериализации.