diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-01 22:52:22 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-01 22:52:22 +0200 |
| commit | b7ef44b22e23126a494614f93e07b248fd6a8f12 (patch) | |
| tree | 145a5a3c73667c3d46c51a420cde0922fdb9d7ed /ride/difficulty_test.go | |
| parent | 80f2e72cd4818a4c0a5b5d4afb93dc23f04208e2 (diff) | |
feat: Add Cotacol difficulty score for rides
Diffstat (limited to 'ride/difficulty_test.go')
| -rw-r--r-- | ride/difficulty_test.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/ride/difficulty_test.go b/ride/difficulty_test.go new file mode 100644 index 0000000..7e652cc --- /dev/null +++ b/ride/difficulty_test.go @@ -0,0 +1,42 @@ +package ride_test + +import ( + "testing" + + "github.com/martinlehoux/biking_home/ride" + "github.com/stretchr/testify/assert" +) + +func TestDifficultyScoreConstantClimb(t *testing.T) { + r := RideBuilder{precision: 100}.WithSection("2km at 7%").Build() + assert.InDelta(t, 98.0, r.DifficultyScore(), 1e-9) +} + +func TestDifficultyScoreIgnoresDescent(t *testing.T) { + r := RideBuilder{precision: 100}.WithSection("2km at 7%").WithSection("2km at -7%").Build() + assert.InDelta(t, 98.0, r.DifficultyScore(), 1e-9) +} + +func TestDifficultyScoreFlatIsZero(t *testing.T) { + r := RideBuilder{precision: 100}.WithSection("5km at 0%").Build() + assert.Zero(t, r.DifficultyScore()) +} + +func TestDifficultyScoreSteepShortCountsMore(t *testing.T) { + steep := RideBuilder{precision: 100}.WithSection("0.5km at 14%").Build() + long := RideBuilder{precision: 100}.WithSection("1km at 7%").Build() + assert.InDelta(t, 98.0, steep.DifficultyScore(), 1e-9) + assert.InDelta(t, 49.0, long.DifficultyScore(), 1e-9) +} + +func TestDifficultyScorePrecisionInvariant(t *testing.T) { + coarse := RideBuilder{precision: 100}.WithSection("3km at 5%").Build() + fine := RideBuilder{precision: 50}.WithSection("3km at 5%").Build() + assert.InDelta(t, coarse.DifficultyScore(), fine.DifficultyScore(), 1e-9) +} + +func TestDifficultyScoreExampleRide(t *testing.T) { + r, err := ride.ParseFile(parser, "../examples/2022-07-21.Pogacar.gpx") + assert.NoError(t, err) + assert.InDelta(t, 3049.0, r.DifficultyScore(), 1) +} |