| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- const assert = require('assert');
- const { haversineDistance, bearing, bearingDiff } = require('../src/utils/geo');
- describe('geo utilities', () => {
- describe('haversineDistance', () => {
- it('returns 0 for same point', () => {
- assert.strictEqual(haversineDistance(51.5, -0.1, 51.5, -0.1), 0);
- });
- it('calculates distance between London and Paris (~340 km)', () => {
- const d = haversineDistance(51.5074, -0.1278, 48.8566, 2.3522);
- assert.ok(d > 340000 && d < 345000, `Expected ~342 km, got ${(d/1000).toFixed(1)} km`);
- });
- it('calculates short distance accurately (~1 m steps)', () => {
- // 0.00001 degrees lat ≈ 1.11 m
- const d = haversineDistance(51.5000, 0, 51.5001, 0);
- assert.ok(d > 10 && d < 12, `Expected ~11 m, got ${d.toFixed(2)} m`);
- });
- });
- describe('bearing', () => {
- it('returns 0 for due north', () => {
- const b = bearing(51.0, 0.0, 52.0, 0.0);
- assert.ok(Math.abs(b) < 1, `Expected ~0°, got ${b.toFixed(1)}°`);
- });
- it('returns 90 for due east', () => {
- const b = bearing(51.0, 0.0, 51.0, 1.0);
- assert.ok(Math.abs(b - 90) < 2, `Expected ~90°, got ${b.toFixed(1)}°`);
- });
- it('returns 180 for due south', () => {
- const b = bearing(52.0, 0.0, 51.0, 0.0);
- assert.ok(Math.abs(b - 180) < 1, `Expected ~180°, got ${b.toFixed(1)}°`);
- });
- it('returns 270 for due west', () => {
- const b = bearing(51.0, 1.0, 51.0, 0.0);
- assert.ok(Math.abs(b - 270) < 2, `Expected ~270°, got ${b.toFixed(1)}°`);
- });
- });
- describe('bearingDiff', () => {
- it('returns 0 for same bearing', () => {
- assert.strictEqual(bearingDiff(90, 90), 0);
- });
- it('returns 90 for perpendicular bearings', () => {
- assert.strictEqual(bearingDiff(0, 90), 90);
- assert.strictEqual(bearingDiff(90, 0), 90);
- });
- it('returns 180 for opposite bearings', () => {
- assert.strictEqual(bearingDiff(0, 180), 180);
- });
- it('wraps around 360', () => {
- assert.strictEqual(bearingDiff(350, 10), 20);
- assert.strictEqual(bearingDiff(10, 350), 20);
- });
- });
- });
|