openpencil/tests/engine/vector/bounds.test.ts
2026-05-17 14:09:52 +03:00

53 lines
1.5 KiB
TypeScript

import { describe, test, expect } from 'bun:test'
import { computeAccurateBounds } from '@open-pencil/core'
describe('computeAccurateBounds', () => {
test('empty network', () => {
expect(computeAccurateBounds({ vertices: [], segments: [], regions: [] })).toEqual({
x: 0,
y: 0,
width: 0,
height: 0
})
})
test('single vertex', () => {
const bounds = computeAccurateBounds({
vertices: [{ x: 50, y: 30, handleMirroring: 'NONE' }],
segments: [],
regions: []
})
expect(bounds.x).toBe(50)
expect(bounds.y).toBe(30)
expect(bounds.width).toBe(0)
expect(bounds.height).toBe(0)
})
test('two vertices', () => {
const bounds = computeAccurateBounds({
vertices: [
{ x: 0, y: 0, handleMirroring: 'NONE' },
{ x: 100, y: 50, handleMirroring: 'NONE' }
],
segments: [{ start: 0, end: 1, tangentStart: { x: 0, y: 0 }, tangentEnd: { x: 0, y: 0 } }],
regions: []
})
expect(bounds).toEqual({ x: 0, y: 0, width: 100, height: 50 })
})
test('bezier curve extrema extend bounds', () => {
const bounds = computeAccurateBounds({
vertices: [
{ x: 0, y: 0, handleMirroring: 'NONE' },
{ x: 100, y: 0, handleMirroring: 'NONE' }
],
segments: [{ start: 0, end: 1, tangentStart: { x: 0, y: -50 }, tangentEnd: { x: 0, y: 50 } }],
regions: []
})
// Curve extrema at t=(3±√3)/6, not at control points
expect(bounds.y).toBeCloseTo(-14.4338, 3)
expect(bounds.height).toBeCloseTo(28.8675, 3)
})
})