quad/quad-base/test/smoke.init.luau
qwreey 325f3f0237
fix(m2): /code-review high 반영 — mock Destroy 의미론(자손·순서·이중 no-op, H-172), lazy claim GC 타이밍(H-171), M7 TweenBrand 잔재(H-173), spec.init 신설; ② H-168~H-170은 round11 §4로
- test/mock.luau: Destroy = Destroying → Parent nil → 자손 재귀 → 연결 해제, 두 번째는 no-op;
  claim이 Destroy된 inst면 새 gcconn 즉시 Disconnect. spec.lifetime 6b/6c 추가.
- test/spec.init.luau: Quad 탑레벨 값 확인을 typechecked 계층으로(smoke.init 5절 제거).
- ROADMAP M7 체크박스·tween-plan: isTween/TweenBrand는 Brand.luau.
- conventions: 규약 요약의 단위 나열 제거(소스는 brief §1). 코드 주석 절 인용을 제목 앞부분으로.
- round11.md: H-168(Ref() 무인자 vs Ref<T>(T)) / H-169(재진입 :Set 옛 value) / H-170(resume이
  에러 삼킴)을 §4 배치 문항으로(권고 전부 (a)), §5에 단위 끝 절차 기록. 세션 원문·요약 갱신.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 19:16:28 +09:00

67 lines
1.9 KiB
Text

--[[ 임시 스모크 테스트 — New()/RunInit의 멱등 가드가 기대대로 동작하는지 확인 ]]
local Quad = require("../src")
print("=== 1. New()가 만든 module엔 InitDebug가 이미 반영돼 있음 ===")
assert(Quad.debug == false, "top-level require(quad-base)도 New()를 거쳐야 함")
print("PASS")
print()
print("=== 2. RunInit은 같은 함수를 다시 넘겨도 재실행하지 않음 ===")
do
local runCount = 0
local function initFn(module)
runCount += 1
module.marker = true
end
Quad:RunInit(initFn)
Quad:RunInit(initFn)
Quad:RunInit(initFn)
assert(runCount == 1, "같은 initFn을 여러 번 RunInit해도 실제 실행은 1회여야 함")
assert(Quad.marker == true, "실행됐다면 마커가 세팅돼 있어야 함")
print("PASS: " .. runCount .. "회 호출 중 실제 실행 " .. runCount .. "회")
end
print()
print("=== 3. New()로 만든 서로 다른 module은 RunInit 기록을 공유하지 않음 ===")
do
local runCount = 0
local function initFn(_module)
runCount += 1
end
local a = Quad.New()
local b = Quad.New()
assert(a ~= b, "New()는 매번 독립된 module을 만들어야 함")
a:RunInit(initFn)
b:RunInit(initFn)
assert(runCount == 2, "서로 다른 module 인스턴스는 각자 한 번씩 실행돼야 함(총 2회)")
print("PASS: 독립 인스턴스 2개 각각 1회씩, 총 " .. runCount .. "회")
end
print()
print("=== 4. 서로 다른 initFn은 서로의 실행 여부에 영향을 안 줌 ===")
do
local m = Quad.New()
local aRan, bRan = false, false
local function initA(_module)
aRan = true
end
local function initB(_module)
bRan = true
end
m:RunInit(initA)
assert(aRan == true and bRan == false, "initA만 돌았어야 함")
m:RunInit(initB)
assert(aRan == true and bRan == true, "이제 둘 다 돌았어야 함")
m:RunInit(initA) -- no-op이어야 함, 에러 없이 통과하면 충분
print("PASS")
end
print()
print("=== ALL PASS ===")