107 lines
8.7 KiB
Markdown
107 lines
8.7 KiB
Markdown
# 2026-10-18 병합 테스트 정리 근거
|
|
|
|
삭제는 **0개**다. 검사 본문·helper·CMake/MSVC 등록을 변경하지 않았다.
|
|
같은 행동·실패 경계·수치 조건의 동등 대체 또는 폐기된 내부 구조만 검사한다는 근거가
|
|
충분한 후보를 찾지 못했다. 모든 검사가 서로 독립적이라고 증명했다는 뜻은 아니다.
|
|
동등한 대체 또는 폐기 구조 전용임을 입증하지 못한 검사는 보존한다는 기준을 적용했다.
|
|
|
|
[이관표](test-migration.tsv)의 기존 2,876행·12열·identity·assertion 셀은 보존하고
|
|
`cleanup_decision`, `cleanup_reason_id`, `cleanup_evidence` 3열만 덧붙였다.
|
|
Dev/Refactor의 같은 최종 검사로 연결되는 두 행은 출처 이력이며 실행 중복이 아니다.
|
|
삭제가 없으므로 대체 identity도 없다. 아래 identity는 **대체 지정이 아닌 비교 검토 대상**이다.
|
|
`disposition`, `final_sha256` 등 옛 셀과 manifest의 이관 당시 기록은 그대로 둔다.
|
|
|
|
## R-DEFER
|
|
|
|
HHT·dynamic·eigen/frequency·transient thermal 실제 수치 검증 333개를 유예 상태로
|
|
보존한다. 선택 밖이라는 이유로 삭제하지 않는다. 같은 파일의 공통/helper 구간도 보존한다.
|
|
전체 body hash의 유일한 반복 묶음은
|
|
`FixedStations/ThermalSlab.ActualMeshesMatchCertifiedP2AndSeparateFourierError/0`부터
|
|
`/11`까지다. 같은 `TEST_P` 본문을 서로 다른 parameter로 실행하는 12개 identity이고
|
|
비정적 범위이므로 중복 삭제 후보로 채택하지 않았다.
|
|
|
|
## R-POLICY
|
|
|
|
`tests/test_cpp_policy_contract.py`의 두 검사를 유지한다.
|
|
`test_p_style_001_cpp_style_and_doxygen_tooling_contract`는 clang 형식·명명 규약,
|
|
Doxyfile의 입력/제외/경고와 optional `fesa_docs` 계약을 검사한다.
|
|
`test_p_style_002_msvc_targets_enable_standard_exception_unwinding`는 CMake의
|
|
solver/CLI `/EHsc`, 직접 MSVC의 shared props `Sync`, 다섯 프로젝트의 import와
|
|
override를 검사한다. Refactor에 파일이 없다는 사실은 폐기 근거가 아니다.
|
|
|
|
## R-ORACLE
|
|
|
|
`tests/unit/math/high_low_arithmetic_original.h`를 유지한다. include consumer는
|
|
`high_low_arithmetic_test.cpp`와 `hex8_high_low_test.cpp` 두 개다.
|
|
`HighLowArithmetic.OptimizedArithmeticMatchesFrozenOriginalBits`는 원본 연산으로 raw
|
|
pair를 정규화한 뒤 high/low 비트를 비교한다. 제품 predicate를 oracle로 쓰지 않는다.
|
|
`BitExponentMatchesFrozenOracleAcrossEveryExponent`는 normal exponent·trailing bit와
|
|
subnormal 경계를 검사한다. Hex8의 `FrozenMaterialPacket`·`FrozenGeometryPacket`도
|
|
이 helper의 원본 연산 순서로 독립 expected를 만든다. 제품 helper로 치환하면 독립성이 사라진다.
|
|
|
|
## R-NUMERIC
|
|
|
|
다음은 이름/행동이 비슷해도 전체 계약의 동등 대체가 입증되지 않은 실제 본문 비교다.
|
|
|
|
| 비교 대상 | 유지 근거 |
|
|
| --- | --- |
|
|
| `DenseMath.RowMajorMatrixMatchesKnownGemvGemm`, `MatrixProductKeepsShapeAndFiniteValidationOrder`와 private `DenseBlasInternal.RawProductsPreserveDestinationOnNonfiniteInput` | Public Matrix는 storage copy/move·차원 예외와 shape-before-finite 진단 순서를 소유한다. Private raw adapter는 caller 출력 buffer 보존을 검사한다. 공개 wrapper 성공만으로 private 실패 경계가 검증되지 않는다. |
|
|
| `DenseFactor.CholeskySolvesAndWhiteningRetainsScaleAndOrientation`와 `DenseBlasInternal.CholeskyAndInverseMatchKnownFactorsAndKeepFailedOutput` | 전자는 좌우·전치·직사각 RHS와 scaled whitening Gram을 검사한다. 후자는 identity RHS로 lower inverse의 명시적 `.5,-.25,.5` 값과 실패 뒤 기존 lower/inverse·factor 재사용을 검사한다. 일부 값의 중첩만으로 양쪽 전체 조건을 대체할 수 없다. |
|
|
| `DenseFactor.OwnsSnapshotAndFailedCandidatesPreserveReusableFactor`, `EmptyAndInfinityConditionBoundaryAreExplicit` | 입력 변경 후 snapshot, shape/NaN/pivot 실패·overflow solve 후 재사용, 빈 좌우 RHS 및 `2^-32` 양측/포함 경계가 있다. 낡은 lower/inverse 명칭이 남아 있어도 본문은 현재 factor 계약을 검사한다. |
|
|
| `MklPardisoSolver.SingleEquationScopeTransitionsBetweenRetainedSizes`와 `TangentSolver.SingleEquationScopeTransitionsBetweenRetainedSizes` | SPD `Factorize/Solve`와 비대칭 `FactorizeFresh/SolveCorrection` owner가 다르며 후자는 `{2,1,0,3}` 행렬을 쓴다. `ReusesRhsButFreshValuesAndFailureCannotReuseStaleState`는 fresh 실패 후 `solver-not-factorized`와 correction 보존도 검사한다. TLS 공통화만으로 각 owner 호출 경계가 없어지지 않는다. |
|
|
| `HighLowArithmetic.PacketDispatchRetainsComponentsAndInstructionGates`와 `Hex8HighLow.PacketVectorGuardsPreserveScalarFlagsAndBits`, `PacketDoesNotClearPriorMaskedStickyFlags`, `ConcurrentFirstLinearTrialsAcrossCopiesAndMoveKeepBits` | dispatch ISA/OS·FTZ 복원과 scalar/packet 선택, SIMD lane의 RN64/status·FP sticky flag·비트, copy/move/concurrent cache 결정론은 다른 경계다. 단순 scalar 성공/값 비교가 flags와 결정론을 대체하지 않는다. |
|
|
|
|
이 범주의 나머지 행도 본래 assertion/oracle와 identity를 유지한다. 전체 쌍에 대한
|
|
의미적 동등성을 주장하지 않으며, 추가 증명 없이 시험을 합치거나 helper를 제거하지 않았다.
|
|
|
|
## R-CAPABILITY
|
|
|
|
`tests/unit/elements/element_capabilities_test.cpp`는 adapter 경계를 소유한다.
|
|
`ShellTrialPreservesCompleteDirectionalResponseAndFailure` 본문은 kernel과 capability의
|
|
force/tangent/recovery·drilling 고차 directional 응답을 비트로 비교하고 direction 입력을
|
|
보존한다. 잘못된 trial의 structured status와 이후 정상 재사용까지 비교한다.
|
|
`BoundViewsSurviveOwnerVectorMovesAndRejectOtherFamilies`는 borrowed view 수명·다른 family
|
|
거부를 검사한다. Kernel 수식 검사만으로 adapter 전달·소유 경계가 검증되지 않는다.
|
|
Inertia/thermal 전용 identity는 R-DEFER로 분류하며 삭제하지 않았다.
|
|
|
|
## R-COMPARISON
|
|
|
|
C++ reference policy와 Python comparator는 같은 5%/1% 기준을 구현해도 별도 consumer다.
|
|
`ReferenceTolerancePolicy.AppliesRelativeAndNearZeroThresholdsAtTheirInclusiveBoundaries`는
|
|
C++ family row branch·threshold·relative applicability를 검사하고,
|
|
`test_inclusive_row_and_rms_boundaries_are_independent`는 Python 결과의 독립 row/RMS
|
|
경계를 검사한다. Python `test_report_is_deterministic_and_keeps_family_boundaries`는
|
|
보고서 JSON과 U/RF/S family·reference hash를 검사한다. Header collision·identity-before-NaN·
|
|
dtype/shape·없는 자료의 not-run도 solver 실제 실행과 다른 합성 계약이다.
|
|
정식 fine/_02/pressure 자료 부재·`_02` comparator 연결 부재는 여전히 미완료이며
|
|
유일 검사를 지우는 근거로 삼지 않았다. 비정적 이름의 합성 정책 검사를 실제 동해석 통과로 세지 않는다.
|
|
|
|
## R-STATIC
|
|
|
|
정리 당시 정적·공통 선택 identity는 유지했다. 정리 전 source body/행/hash와 최종 본문을
|
|
대조하고 이관표의 최종 macro identity에 연결했다. 완전한 대체의 행동·실패 경계·수치
|
|
조건을 입증하지 못했으므로 기존 assertion과 독립 oracle를 보존한다. 실행 성공·장시간·
|
|
과거 제외 여부를 삭제 근거로 사용하지 않았다.
|
|
|
|
## R-SUPPORT
|
|
|
|
파일 record·helper/oracle/fixture/include/static assertion·등록/정책 문서 행이다.
|
|
같은 최종 파일을 가리키는 역사 행을 제거하지 않았다. 제품/검사를 삭제하지 않아 이번
|
|
변경이 만든 orphan은 없다. 기존 helper의 모든 간접 참조를 의미적으로 입증했다고
|
|
주장하지 않으며, 참조 없는 폐기 구조라고 확정할 근거가 부족한 항목도 보존한다.
|
|
|
|
## 검증 기록과 최종 반영
|
|
|
|
당시 정적 감사 자료는 저장소 root의
|
|
`.build/merge-verification/refactor-integration-final-20261018-01/worker-raw/t6-20261018/`에
|
|
보존했다. `audit.py`와 `audit.json`은 TSV 원셀·최종 분류, 964개 body·631/333 선택,
|
|
양쪽 등록·제품274개·실행물·기준자료의 보존을 확인한 당시 명령과 결과다.
|
|
옛 절대 경로와 보관 위치의 대응은 상위 보관 폴더의 `archive-inventory.json`에서 찾는다.
|
|
문서 전용 변경에 새 build/test를 실행한 기록은 아니다.
|
|
|
|
정리 전 실제 Native/CMake/CTest 각631개·Python145개와 정적5모델 근거를 최종 상태와
|
|
대조했고 `762bd4b`로 dev에 반영했다. 전체964개 PASS를 뜻하지 않는다.
|
|
비정적333·fine/_02/pressure·thermal 새 reference와 NT11 제한, ShellNL RF/RM
|
|
false/review-only와 stress mapping 미판정은 유지한다. 최종 실행 범위와 자료 위치는
|
|
[병합 결과](README.md#병합-결과와-검증-범위)에 정리했다.
|