/* 도면 표 고른 칸부터 붙이기(105-1) — 덮을 자리 셈 `pasteHits` 시험 진입 · vite --ssr 로 번들해 Node 로 돌림. * 결과 = JSON {pass, fail, failures} 한 줄(`test_m02_area_from_drawing_place.py` 가 읽음) */ import { pasteHits } from "../../../A00_Common/spreadsheet/spreadsheet_clipboard"; import type { CellRange, Sheet } from "../../../A00_Common/spreadsheet/spreadsheet_types"; let pass = 0; const failures: string[] = []; const eq = (name: string, got: unknown, want: unknown): void => { if (JSON.stringify(got) === JSON.stringify(want)) pass += 1; else failures.push(`${name}: ${JSON.stringify(got)} ≠ ${JSON.stringify(want)}`); }; const sheet = { id: "s1", 이름: "면적산출", 칸: { B2: { 값: 3 }, C3: { 식: "B2*2" }, D4: { 값: "" }, // 빈 값 = 덮을 것 없음 E9: { 값: 1 }, // 범위 밖 }, 연결: [ { 키: "깔기|㎡", 칸: "C2" }, { 키: "치기|㎥", 칸: "F1" }, // 범위 밖 ], } as unknown as Sheet; const R = (r0: number, c0: number, r1: number, c1: number): CellRange => ({ r0, c0, r1, c1 }); eq("B2:D4 값 2 · 알약 1", pasteHits(sheet, R(1, 1, 3, 3)), { 칸: 2, 연결: 1 }); eq("빈 자리", pasteHits(sheet, R(10, 0, 12, 2)), { 칸: 0, 연결: 0 }); eq("알약만", pasteHits(sheet, R(0, 5, 0, 5)), { 칸: 0, 연결: 1 }); eq("연결 없는 시트", pasteHits({ ...sheet, 연결: undefined }, R(0, 0, 9, 9)), { 칸: 3, 연결: 0, }); console.log(JSON.stringify({ pass, fail: failures.length, failures }));