mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
Directions, the Contacts marker and panel, placed annotation labels, the drawn-line measure, the Cockpit and formatRouteDistance each chose the unit and precision on their own, and most chose before rounding: #1450, #1433 and formatDistanceText or kilometreDigits from src/data/distanceFormat.js, which cut after rounding. Each keeps its own metre step and rendering. That also fixes the 10 km cut the Contacts marker and panel, the drawn-line measure and the Cockpit still had (9,960 m read 10.0 km). The helper returns kilometres already rounded, so the plain marker and the localized panel no longer disagree on half-tenths such as 1,450 m. A negative annotation distance now leaves the label without a distance, and a drawn line with a coordinate that is not a number shows no measure, rather than printing 0 m or NaN km. The HUD altitude tag and the spoken view height keep their own unit choice.
51 lines
1.9 KiB
JavaScript
51 lines
1.9 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
distanceParts,
|
|
formatDistanceText,
|
|
kilometreDigits,
|
|
} from './distanceFormat.js';
|
|
|
|
test('a distance switches to kilometres where its metres round to 1,000', () => {
|
|
assert.equal(formatDistanceText(999.4), '999 m');
|
|
assert.equal(formatDistanceText(999.5), '1.0 km');
|
|
assert.equal(formatDistanceText(999.6), '1.0 km');
|
|
assert.equal(formatDistanceText(994, { metreStep: 10 }), '990 m');
|
|
assert.equal(formatDistanceText(995, { metreStep: 10 }), '1.0 km');
|
|
});
|
|
|
|
test('kilometres drop their decimal where the tenth rounds to 10.0', () => {
|
|
assert.equal(kilometreDigits(9949), 1);
|
|
assert.equal(kilometreDigits(9950), 0);
|
|
assert.equal(formatDistanceText(9949), '9.9 km');
|
|
assert.equal(formatDistanceText(9950), '10 km');
|
|
assert.equal(formatDistanceText(9960), '10 km');
|
|
assert.equal(formatDistanceText(99950), '100 km');
|
|
});
|
|
|
|
test('metres below exactBelowM stay whole while the rest round to the step', () => {
|
|
const options = { metreStep: 10, exactBelowM: 100 };
|
|
assert.equal(formatDistanceText(8, options), '8 m');
|
|
assert.equal(formatDistanceText(99.4, options), '99 m');
|
|
assert.equal(formatDistanceText(846, options), '850 m');
|
|
assert.deepEqual(distanceParts(846, options), {
|
|
value: 850,
|
|
unit: 'm',
|
|
digits: 0,
|
|
});
|
|
});
|
|
|
|
test('a negative or non-finite distance has no parts', () => {
|
|
for (const value of [-1, Number.NaN, Infinity, -Infinity, null, undefined]) {
|
|
assert.equal(distanceParts(value), null);
|
|
assert.equal(formatDistanceText(value), null);
|
|
}
|
|
assert.equal(formatDistanceText(0), '0 m');
|
|
});
|
|
|
|
test('kilometres come back rounded, so toFixed and Intl agree', () => {
|
|
assert.deepEqual(distanceParts(1450), { value: 1.5, unit: 'km', digits: 1 });
|
|
assert.equal(formatDistanceText(1450), '1.5 km');
|
|
assert.equal(formatDistanceText(1150), '1.2 km');
|
|
});
|