refactor(M03): extract terrain quality mesh cache
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
extends SceneTree
|
||||
|
||||
## Scene-free contract, admission and LRU regression for terrain revisit meshes.
|
||||
|
||||
const CACHE_SCRIPT := preload("res://src/render/terrain/terrain_quality_mesh_cache.gd")
|
||||
const LOADER_PATH := "res://src/scenes/streaming/streaming_world_loader.gd"
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
var failures: Array[String] = []
|
||||
_verify_cache_contract(failures)
|
||||
_verify_loader_boundary(failures)
|
||||
if not failures.is_empty():
|
||||
for failure in failures:
|
||||
push_error("TERRAIN_QUALITY_MESH_CACHE: %s" % failure)
|
||||
quit(1)
|
||||
return
|
||||
print("TERRAIN_QUALITY_MESH_CACHE PASS contract_cases=15 loader_calls=3")
|
||||
quit(0)
|
||||
|
||||
|
||||
func _verify_cache_contract(failures: Array[String]) -> void:
|
||||
var cache: RefCounted = CACHE_SCRIPT.new()
|
||||
var mesh_a := ArrayMesh.new()
|
||||
var mesh_b := ArrayMesh.new()
|
||||
var mesh_c := ArrayMesh.new()
|
||||
_expect_true(not bool(cache.call("store", "", mesh_a, "baked_full", 2)), "empty key rejected", failures)
|
||||
_expect_true(not bool(cache.call("store", "a", null, "baked_full", 2)), "null mesh rejected", failures)
|
||||
for excluded_source in ["control_splat_cache", "splat_cache", "splat"]:
|
||||
_expect_true(not bool(cache.call("store", "a", mesh_a, excluded_source, 2)), "%s rejected" % excluded_source, failures)
|
||||
_expect_true(bool(cache.call("store", "a", mesh_a, "baked_full", 2)), "first store", failures)
|
||||
_expect_true(bool(cache.call("store", "b", mesh_b, "baked_full", 2)), "second store", failures)
|
||||
var restored_a: Dictionary = cache.call("restore", "a")
|
||||
_expect_true(restored_a.get("mesh") == mesh_a, "restore retains mesh reference", failures)
|
||||
_expect_true(String(restored_a.get("source", "")) == "baked_full", "restore retains source", failures)
|
||||
_expect_true(bool(cache.call("store", "c", mesh_c, "baked_full", 2)), "third store", failures)
|
||||
_expect_true((cache.call("restore", "b") as Dictionary).is_empty(), "oldest evicted after touch", failures)
|
||||
_expect_true(not (cache.call("restore", "a") as Dictionary).is_empty(), "touched entry retained", failures)
|
||||
var diagnostics: Dictionary = cache.call("diagnostic_snapshot")
|
||||
_expect_true(int(diagnostics.get("entry_count", 0)) == 2, "bounded count", failures)
|
||||
(diagnostics.get("entries_oldest_to_newest") as Array).clear()
|
||||
_expect_true(int((cache.call("diagnostic_snapshot") as Dictionary).get("entry_count", 0)) == 2, "diagnostics detached", failures)
|
||||
_expect_true(not bool(cache.call("store", "zero", ArrayMesh.new(), "baked_full", -1)), "negative capacity clamps to zero", failures)
|
||||
cache.call("clear")
|
||||
_expect_true(int((cache.call("diagnostic_snapshot") as Dictionary).get("entry_count", -1)) == 0, "clear releases entries", failures)
|
||||
|
||||
|
||||
func _verify_loader_boundary(failures: Array[String]) -> void:
|
||||
var source := _read_text(LOADER_PATH, failures)
|
||||
_expect_true(source.contains("TERRAIN_QUALITY_MESH_CACHE_SCRIPT.new()"), "loader composes cache", failures)
|
||||
_expect_true(source.contains('_terrain_quality_mesh_cache.call("restore", tile_key)'), "loader delegates restore", failures)
|
||||
_expect_true(source.contains('_terrain_quality_mesh_cache.call("clear")'), "loader delegates clear", failures)
|
||||
for removed_symbol in ["_terrain_quality_mesh_cache_order", "func _touch_quality_terrain_mesh_cache", "func _trim_quality_terrain_mesh_cache"]:
|
||||
_expect_true(not source.contains(removed_symbol), "loader omits %s" % removed_symbol, failures)
|
||||
|
||||
|
||||
func _read_text(path: String, failures: Array[String]) -> String:
|
||||
var file := FileAccess.open(path, FileAccess.READ)
|
||||
if file == null:
|
||||
failures.append("cannot open %s" % path)
|
||||
return ""
|
||||
return file.get_as_text()
|
||||
|
||||
|
||||
func _expect_true(actual_value: bool, label: String, failures: Array[String]) -> void:
|
||||
if not actual_value:
|
||||
failures.append("%s expected true" % label)
|
||||
@@ -0,0 +1 @@
|
||||
uid://khd1ths2b4ya
|
||||
Reference in New Issue
Block a user