From e54e2b313a37c2d2af4e3e537ad4e64e8c816e86 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Tue, 25 Aug 2026 11:34:27 +0200 Subject: Remove per-index ride accessors now dead after the component migration The DistanceM, ElevationM, Coord, Timestamp and optional metric index accessors (HeartRateBpm, CadenceRpm, PowerW) are no longer used by any production code now that algorithms and consumers read ride components. Tests that asserted metric parsing and coordinates now read the component slices (Distances, Coords, HeartRates, Cadences, Powers). --- official_climb/official_climb_test.go | 10 +++++----- ride/parser_test.go | 36 +++++++++++++++++------------------ ride/ride.go | 27 -------------------------- strava/sync_test.go | 14 ++++++++------ web/server_test.go | 8 ++++---- 5 files changed, 35 insertions(+), 60 deletions(-) diff --git a/official_climb/official_climb_test.go b/official_climb/official_climb_test.go index 266581e..bd59efc 100644 --- a/official_climb/official_climb_test.go +++ b/official_climb/official_climb_test.go @@ -65,8 +65,8 @@ func TestMatchClimbMatchesWithoutDetectedClimb(t *testing.T) { ) official := official_climb.OfficialClimb{ Name: "On route", - StartCoord: parsed.Coord(1), - EndCoord: parsed.Coord(2), + StartCoord: parsed.Coords()[1], + EndCoord: parsed.Coords()[2], } matched, found := official_climb.MatchClimb(parsed.Coords(), official, official_climb.DefaultMatchRadiusM) require.True(t, found) @@ -111,8 +111,8 @@ func TestMatchClimbRejectsReversedEndpoints(t *testing.T) { ) official := official_climb.OfficialClimb{ Name: "Reversed", - StartCoord: parsed.Coord(2), - EndCoord: parsed.Coord(1), + StartCoord: parsed.Coords()[2], + EndCoord: parsed.Coords()[1], } _, found := official_climb.MatchClimb(parsed.Coords(), official, official_climb.DefaultMatchRadiusM) assert.False(t, found) @@ -133,7 +133,7 @@ func TestMatchClimbRejectsEndpointOutsideRadius(t *testing.T) { official := official_climb.OfficialClimb{ Name: "Too far", StartCoord: geodist.Coord{Lat: 43.09, Lon: 5.09}, - EndCoord: parsed.Coord(2), + EndCoord: parsed.Coords()[2], } _, found := official_climb.MatchClimb(parsed.Coords(), official, 10) assert.False(t, found) diff --git a/ride/parser_test.go b/ride/parser_test.go index c2d6719..d8ac4d6 100644 --- a/ride/parser_test.go +++ b/ride/parser_test.go @@ -24,7 +24,7 @@ func TestGPXRideParserSkipsStationaryPoints(t *testing.T) { parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data)) require.NoError(t, err) assert.Equal(t, 2, parsed.Len()) - assert.Greater(t, parsed.DistanceM(1), 0.0) + assert.Greater(t, parsed.Distances()[1], 0.0) } func TestGPXRideParserRejectsStationaryRide(t *testing.T) { @@ -57,15 +57,15 @@ func TestGPXRideParserReadsGarminMetrics(t *testing.T) { require.NoError(t, err) assert.Equal(t, 2, parsed.Len()) - heartRate, found := parsed.HeartRateBpm(1) - require.True(t, found) - assert.Equal(t, 92.0, heartRate) - cadence, found := parsed.CadenceRpm(1) - require.True(t, found) - assert.Equal(t, 72.0, cadence) - power, found := parsed.PowerW(1) - require.True(t, found) - assert.Equal(t, 202.0, power) + heartRates, ok := parsed.HeartRates() + require.True(t, ok) + assert.Equal(t, 92.0, heartRates[1]) + cadences, ok := parsed.Cadences() + require.True(t, ok) + assert.Equal(t, 72.0, cadences[1]) + powers, ok := parsed.Powers() + require.True(t, ok) + assert.Equal(t, 202.0, powers[1]) } func TestGPXRideParserDropsIncompleteMetricColumn(t *testing.T) { @@ -77,12 +77,12 @@ func TestGPXRideParserDropsIncompleteMetricColumn(t *testing.T) { parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data)) require.NoError(t, err) - _, found := parsed.CadenceRpm(0) - assert.False(t, found) - heartRate, found := parsed.HeartRateBpm(1) - require.True(t, found) - assert.Equal(t, 92.0, heartRate) - power, found := parsed.PowerW(1) - require.True(t, found) - assert.Equal(t, 0.0, power) + _, ok := parsed.Cadences() + assert.False(t, ok) + heartRates, ok := parsed.HeartRates() + require.True(t, ok) + assert.Equal(t, 92.0, heartRates[1]) + powers, ok := parsed.Powers() + require.True(t, ok) + assert.Equal(t, 0.0, powers[1]) } diff --git a/ride/ride.go b/ride/ride.go index a694df9..1de8b07 100644 --- a/ride/ride.go +++ b/ride/ride.go @@ -59,26 +59,6 @@ func (r Ride) Cadences() ([]float64, bool) { return optionalComponent(r.cadences func (r Ride) HeartRates() ([]float64, bool) { return optionalComponent(r.heartRates) } -func (r Ride) DistanceM(i int) float64 { return r.distances[i] } - -func (r Ride) ElevationM(i int) float64 { return r.elevations[i] } - -func (r Ride) Coord(i int) geodist.Coord { return r.coords[i] } - -func (r Ride) Timestamp(i int) time.Time { return r.timestamps[i] } - -func (r Ride) HeartRateBpm(i int) (float64, bool) { - return optionalMetric(r.heartRates, i) -} - -func (r Ride) CadenceRpm(i int) (float64, bool) { - return optionalMetric(r.cadences, i) -} - -func (r Ride) PowerW(i int) (float64, bool) { - return optionalMetric(r.powers, i) -} - func optionalComponent(column []float64) ([]float64, bool) { if len(column) == 0 { return nil, false @@ -86,13 +66,6 @@ func optionalComponent(column []float64) ([]float64, bool) { return column, true } -func optionalMetric(column []float64, i int) (float64, bool) { - if len(column) == 0 { - return 0, false - } - return column[i], true -} - type RideParser interface { Parse(reader io.Reader) (Ride, error) } diff --git a/strava/sync_test.go b/strava/sync_test.go index 9223c95..abc3d0e 100644 --- a/strava/sync_test.go +++ b/strava/sync_test.go @@ -103,13 +103,15 @@ func TestGet(t *testing.T) { parsedRide, err := (ride.GPXRideParser{}).Parse(bytes.NewReader(gpxData)) require.NoError(t, err) assert.Equal(t, 2, parsedRide.Len()) - heartRateValue, found := parsedRide.HeartRateBpm(1) - require.True(t, found) + heartRates, ok := parsedRide.HeartRates() + require.True(t, ok) + heartRateValue := heartRates[1] assert.Equal(t, 91.0, heartRateValue) - _, found = parsedRide.CadenceRpm(0) - assert.False(t, found) - powerValue, found := parsedRide.PowerW(1) - require.True(t, found) + _, ok = parsedRide.Cadences() + assert.False(t, ok) + powers, ok := parsedRide.Powers() + require.True(t, ok) + powerValue := powers[1] assert.Equal(t, 0.0, powerValue) } diff --git a/web/server_test.go b/web/server_test.go index b3f6028..9ee578e 100644 --- a/web/server_test.go +++ b/web/server_test.go @@ -234,8 +234,8 @@ func TestBuildRideProfileIncludesOfficialClimbMatch(t *testing.T) { profile := buildRideProfile(parsed, nil, []official_climb.OfficialClimb{{ ID: 42, Name: "Col de Test", - StartCoord: parsed.Coord(0), - EndCoord: parsed.Coord(1), + StartCoord: parsed.Coords()[0], + EndCoord: parsed.Coords()[1], }}, official_climb.DefaultMatchPolicy()) require.Len(t, profile.Climbs, 1) @@ -256,8 +256,8 @@ func TestBuildRideProfileUsesOfficialClimbBoundaries(t *testing.T) { profile := buildRideProfile(parsed, nil, []official_climb.OfficialClimb{{ ID: 42, Name: "Col de Test", - StartCoord: parsed.Coord(0), - EndCoord: parsed.Coord(2), + StartCoord: parsed.Coords()[0], + EndCoord: parsed.Coords()[2], }}, official_climb.DefaultMatchPolicy()) require.Len(t, profile.Climbs, 1) -- cgit v1.3