Files
TheTree_mock/docs/plans/original-completion-2026-10-02/checkpoints/native-input-copy-r332-r337/054-keys.gd
T

52 lines
4.0 KiB
GDScript

extends "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p23-02-native-guest-pipeline-boundaries-r195.gd"
const NEW_CASES := ["name_unicode","name_reverse","string_keys","mixed_keys"]
func setup(label: String) -> void:
super.setup("ordinary")
var d = runtime.definition_registry.get_facility(&"finite.definition")
if label == "name_unicode": d.inventory_inputs = {&"猫":0,&"A":0,&"é":0,&"あ":0,&"😀":0}
elif label == "name_reverse": d.inventory_inputs = {&"z":0,&"m":0,&"a":0}
elif label == "string_keys": d.inventory_inputs = {"z":0,"a":0}
else: d.inventory_inputs = {&"z":0,"a":0,&"猫":0}
func run() -> void:
output=OS.get_environment("THE_TREE_RUNTIME_MONITOR_OUTPUT")
runtime=root.get_node("SimulationRuntime");clock=root.get_node("GameClock")
var raw := FileAccess.get_file_as_bytes(OS.get_environment("THE_TREE_REPLAY_SNAPSHOT")).decompress(11411840,FileAccess.COMPRESSION_ZSTD)
var initial: Dictionary=bytes_to_var(raw)
runtime.initialize(clock,root.get_node("GameState"),int(initial[&"systems"][&"runtime"][&"world_seed"]))
check(runtime.restore_snapshot(initial),"fixed646 original seed/context restore")
core=ClassDB.instantiate(&"TheTreeNumericCore")
for label: String in NEW_CASES:
setup(label)
var before := var_to_bytes(state())
var selected := project()
var fallback := label.begins_with("custom_") or label=="path_observer"
check(bool(selected.get(&"supported",false))==not fallback,label+" actual native domain")
if fallback:check(var_to_bytes(state())==before,label+" rejection has no public effects")
var got: Array=runtime._project_guest_candidates(&"finite.guest") if fallback else selected[&"candidates"]
var after := var_to_bytes(state())
var got_bytes := var_to_bytes(got)
check(runtime.path_service._query_batch.is_empty(),label+" derived batch released")
setup(label)
check(var_to_bytes(state())==before,label+" same complete starting state")
var expected: Array=runtime._project_guest_candidates_without_native(&"finite.guest")
check(var_to_bytes(expected)==got_bytes,label+" complete ordered typed candidates")
check(var_to_bytes(state())==after,label+" complete Runtime Path cache errors counters callback count")
if label=="stairs150":check(int(got[0][&"travel_minutes"])==2,label+" stairs ceil150/100")
elif label=="elevator151":check(int(got[0][&"travel_minutes"])==12,label+" elevator ceil((151+1floor*10minutes*100)/100)")
elif label in ["stairs149","foreign150"]:check(int(got[0][&"travel_minutes"])==1,label+" ordinary movement retained")
if label=="integer_wrap":check(int(got[0][&"expected_wait"])==9223372036854775805 and int(got[0][&"group_fit"])==-9223372036854775808,label+" signed multiplication wrap")
if label=="clamp_low":check(got[0][&"expected_quality"]==0 and got[0][&"group_fit"]==0,label+" zero divisor guard and quality lower clamp")
if label=="ordinary":
check(got[0][&"expected_quality"]==100,label+" quality upper clamp")
var protected_bytes := var_to_bytes(expected)
got[0][&"facility_tags"].append(&"mutated");got[0][&"need_relief"].clear();got[0][&"path_handle"].clear()
check(var_to_bytes(expected)==protected_bytes and runtime.definition_registry.get_facility(&"finite.definition").tags==[&"rest"],label+" owned returned tags relief and handle")
records.append({"case":label,"native_supported":not fallback,"candidates":expected,"observer_calls":calls})
core=null
var report := {"passed":failures.is_empty(),"checks":checks,"failures":failures,"pid":OS.get_process_id(),"case_count":NEW_CASES.size(),"fixtures":typed("fixtures",records),"unit_accepted":false,"performance_accepted":false,"Windows_accepted":false}
report["passed"]=failures.is_empty();report["checks"]=checks;report["failures"]=failures
var file := FileAccess.open(output.path_join("report.json"),FileAccess.WRITE)
if file==null:quit(98);return
file.store_string(JSON.stringify(report,"\t"));file.close()
print("Guest pipeline boundaries: %d checks, %d failures"%[checks,failures.size()]);quit(0 if failures.is_empty() else 1)