fix: Rausch-Schwelle auf >= und <=, Tests korrigiert, Fehlertext angepasst
- 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) <noreply@anthropic.com>
This commit is contained in:
parent
f89f163e22
commit
1eb25cd7e4
2 changed files with 23 additions and 7 deletions
|
|
@ -48,15 +48,31 @@ describe('parseGpx', () => {
|
|||
expect(r.ascent_m).toBe(65)
|
||||
})
|
||||
|
||||
it('ignoriert Höhenschwankungen unter 3 m', () => {
|
||||
const noisy = `<?xml version="1.0"?>
|
||||
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 = `<?xml version="1.0"?>
|
||||
<gpx version="1.1" xmlns="http://www.topografix.com/GPX/1/1"><trk><trkseg>
|
||||
<trkpt lat="49.510" lon="11.430"><ele>300</ele></trkpt>
|
||||
<trkpt lat="49.511" lon="11.431"><ele>301</ele></trkpt>
|
||||
<trkpt lat="49.512" lon="11.432"><ele>302</ele></trkpt>
|
||||
<trkpt lat="49.513" lon="11.433"><ele>303</ele></trkpt>
|
||||
</trkseg></trk></gpx>`
|
||||
// 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 = `<?xml version="1.0"?>
|
||||
<gpx version="1.1" xmlns="http://www.topografix.com/GPX/1/1"><trk><trkseg>
|
||||
<trkpt lat="49.510" lon="11.430"><ele>300</ele></trkpt>
|
||||
<trkpt lat="49.511" lon="11.431"><ele>302</ele></trkpt>
|
||||
<trkpt lat="49.512" lon="11.432"><ele>300</ele></trkpt>
|
||||
<trkpt lat="49.513" lon="11.433"><ele>301</ele></trkpt>
|
||||
<trkpt lat="49.514" lon="11.434"><ele>299</ele></trkpt>
|
||||
<trkpt lat="49.515" lon="11.435"><ele>300</ele></trkpt>
|
||||
</trkseg></trk></gpx>`
|
||||
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)
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue