From 9da52d7355f5a77f0adc9a658619b3bfef03ba3c Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Fri, 21 Aug 2026 06:56:12 +0200 Subject: feat(ride): persist canonical moving time, preserve Strava reference --- cli/cli.go | 6 +++--- cli/cli_test.go | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'cli') diff --git a/cli/cli.go b/cli/cli.go index bf67638..3a04b8b 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -101,7 +101,7 @@ func runBacktest(db *sql.DB) error { slog.Warn("Failed to parse ride GPX", "ride", item.ExternalID, "file", item.GPXPath, "error", err) continue } - reference := time.Duration(item.MovingTimeS) * time.Second + reference := time.Duration(item.ExternalMovingTimeS) * time.Second computed := ride.MovingTime(parsed) samples = append(samples, backtestSample{ externalID: item.ExternalID, @@ -148,9 +148,9 @@ func runBacktest(db *sql.DB) error { func isBacktestEligible(item rides.Ride) bool { return item.GPXPath != "" && item.DistanceM >= backtestMinimumDistanceM && - item.MovingTimeS > 0 && + item.ExternalMovingTimeS > 0 && item.ElapsedTimeS > 0 && - float64(item.MovingTimeS)/float64(item.ElapsedTimeS) >= backtestMinimumMovingRatio + float64(item.ExternalMovingTimeS)/float64(item.ElapsedTimeS) >= backtestMinimumMovingRatio } func meanAbsErr(absErrors []float64) float64 { diff --git a/cli/cli_test.go b/cli/cli_test.go index 59dec79..7964387 100644 --- a/cli/cli_test.go +++ b/cli/cli_test.go @@ -8,17 +8,17 @@ import ( ) func TestBacktestEligibilityExcludesShortDistances(t *testing.T) { - short := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000 - 1, MovingTimeS: 8_000, ElapsedTimeS: 10_000} - minimum := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, MovingTimeS: 8_000, ElapsedTimeS: 10_000} + short := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000 - 1, ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000} + minimum := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000} assert.False(t, isBacktestEligible(short)) assert.True(t, isBacktestEligible(minimum)) } func TestBacktestEligibilityExcludesLowMovingRatio(t *testing.T) { - low := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, MovingTimeS: 7_999, ElapsedTimeS: 10_000} - boundary := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, MovingTimeS: 8_000, ElapsedTimeS: 10_000} - noElapsed := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, MovingTimeS: 1} + low := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, ExternalMovingTimeS: 7_999, ElapsedTimeS: 10_000} + boundary := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000} + noElapsed := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, ExternalMovingTimeS: 1} assert.False(t, isBacktestEligible(low)) assert.True(t, isBacktestEligible(boundary)) -- cgit v1.3