import { describe, expect, it } from 'vitest' import { midpointAt } from '../../shared/polyline' import type { Coord } from '../../shared/types' describe('midpointAt', () => { it('renvoie le point unique quand un seul est fourni', () => { expect(midpointAt([[1, 2]], 0.5)).toEqual([1, 2]) }) it('renvoie le milieu geometrique sur une ligne droite reguliere', () => { const coords: Coord[] = [[0, 0], [10, 0]] expect(midpointAt(coords, 0.5)).toEqual([5, 0]) }) it('renvoie le vrai milieu de distance sur un trace inegal', () => { // Trajet : 0 -> 10 (long), puis 10 -> 11 (court) // Distance totale = 11, milieu a 5.5, donc sur le premier segment const coords: Coord[] = [[0, 0], [10, 0], [11, 0]] const mid = midpointAt(coords, 0.5) expect(mid[0]).toBeCloseTo(5.5, 5) expect(mid[1]).toBeCloseTo(0, 5) }) it('renvoie le point de debut avec ratio 0', () => { const coords: Coord[] = [[0, 0], [10, 0], [20, 5]] expect(midpointAt(coords, 0)).toEqual([0, 0]) }) it('renvoie le point de fin avec ratio 1', () => { const coords: Coord[] = [[0, 0], [10, 0], [20, 5]] expect(midpointAt(coords, 1)).toEqual([20, 5]) }) it('gere un trace en forme de coude', () => { // 0,0 -> 10,0 -> 10,10 : total = 20, milieu = 10 = fin du premier segment const coords: Coord[] = [[0, 0], [10, 0], [10, 10]] const mid = midpointAt(coords, 0.5) expect(mid[0]).toBeCloseTo(10, 5) expect(mid[1]).toBeCloseTo(0, 5) }) })