worldmap-viewer

git clone https://git.godosa.eu/worldmap-viewer

master

raw · 1462 bytes

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 });
});