From db4d2b40895db41ce188549f49a6f277ba95c890 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Sun, 6 Sep 2026 16:40:17 +0200 Subject: Split cli.go into per-domain command files Move each CLI command into its owning package (mountain_pass, ride, web) with dispatch and usage in main.go; remove the cli package. --- cli/cli_test.go | 55 ------------------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 cli/cli_test.go (limited to 'cli/cli_test.go') diff --git a/cli/cli_test.go b/cli/cli_test.go deleted file mode 100644 index e12ff7a..0000000 --- a/cli/cli_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package cli - -import ( - "testing" - - "github.com/martinlehoux/biking_home/ride" - "github.com/stretchr/testify/assert" -) - -func TestBacktestEligibilityExcludesShortDistances(t *testing.T) { - short := ride.StoredRide{FitPath: "ride.fit", DistanceM: 10_000 - 1, ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeTraining} - minimum := ride.StoredRide{FitPath: "ride.fit", DistanceM: 10_000, ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeTraining} - - assert.True(t, isBacktestEligible(short)) - assert.True(t, isBacktestEligible(minimum)) -} - -func TestBacktestEligibilityExcludesLowMovingRatio(t *testing.T) { - low := ride.StoredRide{FitPath: "ride.fit", DistanceM: 10_000, ExternalMovingTimeS: 7_999, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeTraining} - boundary := ride.StoredRide{FitPath: "ride.fit", DistanceM: 10_000, ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeTraining} - noElapsed := ride.StoredRide{FitPath: "ride.fit", DistanceM: 10_000, ExternalMovingTimeS: 1, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeTraining} - - assert.True(t, isBacktestEligible(low)) - assert.True(t, isBacktestEligible(boundary)) - assert.False(t, isBacktestEligible(noElapsed)) -} - -func TestBacktestEligibilityExcludesUncategorisedAndIndoorTransport(t *testing.T) { - base := ride.StoredRide{FitPath: "ride.fit", ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeTraining} - uncategorised := ride.StoredRide{FitPath: "ride.fit", ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000} - indoor := ride.StoredRide{FitPath: "ride.fit", ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeIndoor} - transport := ride.StoredRide{FitPath: "ride.fit", ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeRoad, RideType: ride.RideTypeTransport} - race := ride.StoredRide{FitPath: "ride.fit", ExternalMovingTimeS: 8_000, ElapsedTimeS: 10_000, BikeType: ride.BikeTypeMTB, RideType: ride.RideTypeRace} - - assert.True(t, isBacktestEligible(base)) - assert.False(t, isBacktestEligible(uncategorised)) - assert.False(t, isBacktestEligible(indoor)) - assert.False(t, isBacktestEligible(transport)) - assert.True(t, isBacktestEligible(race)) -} - -func TestBacktestStatsUseUnroundedSamples(t *testing.T) { - absErrors := []float64{0, 0.1, 0.1} - - assert.InDelta(t, 1.0/15, meanAbsErr(absErrors), 1e-12) - assert.InDelta(t, 1.0/30, stdErrAbsErr(absErrors), 1e-12) -} - -func TestErrorDistributionUsesNearestRank(t *testing.T) { - distribution := errorDistribution([]float64{1, 2, 3, 4}, []float64{50, 75, 99}) - - assert.Equal(t, 2.0, distribution[50]) - assert.Equal(t, 3.0, distribution[75]) - assert.Equal(t, 4.0, distribution[99]) -} -- cgit v1.3