From 1eb25cd7e42d340a23c007550b54f03aaab6c8f8 Mon Sep 17 00:00:00 2001 From: Daniel Michelberger Date: Thu, 6 Aug 2026 17:34:16 +0200 Subject: [PATCH] fix: Rausch-Schwelle auf >= und <=, Tests korrigiert, Fehlertext angepasst MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Operator auf >= und <= geändert (kumulativ zählen) - Test "ignoriert Höhenschwankungen" ersetzt durch zwei separate Tests: * "erfasst einen gleichmäßigen Anstieg auch in feinen Schritten" (300→303 in 1m Schritten = 3m) * "ignoriert Rauschen, das um denselben Wert schwankt" (auf/ab ohne Gewinn = 0m) - Fehlertext auf Brief-Fassung: "Die Datei ist kein gültiges XML." - Test-Regex angepasst zum neuen Fehlertext Co-Authored-By: Claude Opus 5 (1M context) --- frontend/src/lib/gpx.test.ts | 24 ++++++++++++++++++++---- frontend/src/lib/gpx.ts | 6 +++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/frontend/src/lib/gpx.test.ts b/frontend/src/lib/gpx.test.ts index 4b69c66..5394bee 100644 --- a/frontend/src/lib/gpx.test.ts +++ b/frontend/src/lib/gpx.test.ts @@ -48,15 +48,31 @@ describe('parseGpx', () => { expect(r.ascent_m).toBe(65) }) - it('ignoriert Höhenschwankungen unter 3 m', () => { - const noisy = ` + it('erfasst einen gleichmäßigen Anstieg auch in feinen Schritten', () => { + // 300 -> 303 in 1-m-Schritten ist kein Rauschen, sondern ein + // echter Anstieg von 3 m — nur fein aufgezeichnet. + const fine = ` 300 301 302 303 ` - // Lauter 1-m-Schritte: reines GPS-Rauschen, kein echter Anstieg + expect(parseGpx(fine).ascent_m).toBe(3) + }) + + it('ignoriert Rauschen, das um denselben Wert schwankt', () => { + // Auf und ab um maximal 2 m ohne echten Höhengewinn — genau das, + // wogegen die Schwelle schützt. + const noisy = ` + + 300 + 302 + 300 + 301 + 299 + 300 +` expect(parseGpx(noisy).ascent_m).toBe(0) }) @@ -120,7 +136,7 @@ describe('parseGpx', () => { }) it('wirft bei ungültigem XML', () => { - expect(() => parseGpx('kein xml')).toThrow(/ung(ü|ue)ltig/i) + expect(() => parseGpx('kein xml')).toThrow(/kein g(ü|ue)ltiges XML/i) }) }) diff --git a/frontend/src/lib/gpx.ts b/frontend/src/lib/gpx.ts index d6bb9ae..6d4854b 100644 --- a/frontend/src/lib/gpx.ts +++ b/frontend/src/lib/gpx.ts @@ -115,7 +115,7 @@ export function parseGpx(xml: string): ParsedGpx { const doc = new DOMParser().parseFromString(xml, 'application/xml') if (doc.querySelector('parsererror')) { - throw new Error('Die GPX-Datei ist ungültig.') + throw new Error('Die Datei ist kein gültiges XML.') } // Manche Programme exportieren Routen (rtept) statt Tracks (trkpt). @@ -171,10 +171,10 @@ export function parseGpx(xml: string): ParsedGpx { lastCountedEle = ele } else { const delta = ele - lastCountedEle - if (delta > ELE_NOISE_M) { + if (delta >= ELE_NOISE_M) { ascent += delta lastCountedEle = ele - } else if (delta < -ELE_NOISE_M) { + } else if (delta <= -ELE_NOISE_M) { // Abstieg über Schwelle: neuer Bezugspunkt, aber nicht gezählt lastCountedEle = ele }