diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-16 14:23:32 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-16 14:23:32 +0200 |
| commit | 53ab332e6d2afe9818914e0026310e4cadcc4202 (patch) | |
| tree | 198d708fa05d4247bdcc0cf2900fdf551d61b7d6 /web/frontend/official-climb-profile-logic.test.ts | |
| parent | 2d18d177f48285eb123e7da8680fc00e7a6fe19c (diff) | |
refactor(web): migrate browser code to TypeScript
Diffstat (limited to 'web/frontend/official-climb-profile-logic.test.ts')
| -rw-r--r-- | web/frontend/official-climb-profile-logic.test.ts | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/web/frontend/official-climb-profile-logic.test.ts b/web/frontend/official-climb-profile-logic.test.ts new file mode 100644 index 0000000..31391b2 --- /dev/null +++ b/web/frontend/official-climb-profile-logic.test.ts @@ -0,0 +1,37 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { displayStepForLength, profileBandForSlope, officialProfileSections } from "./official-climb-profile-logic.ts"; + +test("selects a display step that keeps long profiles readable", () => { + assert.equal(displayStepForLength(2_400), 100); + assert.equal(displayStepForLength(4_500), 200); + assert.equal(displayStepForLength(7_000), 500); + assert.equal(displayStepForLength(20_000), 1000); +}); + +test("assigns each slope to its color band", () => { + assert.equal(profileBandForSlope(-0.1), "downhill"); + assert.equal(profileBandForSlope(2.9), "0-3"); + assert.equal(profileBandForSlope(3), "3-6"); + assert.equal(profileBandForSlope(6), "6-9"); + assert.equal(profileBandForSlope(9), "9-12"); + assert.equal(profileBandForSlope(12), "12-plus"); +}); + +test("interpolates profile sections at the selected step", () => { + const points = [ + { distanceKm: 0, elevationM: 100 }, + { distanceKm: 0.12, elevationM: 106 }, + { distanceKm: 0.2, elevationM: 114 }, + { distanceKm: 0.25, elevationM: 120 }, + ]; + const sections = officialProfileSections(points, 0, 3, 100); + + assert.equal(sections.length, 3); + assert.equal(sections[0].startDistanceKm, 0); + assert.equal(sections[0].endDistanceKm, 0.1); + assert.equal(sections[0].startElevation, 100); + assert.equal(sections[0].endElevation, 105); + assert.equal(sections[2].endDistanceKm, 0.25); + assert.equal(sections[2].endElevation, 120); +}); |