From 7c8c71a3de14192f4e3aa980afd7398cbd8b7c7a Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Thu, 14 Oct 2021 17:53:21 +0200 Subject: [PATCH] Add stats track tests (failing) --- js/util/CheapRuler.js | 7 +++++++ js/util/StdPath.js | 5 +++-- tests/util/CheapRuler.test.js | 32 ++++++++++++++++++++++++++------ tests/util/StdPath.test.js | 30 ++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 tests/util/StdPath.test.js diff --git a/js/util/CheapRuler.js b/js/util/CheapRuler.js index 199097f..3ac144d 100644 --- a/js/util/CheapRuler.js +++ b/js/util/CheapRuler.js @@ -107,3 +107,10 @@ btools = {}; })((util = btools.util || (btools.util = {}))); })(btools || (btools = {})); btools.util.CheapRuler.__static_initialize(); + +btools.util.CheapRuler.toIntegerLngLat = (coordinate) => { + const ilon = (coordinate[0] + 180) * 1e6; + const ilat = (coordinate[1] + 90) * 1e6; + + return [ilon, ilat]; +}; diff --git a/js/util/StdPath.js b/js/util/StdPath.js index 14e45ba..d24e487 100644 --- a/js/util/StdPath.js +++ b/js/util/StdPath.js @@ -1,7 +1,5 @@ (function () { // Calculates time and energy stats - // - // from BRouter btools.router.StdPath class BExpressionContextWay { getMaxspeed() { @@ -18,6 +16,7 @@ } } + // from BRouter btools.router.RoutingContext class RoutingContext { constructor() { this.expctxGlobal = new BExpressionContext(); @@ -32,6 +31,7 @@ } } + // from BRouter btools.router.StdPath class StdPath { constructor() { this.totalTime = 0; @@ -143,4 +143,5 @@ StdPath.GRAVITY = 9.81; BR.StdPath = StdPath; + BR.RoutingContext = RoutingContext; })(); diff --git a/tests/util/CheapRuler.test.js b/tests/util/CheapRuler.test.js index 3634de2..3da5fbb 100644 --- a/tests/util/CheapRuler.test.js +++ b/tests/util/CheapRuler.test.js @@ -1,14 +1,13 @@ require('../../js/util/CheapRuler.js'); +const geoJson = require('../format/data/track.json'); test('distance', () => { // https://github.com/abrensch/brouter/issues/3#issuecomment-440375918 - const latlng1 = [48.8124, 2.3158]; - const latlng2 = [48.8204, 2.321]; + const lngLat1 = [2.3158, 48.8124]; + const lngLat2 = [2.321, 48.8204]; - const ilon1 = (latlng1[1] + 180) * 1e6; - const ilat1 = (latlng1[0] + 90) * 1e6; - const ilon2 = (latlng2[1] + 180) * 1e6; - const ilat2 = (latlng2[0] + 90) * 1e6; + const [ilon1, ilat1] = btools.util.CheapRuler.toIntegerLngLat(lngLat1); + const [ilon2, ilat2] = btools.util.CheapRuler.toIntegerLngLat(lngLat2); const distance = btools.util.CheapRuler.distance(ilon1, ilat1, ilon2, ilat2); @@ -16,3 +15,24 @@ test('distance', () => { // 968.0593622374572 - CheapRuler.java expect(distance).toBeCloseTo(968.0593622374572); }); + +test('total distance', () => { + const coordinates = geoJson.features[0].geometry.coordinates; + const properties = geoJson.features[0].properties; + let totalDistance = 0; + + for (let i = 0; i < coordinates.length; i++) { + if (i === 0) continue; + + const coord1 = coordinates[i - 1]; + const coord2 = coordinates[i]; + + const [ilon1, ilat1] = btools.util.CheapRuler.toIntegerLngLat(coord1); + const [ilon2, ilat2] = btools.util.CheapRuler.toIntegerLngLat(coord2); + + const distance = btools.util.CheapRuler.distance(ilon1, ilat1, ilon2, ilat2); + totalDistance += distance; + } + + expect(Math.round(totalDistance)).toEqual(+properties['track-length']); +}); diff --git a/tests/util/StdPath.test.js b/tests/util/StdPath.test.js new file mode 100644 index 0000000..a0a4be1 --- /dev/null +++ b/tests/util/StdPath.test.js @@ -0,0 +1,30 @@ +BR = {}; +require('../../js/util/CheapRuler.js'); +require('../../js/util/StdPath.js'); + +const geoJson = require('../format/data/track.json'); + +test('simple track', () => { + const coordinates = geoJson.features[0].geometry.coordinates; + const properties = geoJson.features[0].properties; + const rc = new BR.RoutingContext(); + const stdPath = new BR.StdPath(); + + for (let i = 0; i < coordinates.length; i++) { + if (i === 0) continue; + + const coord1 = coordinates[i - 1]; + const coord2 = coordinates[i]; + + const [ilon1, ilat1] = btools.util.CheapRuler.toIntegerLngLat(coord1); + const [ilon2, ilat2] = btools.util.CheapRuler.toIntegerLngLat(coord2); + + const distance = btools.util.CheapRuler.distance(ilon1, ilat1, ilon2, ilat2); + const deltaHeight = coord2[2] - coord1[2]; + + stdPath.computeKinematic(rc, distance, deltaHeight, true); + } + + expect(Math.round(stdPath.getTotalEnergy())).toEqual(+properties['total-energy']); + expect(Math.round(stdPath.getTotalTime())).toEqual(+properties['total-time']); +});