-- lib-core.camera-test — P.3.5 -- 16 assertions: 3 state-setters + 3 bounds-clamping + 6 pan_enabled + 2 pan_invert + 2 engine-surface. -- Pattern follows P.3.1 Test-Module-Pattern; TAP output via engine.test.* local camera = require("lib-core.camera") local T = engine.test function init(ctx) -- State setters/getters (3) camera.set_target(100, 200) local t = camera.target() T.assert(t.x == 100 and t.y == 200, "set_target -> target") camera.set_zoom(2.0) T.equals(camera.zoom(), 2.0, "set_zoom -> zoom") camera.set_pan_speed(500) T.equals(camera.pan_speed(), 500, "set_pan_speed -> pan_speed") -- Bounds-Clamping (3) camera.set_bounds(0, 0, 1000, 1000) camera.set_target(2000, -50) local t1 = camera.target() T.assert(t1.x == 1000 and t1.y == 0, "set_target clamped to bounds") camera.clear_bounds() camera.set_target(-100, -100) local t2 = camera.target() T.assert(t2.x == -100 and t2.y == -100, "clear_bounds -> unclamped") camera.set_bounds(0, 0, 100, 100) local t3 = camera.target() T.assert(t3.x == 0 and t3.y == 0, "set_bounds clamps current target immediately") -- pan_enabled state (6) -- (NOTE: bind_pan_keys above this point would have enabled "keys", so reset first.) camera.set_pan_enabled("keys", false) camera.set_pan_enabled("edge", false) camera.set_pan_enabled("drag", false) T.assert(camera.pan_enabled("keys") == false, "keys disabled state") T.assert(camera.pan_enabled("edge") == false, "edge disabled state") T.assert(camera.pan_enabled("drag") == false, "drag disabled state") camera.bind_pan_keys("a", "b", "c", "d") T.assert(camera.pan_enabled("keys") == true, "bind_pan_keys auto-enables") camera.set_pan_enabled("keys", false) T.assert(camera.pan_enabled("keys") == false, "set_pan_enabled('keys', false) disables") camera.set_pan_enabled("keys", true) T.assert(camera.pan_enabled("keys") == true, "set_pan_enabled('keys', true) re-enables") -- pan_invert state (2) camera.set_pan_invert(false) T.assert(camera.pan_invert() == false, "pan_invert false") camera.set_pan_invert(true) T.assert(camera.pan_invert() == true, "pan_invert true after set") -- Engine-Surface existence (2) T.assert(type(engine.input.get_mouse_delta) == "function", "engine.input.get_mouse_delta is function") T.assert(type(engine.window.size) == "function", "engine.window.size is function") -- Hygiene: reset bounds for any subsequent loads (init-only-lifecycle but defensive) camera.clear_bounds() end