feat(core): lengths for coping, column and the B2 split (추천안)
- Coping: C9/C10 lower U = 1740 + 2h with h linear along the slope and 2300 on the Level (3522 / 6098 / 6249 / 6340 from the document); C12 (3717–10183), C13 11746, C14 3447.5, C15 3852, C16 4070. - Column: P3 = C_t + 1.3·l_d(H19) lap (추천안 for Q-C6, lap 1146.6), P5 = C_t. - Footing: B2 13646 is split into two pieces at a splice with 1.3·l_d(S25, SD500) (추천안 for Q-B6), piece ≈ 7776 each. - Not done: C9/C11 cap (삿갓) lengths (Q-K5 open), P1/P2 per-line pieces. - Tests against the document values; P1 summary updated. - Not verified in a browser. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
73bff19aba
commit
5641bbe265
6 files changed
+105
-24
No files matched your search
@@ -0,0 +1,24 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { shearULength, shearUHeight } from '../src/core/rebar/coping';
|
||||
|
||||
// Coping 12000 (코핑철근.md §4.3 · §12): lower U = 1740 + 2h.
|
||||
const L = 12000;
|
||||
|
||||
describe('C9·C10 하부 U 길이 (코핑철근.md §4.3)', () => {
|
||||
it('C9 first (x 300) 3522, C9 last (x 4550) 6098, C10 outer (x 4800) 6249, Level (x 6000) 6340', () => {
|
||||
expect(shearULength(300, L)).toBeCloseTo(3522, 0);
|
||||
expect(shearULength(4550, L)).toBeCloseTo(6098, 0);
|
||||
expect(shearULength(4800, L)).toBeCloseTo(6249, 0);
|
||||
expect(shearULength(6000, L)).toBeCloseTo(6340, 0);
|
||||
});
|
||||
|
||||
it('heights h: 890.9 at the end, 2178.8 at the last C9, 2300 on the Level', () => {
|
||||
expect(shearUHeight(300, L)).toBeCloseTo(890.9, 1);
|
||||
expect(shearUHeight(4550, L)).toBeCloseTo(2178.8, 1);
|
||||
expect(shearUHeight(6000, L)).toBe(2300);
|
||||
});
|
||||
|
||||
it('mirrors on the right half', () => {
|
||||
expect(shearULength(11700, L)).toBeCloseTo(3522, 0);
|
||||
});
|
||||
});
|
||||
@@ -46,6 +46,16 @@ describe('③ 철근표 요약 (P1)', () => {
|
||||
it('B9: 320 bars; warnings: B2 needs a splice (13646 > 12000)', () => {
|
||||
expect(count('B9')).toBe(320);
|
||||
expect(warnings.map((w) => w.code)).toEqual(['RB-F08']);
|
||||
expect(rows.find((r) => r.name === 'B2')!.length!).toBeGreaterThan(12000);
|
||||
// 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);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user