diff options
| -rw-r--r-- | cli/cli.go | 6 | ||||
| -rw-r--r-- | cli/cli_test.go | 6 | ||||
| -rw-r--r-- | ride/moving_time.go | 4 |
3 files changed, 8 insertions, 8 deletions
@@ -32,7 +32,7 @@ var ( backtest = flag.Bool("backtest", false, "run data benchmarks comparing computed values against stored reference values") ) -const backtestMinimumElapsedTimeS = 15 * 60 +const backtestMinimumDistanceM = 10_000 func Run(db *sql.DB, configPath string, appConfig config.Config) { switch { @@ -134,12 +134,12 @@ func runBacktest(db *sql.DB) error { fmt.Fprintf(table, "p%g\t%.1f\n", p, distribution[p]) } table.Flush() - slog.Info("Moving time backtest", "rides", len(samples), "min_elapsed_s", backtestMinimumElapsedTimeS, "mean_err_pct", math.Round(meanAbsErr(absErrors)*10)/10, "stderr_pct", math.Round(stdErrAbsErr(absErrors)*10)/10) + slog.Info("Moving time backtest", "rides", len(samples), "min_distance_m", backtestMinimumDistanceM, "mean_err_pct", math.Round(meanAbsErr(absErrors)*10)/10, "stderr_pct", math.Round(stdErrAbsErr(absErrors)*10)/10) return nil } func isBacktestEligible(item rides.Ride) bool { - return item.GPXPath != "" && item.ElapsedTimeS >= backtestMinimumElapsedTimeS && item.MovingTimeS > 0 + return item.GPXPath != "" && item.DistanceM >= backtestMinimumDistanceM && item.MovingTimeS > 0 } func meanAbsErr(absErrors []float64) float64 { diff --git a/cli/cli_test.go b/cli/cli_test.go index ae59c6c..6a3e148 100644 --- a/cli/cli_test.go +++ b/cli/cli_test.go @@ -7,9 +7,9 @@ import ( "github.com/stretchr/testify/assert" ) -func TestBacktestEligibilityExcludesShortRides(t *testing.T) { - short := rides.Ride{GPXPath: "ride.gpx", ElapsedTimeS: 15*60 - 1, MovingTimeS: 1} - minimum := rides.Ride{GPXPath: "ride.gpx", ElapsedTimeS: 15 * 60, MovingTimeS: 1} +func TestBacktestEligibilityExcludesShortDistances(t *testing.T) { + short := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000 - 1, MovingTimeS: 1} + minimum := rides.Ride{GPXPath: "ride.gpx", DistanceM: 10_000, MovingTimeS: 1} assert.False(t, isBacktestEligible(short)) assert.True(t, isBacktestEligible(minimum)) diff --git a/ride/moving_time.go b/ride/moving_time.go index 9ac6c05..7d7f5fe 100644 --- a/ride/moving_time.go +++ b/ride/moving_time.go @@ -16,8 +16,8 @@ const movingTimeMinPowerW = 20 // that can count as moving. Longer gaps are pauses (stops, lost signal). const movingTimeMaxGap = 120 * time.Second -// Bench (237 rides, `-backtest`, elapsed time >= 15 minutes): -// absMean 2.4%, stderr 0.3, p50 0.6, p75 2.9, p90 7.1, p95 10.7, p99 19.9. +// Bench (117 rides, `-backtest`, distance >= 10 km): +// absMean 0.6%, stderr 0.2, p50 0.2, p75 0.4, p90 1.2, p95 2.2, p99 4.8. func MovingTime(r Ride) time.Duration { return movingTime(r, movingTimeMinSpeedMps, movingTimeMaxGap) } |
