Files
Pier_v1/tests/solplate.test.ts
T

44 lines
1.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 { solplateGeometry } from '../src/core/solplate';
import { loadP1 } from './helpers';
const model = buildPier(loadP1());
const front1 = model.blocks.filter((b) => b.row === '전열')[0];
const params = { A: 700, B: 640, margin: 100, T: 30, slopePct: -1.91 };
describe('솔플레이트 기하 (1단계, 승인 2026-10-23)', () => {
it('L = A + 100 and W = B + 100 along the 교축 and the 교각축 직각', () => {
const g = solplateGeometry(front1, 181, params);
expect(g.L).toBeCloseTo(0.8, 6);
expect(g.W).toBeCloseTo(0.74, 6);
});
it('the thick end T1 is on the 시점 side (−s): T1 ≈ 38, T2 ≈ 22 mm, and T1 + T2 = 2T', () => {
const g = solplateGeometry(front1, 181, params);
expect(g.T1 * 1000).toBeCloseTo(37.64, 1);
expect(g.T2 * 1000).toBeCloseTo(22.36, 1);
expect((g.T1 + g.T2) * 1000).toBeCloseTo(60, 6);
// The top at the 시점 corners is the thick side.
const topAtStart = g.corners.filter((c) => Math.abs(c[1] - (g.bottom + g.T1)) < 1e-9);
expect(topAtStart.length).toBe(2);
});
it('the underside is the bearing top: block top (EL.X) + h3', () => {
const g = solplateGeometry(front1, 181, params);
expect(g.bottom).toBeCloseTo(front1.padTop + 0.181, 6);
});
it('volume = L·W·T (the taper averages to the centre thickness)', () => {
const g = solplateGeometry(front1, 181, params);
expect(g.volume).toBeCloseTo(g.L * g.W * 0.03, 9);
});
it('the solplate is centred on the block and follows the row direction', () => {
const g = solplateGeometry(front1, 181, params);
const c = g.corners.reduce((acc, p) => [acc[0] + p[0] / 8, acc[1] + p[2] / 8] as [number, number], [0, 0]);
expect(c[0]).toBeCloseTo(front1.s, 6);
expect(c[1]).toBeCloseTo(front1.n, 6);
});
});