import { describe, expect, it } from 'vitest'; import { buildPier } from '../src/core/geometry'; import { columnInputFor, columnRebar } from '../src/core/rebar/column'; import { loadP1 } from './helpers'; describe('기둥 철근 높이는 모델에서 (Hc · h_cop, 승인 2026-10-23)', () => { it('P1: Hc 12703 and h_cop 2644 come out of the model, as in 기둥철근.md', () => { const input = columnInputFor(buildPier(loadP1())); expect(input.Hc).toBeCloseTo(12703, 0); expect(input.hcop).toBeCloseTo(2644, 0); const col = columnRebar(input); expect(col.zTop2).toBeCloseTo(14539, 0); expect(col.zTop1).toBeCloseTo(14776, 0); }); it('taper h2 = 3000: Level underside 39.411, Hc 11203, P2 top 13039 (= Level underside + l_d)', () => { const m = buildPier({ ...loadP1(), copingH2Mm: 3000 }); const input = columnInputFor(m); expect(input.Hc).toBeCloseTo(11203, 0); // h_cop = step top (43.555) − Level underside (39.411): the coping at the column gets taller with h2. expect(input.hcop).toBeCloseTo(4144, 0); const col = columnRebar(input); expect(col.zTop2).toBeCloseTo(13039, 0); // The P1 top is anchored to the step top (and C3), so it does not move with h2. expect(col.zTop1).toBeCloseTo(14776, 0); }); it('P3 and P6 end at the coping middle level: P1 e_top 1322; taper 3000 gives e_top 2072, P3 37 ties, P6 32 bars', () => { const p1 = columnInputFor(buildPier(loadP1())); expect(p1.eTop).toBeCloseTo(1322, 0); const high = columnInputFor(buildPier({ ...loadP1(), copingH2Mm: 3000 })); expect(high.eTop).toBeCloseTo(2072, 0); const col = columnRebar(high); expect(col.zTopT).toBeCloseTo(13275, 0); expect(col.p3Count).toBe(37); expect(col.p6Count).toBe(32); }); });