54 lines
3.3 KiB
GDScript
54 lines
3.3 KiB
GDScript
# tests/unit/data_config/rng_stream_boot_test.gd — 数据配置加载链与统一 RNG 流单元测试宿主
|
||
# 断言面 = 启动初始化套(批 B 断言迁移自 smoke_all.gd `_initialize`,G12 施工组):
|
||
# data/tables 加载链(全部表加载 + 跨表护栏)
|
||
# core/rng_service.gd 统一流(master 种子 42 黄金向量 / derive_at 纯函数恒等 /
|
||
# open_stream 取号序 / new_adventure 会话计数器重置)
|
||
# 协议照单元侧惯例:extends SceneTree+Kit.check 主通道;--script 模式无 autoload,
|
||
# ConfigDB/RngService 显式实例化构造注入(master 种子 42 沿源);
|
||
# 表加载失败不中止(沿被迁断言面的源语义——诊断在此展开,加载链的红由具体断言落)。
|
||
# 运行:godot --headless --path game --script res://tests/unit/data_config/rng_stream_boot_test.gd
|
||
extends SceneTree
|
||
|
||
const Kit := preload("res://tests/unit/test_kit.gd")
|
||
const ConfigDBScript := preload("res://core/config_db.gd")
|
||
|
||
|
||
func _init() -> void:
|
||
_smoke_initialize()
|
||
quit(Kit.finish("rng_stream_boot_test"))
|
||
|
||
|
||
# ---- 启动初始化断言面(宿主接线注记:源函数名 `_initialize` 是 MainLoop 虚拟入口,
|
||
# 单元宿主改由 `_init` 显式调用,断言逐字未动;源 :70 事件日志落盘条经主会话裁决一
|
||
# 改判集成测试——不随本宿主,见迁移账本转办清单)----
|
||
func _smoke_initialize() -> void:
|
||
print("=== Dungeon Sweeper 垂直切片冒烟 ===")
|
||
var db = ConfigDBScript.new()
|
||
var load_ok: bool = db.load_tables("res://data/tables", true)
|
||
Kit.check("全部表加载 + 校验通过(含跨表护栏)", load_ok)
|
||
if not load_ok:
|
||
for d in db.diagnostics():
|
||
if d.severity == "error":
|
||
print(" error: [%s] %s" % [d.category, d.message])
|
||
var rng = load("res://core/rng_service.gd").new()
|
||
rng.set_master_seed(42)
|
||
# 统一流黄金向量(数据配置 AC-3:单盐沿用 board_gen 盐,
|
||
# scope 0-3 与 board_gen 向量逐位连续;Python 参考实现逐位交叉验证一致)
|
||
Kit.check("统一流向量 m=42 scope=0(=旧 board_gen scope0 连续性锚)", rng.derive_at(0) == 8672514112661456564)
|
||
Kit.check("统一流向量 m=42 scope=1", rng.derive_at(1) == 8834291164406037215)
|
||
Kit.check("统一流向量 m=42 scope=2", rng.derive_at(2) == 7714373262647006282)
|
||
Kit.check("统一流向量 m=42 scope=3", rng.derive_at(3) == 1280102845971471347)
|
||
Kit.check("统一流向量 m=42 scope=4", rng.derive_at(4) == 82585501446482399)
|
||
Kit.check("统一流向量 m=42 scope=5", rng.derive_at(5) == 8078924421474470922)
|
||
Kit.check("统一流向量 m=42 scope=6", rng.derive_at(6) == 6638052740430622424)
|
||
Kit.check("统一流向量 m=42 scope=7", rng.derive_at(7) == 8264196488417721294)
|
||
Kit.check("derive_at 纯函数恒等", rng.derive_at(0) == rng.derive_at(0))
|
||
# scope 取号语义:首个 open_stream = 全局 scope 0;计数器单调;用途标签不参与派生(只进事件日志)
|
||
var s0 = rng.open_stream("board_gen")
|
||
var s1 = rng.open_stream("encounter")
|
||
Kit.check("open_stream 全局计数器单调 +1 ×2", rng.counter() == 2)
|
||
Kit.check("首个取号 = scope 0(顺序确定)", s0.seed == rng.derive_at(0) and s1.seed == rng.derive_at(1))
|
||
rng.new_adventure(4242)
|
||
var s2 = rng.open_stream("gp_drop")
|
||
Kit.check("new_adventure 重置全局计数器", rng.counter() == 1 and s2.seed == rng.derive_at(0))
|