Files
Pier_v1/tests/bearing-ref.test.ts
T
ypshimandClaude Haiku 5.5 553c696638 feat(view): bearing 공통 규칙 inputs (mortar h2, bearing h3, solplate T, margin) and recalculated E, L, W, T1, T2
On the bearing card, four inputs drive E = h1 + h2 + h3 + h4, L = A + margin, W = B + margin and T1/T2 = T ± L·|S|/2. The
defaults are the drawing values, so every row gives back the drawing values; changed rows are marked. The values are screen
state for now and do not change the model or the project file (Q16 stays open).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:12:36 +09:00

67 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { describe, expect, it } from 'vitest';
import { buildPier } from '../src/core/geometry';
import { BEARING_ELEVATION_REF, SOLPLATE_REF, SOLPLATE_T_RULE, solplateTs } from '../src/core/bearing-ref';
import { loadP1 } from './helpers';
describe('교량받침 reference (도면값, 읽기 전용, 1단계)', () => {
it('E = h1 + h2 + h3 + h4 on every row', () => {
for (const r of BEARING_ELEVATION_REF) expect(r.h1 + r.h2 + r.h3 + r.h4, `No ${r.no}`).toBe(r.E);
});
it('solplate L = A + 100 and W = B + 100 against the elevation row', () => {
BEARING_ELEVATION_REF.forEach((e, i) => {
expect(SOLPLATE_REF[i].L, `No ${e.no}`).toBe(e.A + 100);
expect(SOLPLATE_REF[i].W, `No ${e.no}`).toBe(e.B + 100);
});
});
it('T1 and T2 follow T ± L·|S|/2 on every row (the 검산 column)', () => {
for (const r of SOLPLATE_REF) {
const c = solplateTs(SOLPLATE_T_RULE, r.L, r.s);
expect(c.T1, `No ${r.no}`).toBe(r.T1);
expect(c.T2, `No ${r.no}`).toBe(r.T2);
}
});
it('the solplate tapers along the axis: T1 (−측) + T2 (+측) = 2·T, with T = 30 at the centre', () => {
for (const r of SOLPLATE_REF) {
expect(r.T, `No ${r.no}`).toBe(SOLPLATE_T_RULE);
expect(r.T1 + r.T2, `No ${r.no}`).toBe(2 * r.T);
expect(r.T1, `No ${r.no}`).toBeGreaterThan(r.T2);
}
});
it('the drawing EL.X − E sits a constant 0.211 m below the model coping top on all ten bearings (Q16 diagnostic)', () => {
const m = buildPier(loadP1());
const back = m.blocks.filter((b) => b.row === '후열');
const diffs = BEARING_ELEVATION_REF.map((r) => {
const modelTop = r.row === '전열' ? m.segments[r.no - 1].top : back[r.no - 6].bottom;
return modelTop - (r.elx - r.E / 1000);
});
for (const d of diffs) expect(d).toBeCloseTo(0.211, 2);
});
});
import { applyBearingRules, BEARING_RULES_DEFAULT } from '../src/core/bearing-ref';
describe('교량받침 공통 규칙 (2단계)', () => {
it('with the drawing values, the rules give back the drawing E, L, W, T1, T2 on every bearing', () => {
BEARING_ELEVATION_REF.forEach((r, i) => {
const v = applyBearingRules(r, BEARING_RULES_DEFAULT);
expect(v.E, `No ${r.no}`).toBe(r.E);
expect(v.L, `No ${r.no}`).toBe(SOLPLATE_REF[i].L);
expect(v.W, `No ${r.no}`).toBe(SOLPLATE_REF[i].W);
expect(v.T1, `No ${r.no}`).toBe(SOLPLATE_REF[i].T1);
expect(v.T2, `No ${r.no}`).toBe(SOLPLATE_REF[i].T2);
});
});
it('a 10 mm larger mortar h2 raises E by 10 and leaves L, W and T1, T2 unchanged', () => {
const r = BEARING_ELEVATION_REF[0];
const v = applyBearingRules(r, { ...BEARING_RULES_DEFAULT, h2: BEARING_RULES_DEFAULT.h2 + 10 });
expect(v.E).toBe(r.E + 10);
expect(v.L).toBe(r.A + 100);
expect(v.T1).toBe(SOLPLATE_REF[0].T1);
});
});