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
}