审计整改(迭代50·缺漏三条补齐): V14落地minesweeper_rules_test(_test_preview_reveal_readonly五断言:形态A/B零状态写入+实挖差集F2同口径逐位+preview前后cell_revealed零增量—根因=t8b patch脚本漏写落盘调用文件零触碰,12→17 checks绿)+V2具名承接件落地level_shop_economy_test(_test_spend_discount_from_rule_key:shop.tres零诊断+字段不在位+折后价discount_pct推导+未激活原价—192→195 checks绿)+实现报告第九节订正与第十节审计整改记录+决定记录#10(forge_table闭集钉数34→32补账—R3摘名必然连带强度不减)
This commit is contained in:
1 parent
a2886a5336
commit
6cb1cf5efc
3 files changed
+72
-2
No files matched your search
@@ -252,6 +252,7 @@ func _init() -> void:
|
||||
_smoke_multi_terminal_settlement()
|
||||
_smoke_shop_pool()
|
||||
_test_shelf_size_from_table()
|
||||
_test_spend_discount_from_rule_key()
|
||||
_test_shop_node_entered_payload()
|
||||
_smoke_generated_coverage()
|
||||
quit(Kit.finish("level_shop_economy_test"))
|
||||
@@ -1575,3 +1576,21 @@ func _test_shelf_size_from_table() -> void:
|
||||
break
|
||||
st.shelf_size = saved
|
||||
Kit.check("夹具 shelf_size=5 → 货架五件可观测(实测 %d;真表值 3 回归=既有「进店抽 3」断言承载)〔架构整改 V9〕" % got5, got5 == 5)
|
||||
|
||||
|
||||
# ---- 散折价收回规则键(架构整改 R2——shop.spend_discount 表字段退役,折价读 economy_spend.discount_pct)----
|
||||
|
||||
func _test_spend_discount_from_rule_key() -> void:
|
||||
# 字段真删:shop.tres 加载零诊断 + spend_discount 属性不在位
|
||||
Kit.check("shop.tres 加载零诊断(spend_discount 字段真删——schema 与表行同卸)〔架构整改 V2〕",
|
||||
_db.diagnostics_count("error") == 0 and _db.run.shop.get("spend_discount") == null)
|
||||
# 80% 折价值逐位同(真实入口=LevelRunner 装配链 shop_session.current_price,economy_spend 注入)
|
||||
var bonus: int = int(_db.run.shop.price_level_bonus_at(0))
|
||||
var spend_dict: Dictionary = {"economy_spend": {"discount_pct": 80}}
|
||||
var lr_on = load("res://core/level_runner.gd").new(_db, _fresh_rng(777005), {"tree_rules": spend_dict})
|
||||
var lr_off = load("res://core/level_runner.gd").new(_db, _fresh_rng(777006), {"tree_rules": {}})
|
||||
var p_on: int = int(lr_on.shop.current_price({"base_price": 100, "price_increment": 0}))
|
||||
var p_off: int = int(lr_off.shop.current_price({"base_price": 100, "price_increment": 0}))
|
||||
var expect_on: int = maxi(1, int(floor(float(100 + bonus) * float(spend_dict["economy_spend"]["discount_pct"]) / 100.0)))
|
||||
Kit.check("散激活:折后价 = (基价+关卡加成)×discount_pct/100 floor(%d vs 期望 %d)〔架构整改 V2〕" % [p_on, expect_on], p_on == expect_on)
|
||||
Kit.check("散未激活:原价(无 economy_spend 键——%d)〔架构整改 V2〕" % p_off, p_off == 100 + bonus)
|
||||
@@ -40,6 +40,7 @@ func _init() -> void:
|
||||
_test_reveal_advances()
|
||||
_test_seal_place()
|
||||
_test_reject_out_of_catalog()
|
||||
_test_preview_reveal_readonly()
|
||||
quit(Kit.finish("minesweeper_rules_test"))
|
||||
|
||||
|
||||
@@ -110,3 +111,44 @@ func _test_reject_out_of_catalog() -> void:
|
||||
var o: Dictionary = (out[0] as Dictionary) if not out.is_empty() else {}
|
||||
Kit.check("目录外意图被拒(不静默吞掉)——实际载荷 %s" % str(o).substr(0, 80),
|
||||
out.size() == 1 and String(o.get("outcome", o.get("result", ""))) == "rejected")
|
||||
|
||||
|
||||
# ---- V14 棋盘揭示预览只读口(架构整改——preview_reveal 与实挖揭示集同口径、零状态写入零事件)----
|
||||
|
||||
func _test_preview_reveal_readonly() -> void:
|
||||
var events := 0
|
||||
_rules.cell_revealed.connect(func(_evt): events += 1) # 零发射哨兵(preview 全程不触发揭示事件)
|
||||
# 形态 A:封印在场——preview(未开格) 不越封印且零状态写入
|
||||
var before_revealed := _rules.revealed_cells().size()
|
||||
var before_seals := _rules.seal_count()
|
||||
var c_open := _unrevealed_safe()
|
||||
var prev_a: Array = _rules.preview_reveal(c_open)
|
||||
Kit.check("V14 形态A:preview 返回集(真板形态——%d 格)" % prev_a.size(), prev_a.size() >= 0)
|
||||
Kit.check("V14 形态A:调用前后零状态写入(revealed/seal 计数零变化)〔架构整改 V14〕",
|
||||
_rules.revealed_cells().size() == before_revealed and _rules.seal_count() == before_seals)
|
||||
# 形态 B:挖封印格——本格封印隐式退役只入模拟集,真实封印计数不动
|
||||
var seal_c := _unrevealed_safe()
|
||||
_rules.settle_batch([{"action": "seal_place", "cell": seal_c}])
|
||||
var sealed_before := _rules.seal_count()
|
||||
var prev_b: Array = _rules.preview_reveal(seal_c)
|
||||
Kit.check("V14 形态B:preview(封印格) 零状态写入(seal_count 不变——隐式退役只入模拟集)〔架构整改 V14〕",
|
||||
_rules.seal_count() == sealed_before)
|
||||
# 同口径对照:preview(c) = settle_batch(dig c) 后 revealed 差集 ∖ {c}(F2——不含首格与已开格)
|
||||
var dig_c := _unrevealed_safe()
|
||||
var prev_c: Array = _rules.preview_reveal(dig_c)
|
||||
var before := {}
|
||||
for rc in _rules.revealed_cells():
|
||||
before[rc] = true
|
||||
_rules.settle_batch([{"action": "dig", "cell": dig_c}])
|
||||
var after_diff := []
|
||||
for rc in _rules.revealed_cells():
|
||||
if not before.has(rc) and rc != dig_c:
|
||||
after_diff.append(rc)
|
||||
Kit.check("V14 同口径:preview(c) = 实挖揭示差集 ∖ {c}(F2——%d vs %d 格逐位)〔架构整改 V14〕" % [prev_c.size(), after_diff.size()],
|
||||
str(prev_c) == str(after_diff))
|
||||
var events_before_previews := events # 三次 preview 调用前快照(此前增量=夹具自身实挖——与 preview 无关)
|
||||
var _pa: Array = _rules.preview_reveal(_unrevealed_safe())
|
||||
var _pb: Array = _rules.preview_reveal(_unrevealed_safe())
|
||||
var _pc: Array = _rules.preview_reveal(_unrevealed_safe())
|
||||
Kit.check("V14 零事件:preview 全程 cell_revealed 零发射(前后增量 0——实测 %d→%d)〔架构整改 V14〕" % [events_before_previews, events],
|
||||
events == events_before_previews)
|
||||
Reference in new issue
Block a user