59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { haversineKm, legKm, summarize } from '../../server/utils/transitous'
|
|
|
|
const PARIS = { lat: 48.8566, lon: 2.3522 }
|
|
const LYON = { lat: 45.764, lon: 4.8357 }
|
|
|
|
describe('haversineKm', () => {
|
|
it('mesure Paris-Lyon a environ 392 km a vol d oiseau', () => {
|
|
const km = haversineKm(PARIS, LYON)
|
|
expect(km).toBeGreaterThan(388)
|
|
expect(km).toBeLessThan(396)
|
|
})
|
|
|
|
it('renvoie zero entre un point et lui-meme', () => {
|
|
expect(haversineKm(PARIS, PARIS)).toBe(0)
|
|
})
|
|
})
|
|
|
|
describe('legKm', () => {
|
|
const base = { mode: 'RAIL', startTime: '', endTime: '', from: PARIS, to: LYON }
|
|
|
|
it('utilise la distance fournie quand elle existe', () => {
|
|
expect(legKm({ ...base, distance: 465000 })).toBe(465)
|
|
})
|
|
|
|
it('retombe sur le calcul geometrique quand la distance manque', () => {
|
|
expect(legKm(base)).toBeCloseTo(haversineKm(PARIS, LYON), 5)
|
|
})
|
|
})
|
|
|
|
describe('summarize', () => {
|
|
const leg = (mode: string, distance: number) => ({
|
|
mode,
|
|
distance,
|
|
startTime: '',
|
|
endTime: '',
|
|
from: PARIS,
|
|
to: PARIS,
|
|
})
|
|
|
|
it('applique a chaque troncon son propre facteur d emission', () => {
|
|
// 10 km de metro a 4,1 g + 400 km de TGV a 2,4 g
|
|
const r = summarize({ duration: 7200, transfers: 1, legs: [leg('SUBWAY', 10000), leg('HIGHSPEED_RAIL', 400000)] }, 'train')
|
|
expect(r.co2Grams).toBe(1001)
|
|
expect(r.distanceKm).toBe(410)
|
|
expect(r.durationMin).toBe(120)
|
|
})
|
|
|
|
it('ne compte pas la marche dans les emissions', () => {
|
|
const r = summarize({ duration: 600, transfers: 0, legs: [leg('WALK', 2000)] }, 'bus')
|
|
expect(r.co2Grams).toBe(0)
|
|
})
|
|
|
|
it('prend le facteur le plus penalisant pour un mode inconnu', () => {
|
|
// Mieux vaut surestimer que de laisser croire a un trajet propre.
|
|
const r = summarize({ duration: 600, transfers: 0, legs: [leg('TELEPORTATION', 10000)] }, 'bus')
|
|
expect(r.co2Grams).toBe(1130)
|
|
})
|
|
})
|