aboutsummaryrefslogtreecommitdiffziptar.gz
path: root/viewer/tests/units.test.mjs
blob: d4af9d8c41c6b311caa746119432919109a41b61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import './_planet.mjs';
import { test } from 'node:test';
import assert from 'node:assert/strict';
import * as U from '../js/units.js';

U.setUnits({ span_m: 0.331013, league_km: 15.4437 });

test('conversions', () => {
  assert.ok(Math.abs(U.kmToLeagues(15.4437) - 1) < 1e-12);
  assert.ok(Math.abs(U.mToSpans(0.331013) - 1) < 1e-12);
  assert.ok(Math.abs(U.km2ToSqLeagues(15.4437 ** 2) - 1) < 1e-12);
  assert.equal(U.walkDays(90), 3);
  assert.equal(U.fmtDistance(1000), '1,000 km · 64.8 leagues');
  assert.equal(U.fmtDistance(12.34), '12.3 km · 0.80 leagues');
  assert.equal(U.fmtWalk(45), '1.5 days on foot');
  assert.equal(U.fmtLatLon(12.5, -3.25), '12.500° N, 3.250° W');
  assert.equal(U.fmtLatLon(-0.5, 179), '0.500° S, 179.000° E');
  assert.equal(U.fmtDistance(0.5), '500 m · 1,511 spans');
  assert.equal(U.fmtElev(2344), '2,344 m · 7,081 spans');
  assert.equal(U.fmtElev(-12.4), '-12 m · -37 spans');
});

test('niceKm picks 1/2/5 steps', () => {
  assert.deepEqual([123, 260, 0.7, 5, 999].map(U.niceKm), [100, 200, 0.5, 5, 500]);
});

test('setUnits overrides', () => {
  U.setUnits({ league_km: 10 });
  assert.equal(U.kmToLeagues(25), 2.5);
  U.setUnits({ league_km: 15.4437 });
});

test('SI only without in-world units', () => {
  U.setUnits({ span_m: null, league_km: null });
  assert.equal(U.fmtDistance(12.34), '12.3 km');
  assert.equal(U.fmtElev(2344), '2,344 m');
  U.setUnits({ span_m: 0.331013, league_km: 15.4437 });
});