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 }