lecheminvert.tech/test/unit/midpoint.spec.ts
Adam Belkacemi cf6ee64e31
Some checks are pending
CI / tests (push) Waiting to run
CI / deploiement (push) Blocked by required conditions
Import initial : code en production sur Hetzner
2026-09-07 18:21:38 +00:00

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)
})
})