41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
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)
|
|
})
|
|
})
|