Functional Weave
Code in TypeScript

logistics.route-distance@1.0.0

vectors.json

2,679 bytes · view raw

[
  { "name": "London to Paris is one leg", "args": [[{ "lat": 51.5074, "lng": -0.1278 }, { "lat": 48.8566, "lng": 2.3522 }], false], "expect": { "totalMetres": 343556.535, "legMetres": [343556.535] } },
  { "name": "round trip adds the leg home", "args": [[{ "lat": 51.5074, "lng": -0.1278 }, { "lat": 48.8566, "lng": 2.3522 }], true], "expect": { "totalMetres": 687113.07, "legMetres": [343556.535, 343556.535] } },
  { "name": "along the equator then north, a degree each", "args": [[{ "lat": 0, "lng": 0 }, { "lat": 0, "lng": 1 }, { "lat": 1, "lng": 1 }], false], "expect": { "totalMetres": 222390.16, "legMetres": [111195.08, 111195.08] } },
  { "name": "three legs summed in floating point would be 8659345.290000001", "args": [[{ "lat": 36.12, "lng": -86.67 }, { "lat": 33.94, "lng": -118.4 }, { "lat": 36.12, "lng": -86.67 }, { "lat": 33.94, "lng": -118.4 }], false], "expect": { "totalMetres": 8659345.29, "legMetres": [2886448.43, 2886448.43, 2886448.43] } },
  { "name": "five legs summed in floating point would be 1717782.6749999998", "args": [[{ "lat": 51.5074, "lng": -0.1278 }, { "lat": 48.8566, "lng": 2.3522 }, { "lat": 51.5074, "lng": -0.1278 }, { "lat": 48.8566, "lng": 2.3522 }, { "lat": 51.5074, "lng": -0.1278 }, { "lat": 48.8566, "lng": 2.3522 }], false], "expect": { "totalMetres": 1717782.675, "legMetres": [343556.535, 343556.535, 343556.535, 343556.535, 343556.535] } },
  { "name": "across the antimeridian is one degree, not 359", "args": [[{ "lat": 0, "lng": 179.5 }, { "lat": 0, "lng": -179.5 }], false], "expect": { "totalMetres": 111195.08, "legMetres": [111195.08] } },
  { "name": "a repeated stop is a leg of zero", "args": [[{ "lat": 51.5074, "lng": -0.1278 }, { "lat": 51.5074, "lng": -0.1278 }, { "lat": 48.8566, "lng": 2.3522 }], false], "expect": { "totalMetres": 343556.535, "legMetres": [0, 343556.535] } },
  { "name": "one stop has no legs", "args": [[{ "lat": 51.5074, "lng": -0.1278 }], false], "expect": { "totalMetres": 0, "legMetres": [] } },
  { "name": "one stop has nowhere to return from", "args": [[{ "lat": 51.5074, "lng": -0.1278 }], true], "expect": { "totalMetres": 0, "legMetres": [] } },
  { "name": "no stops is an error, not zero", "args": [[], false], "expectError": "stops must not be empty" },
  { "name": "a latitude out of range is an error", "args": [[{ "lat": 51.5074, "lng": -0.1278 }, { "lat": -0.1278, "lng": 151.5 }, { "lat": 91, "lng": 0 }], false], "expectError": "latitude must be between -90 and 90 degrees" },
  { "name": "a longitude out of range is an error", "args": [[{ "lat": 0, "lng": 181 }, { "lat": 0, "lng": 0 }], false], "expectError": "longitude must be between -180 and 180 degrees" }
]