import { describe, expect, it } from 'vitest'; import { buildPier } from '../src/core/geometry'; import { rebarSummary } from '../src/core/rebar/summary'; import { loadP1 } from './helpers'; const { rows, warnings } = rebarSummary(buildPier(loadP1())); const count = (name: string) => rows.find((r) => r.name === name)!.count; describe('③ 철근표 요약 (P1)', () => { it('bearing blocks: S1 and S2 80 bars each', () => { expect(count('S1')).toBe(80); expect(count('S2')).toBe(80); }); it('coping: C1–C8 12 each, C9 18, C10 9, C11 18, C12 5 rows, C13 2 rows, C14 38, C15 11, C16 22', () => { for (const n of ['C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8']) expect(count(n)).toBe(12); expect(count('C9')).toBe(18); expect(count('C10')).toBe(9); expect(count('C11')).toBe(18); expect(count('C12')).toBe(5); expect(count('C13')).toBe(2); expect(count('C14')).toBe(38); expect(count('C15')).toBe(11); expect(count('C16')).toBe(22); }); it('column: P1 230, P2 230, couplers 368, P3 38, P5 19, P4 8, P6 32', () => { expect(count('P1')).toBe(230); expect(count('P2')).toBe(230); expect(count('커플러')).toBe(368); expect(count('P3')).toBe(38); expect(count('P5')).toBe(19); expect(count('P4')).toBe(8); expect(count('P6')).toBe(32); }); it('footing: B1–B4 31 each, B5–B8 40 each, B10-1 18, B10-2 18, B11 60, B12 47', () => { for (const n of ['B1', 'B2', 'B3', 'B4']) expect(count(n)).toBe(31); for (const n of ['B5', 'B6', 'B7', 'B8']) expect(count(n)).toBe(40); expect(count('B10-1')).toBe(18); expect(count('B10-2')).toBe(18); expect(count('B11')).toBe(60); expect(count('B12')).toBe(47); }); it('B9: 320 bars; warnings: B2 needs a splice (13646 > 12000)', () => { expect(count('B9')).toBe(320); expect(warnings.map((w) => w.code)).toEqual(['I02', 'RB-F08']); // defaults are assumed values (I02) // B2 is split into two pieces (추천안): each piece is about half the 13646 bar plus half the lap. expect(rows.find((r) => r.name === 'B2')!.length!).toBeCloseTo(7776, 0); }); it('lengths from the documents: C13 11746, C14 3447.5, C15 3852, C16 4070, P3 ≈ C_t + 1.3·l_d, P5 ≈ C_t', () => { expect(rows.find((r) => r.name === 'C13')!.length).toBe(11746); expect(rows.find((r) => r.name === 'C14')!.length).toBe(3447.5); expect(rows.find((r) => r.name === 'C15')!.length).toBe(3852); expect(rows.find((r) => r.name === 'C16')!.length).toBe(4070); expect(rows.find((r) => r.name === 'P5')!.length).toBeCloseTo(5657.7, 0); expect(rows.find((r) => r.name === 'P3')!.length!).toBeCloseTo(5657.7 + 1146.6, 0); }); });