import { describe, expect, it } from 'vitest'; import { minGreenTime, redYellowTime, signalGroupTimes, yellowTime, } from '@/domain/rilsa/signalTimes'; describe('Signalzeiten', () => { it('staffelt die Gelbzeit nach der zulaessigen Hoechstgeschwindigkeit', () => { expect(yellowTime('kfz', 30)).toBe(3); expect(yellowTime('kfz', 50)).toBe(3); expect(yellowTime('kfz', 51)).toBe(4); expect(yellowTime('kfz', 60)).toBe(4); expect(yellowTime('kfz', 61)).toBe(5); expect(yellowTime('kfz', 70)).toBe(5); }); it('gibt Fussgaengern keine Gelbzeit', () => { // Der Altbestand lieferte hier 3 s, weil der Fussgaenger-Fall in den // Sammelzweig des Radverkehrs fiel. expect(yellowTime('fuss', 50)).toBe(0); expect(redYellowTime('fuss')).toBe(0); }); it('setzt die Rot-Gelb-Zeit auf 1 s', () => { // Der Altbestand verwendete 2 s. expect(redYellowTime('kfz')).toBe(1); expect(redYellowTime('rad')).toBe(1); }); it('setzt bei fehlender Geschwindigkeitsangabe die laengste Gelbzeit an', () => { expect(yellowTime('kfz', Number.NaN)).toBe(5); expect(yellowTime('kfz', 0)).toBe(5); }); it('liefert die Mindestfreigabezeiten je Verkehrsart', () => { expect(minGreenTime('kfz')).toBe(5); expect(minGreenTime('rad')).toBe(5); expect(minGreenTime('fuss')).toBe(5); }); it('fasst alle Signalzeiten zusammen', () => { expect(signalGroupTimes('kfz', 50)).toEqual({ minGreen: 5, yellow: 3, redYellow: 1 }); expect(signalGroupTimes('fuss', 50)).toEqual({ minGreen: 5, yellow: 0, redYellow: 0 }); }); });