diff --git a/Maths/Coordinate.js b/Maths/Coordinate.js index ae18f5a8b..9bff1b342 100644 --- a/Maths/Coordinate.js +++ b/Maths/Coordinate.js @@ -4,10 +4,16 @@ Example: coorDistance(2,2,14,11) will return 15 Wikipedia reference: https://en.wikipedia.org/wiki/Geographical_distance#Flat-surface_formulae */ -const distance2points = (longitude1, latitude1, longitude2, latitude2) => { +const euclideanDistance = (longitude1, latitude1, longitude2, latitude2) => { const width = longitude2 - longitude1 const height = latitude2 - latitude1 return (Math.sqrt(width * width + height * height)) } -export { distance2points } +const manhattanDistance = (longitude1, latitude1, longitude2, latitude2) => { + const width = Math.abs(longitude2 - longitude1) + const height = Math.abs(latitude2 - latitude1) + return width + height +} + +export { euclideanDistance, manhattanDistance } diff --git a/Maths/test/Coordinate.test.js b/Maths/test/Coordinate.test.js index 2d829ecdd..d32b2c3c4 100644 --- a/Maths/test/Coordinate.test.js +++ b/Maths/test/Coordinate.test.js @@ -1,22 +1,43 @@ import * as coordinate from '../Coordinate' -describe('Testing distance2points calculations', () => { +describe('Testing euclideanDistance calculations', () => { it('Should give a numeric output (distance between 2 points) with 4 numeric arguments', () => { - const distance2points = coordinate.distance2points(2, 2, -10, -7) - expect(distance2points).toBe(15) + const euclideanDistance = coordinate.euclideanDistance(2, 2, -10, -7) + expect(euclideanDistance).toBe(15) }) it('Should not give any output given non-numeric argument', () => { - const distance2points = coordinate.distance2points('ABC', '123', '', '###') - expect(distance2points).toBeNaN() + const euclideanDistance = coordinate.euclideanDistance('ABC', '123', '', '###') + expect(euclideanDistance).toBeNaN() }) it('Should not give any output given any number of numeric arguments less than 4', () => { - const distance2points3arg = coordinate.distance2points(2, 2, -10) - const distance2points2arg = coordinate.distance2points(2, 2) - const distance2points1arg = coordinate.distance2points(2) - const distance2points0arg = coordinate.distance2points() - expect(distance2points3arg).toBeNaN() - expect(distance2points2arg).toBeNaN() - expect(distance2points1arg).toBeNaN() - expect(distance2points0arg).toBeNaN() + const euclideanDistance3arg = coordinate.euclideanDistance(2, 2, -10) + const euclideanDistance2arg = coordinate.euclideanDistance(2, 2) + const euclideanDistance1arg = coordinate.euclideanDistance(2) + const euclideanDistance0arg = coordinate.euclideanDistance() + expect(euclideanDistance3arg).toBeNaN() + expect(euclideanDistance2arg).toBeNaN() + expect(euclideanDistance1arg).toBeNaN() + expect(euclideanDistance0arg).toBeNaN() + }) +}) + +describe('Testing manhattanDistance calculations', () => { + it('Should give a numeric output (distance between 2 points) with 4 numeric arguments', () => { + const manhattanDistance = coordinate.manhattanDistance(2, 2, -10, -7) + expect(manhattanDistance).toBe(21) + }) + it('Should not give any output given non-numeric argument', () => { + const manhattanDistance = coordinate.manhattanDistance('ABC', '123', '', '###') + expect(manhattanDistance).toBeNaN() + }) + it('Should not give any output given any number of numeric arguments less than 4', () => { + const manhattanDistance3arg = coordinate.manhattanDistance(2, 2, -10) + const manhattanDistance2arg = coordinate.manhattanDistance(2, 2) + const manhattanDistance1arg = coordinate.manhattanDistance(2) + const manhattanDistance0arg = coordinate.manhattanDistance() + expect(manhattanDistance3arg).toBeNaN() + expect(manhattanDistance2arg).toBeNaN() + expect(manhattanDistance1arg).toBeNaN() + expect(manhattanDistance0arg).toBeNaN() }) })