52 lines
4.0 KiB
GDScript
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)
|