summaryrefslogtreecommitdiff
path: root/ride/difficulty_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'ride/difficulty_test.go')
-rw-r--r--ride/difficulty_test.go42
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)
+}