import { comparatorDistanceUnits } from '@adalo/constants' import { asKilometers, Coordinate, kilometersBetweenLocations, } from '../location' describe('utils/location', () => { describe('asKilometers(...)', () => { test('Preserves kilometers', () => { const inputValue = 14.389 const result = asKilometers( inputValue, comparatorDistanceUnits.KILOMETERS ) expect(result).toBe(inputValue) }) test('Correctly converts 2000 miles', () => { const inputValue = 2000 const result = asKilometers(inputValue, comparatorDistanceUnits.MILES) const expected = 3218.688 // Source: https://www.unitconverters.net/length/miles-to-km.htm expect(result).toBe(expected) }) }) describe('kilometersBetweenLocations(a, b)', () => { test('Finds correct distance between two nearby points', () => { const pointA: Coordinate = { latitude: 49.3040476, longitude: -123.1391123, } const pointB: Coordinate = { latitude: 49.3038325, longitude: -123.1567494, } const result = kilometersBetweenLocations(pointA, pointB) const expectedKms = 1.279 // Source: https://www.movable-type.co.uk/scripts/latlong.html const epsilon = expectedKms * 0.01 // Accuracy up to 1% because finding exact reference values is difficult. expect(Math.abs(result - expectedKms)).toBeLessThan(epsilon) }) test('Finds correct distance between two distant points', () => { const pointA: Coordinate = { latitude: 49.261098, longitude: -123.113982, } const pointB: Coordinate = { latitude: -33.872979, longitude: 151.206104, } const result = kilometersBetweenLocations(pointA, pointB) const expectedKms = 12500 // Source: https://www.movable-type.co.uk/scripts/latlong.html const epsilon = expectedKms * 0.01 // Accuracy up to 1% because finding exact reference values is difficult. expect(Math.abs(result - expectedKms)).toBeLessThan(epsilon) }) test('Distance between same location is zero', () => { const point: Coordinate = { latitude: 42.331427, longitude: -83.0457538, } const result = kilometersBetweenLocations(point, point) expect(result).toBe(0) }) }) })