From 49eb46fefbf4646a2849b960fcea48af79969d89 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Mon, 8 Jan 2018 17:04:30 -0500 Subject: [PATCH] Add epsilon parameter to geoVecEqual --- modules/geo/vector.js | 8 ++++++-- test/spec/geo/vector.js | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/modules/geo/vector.js b/modules/geo/vector.js index 708bb5f66..e67a6d176 100644 --- a/modules/geo/vector.js +++ b/modules/geo/vector.js @@ -1,6 +1,10 @@ // vector equals -export function geoVecEqual(a, b) { - return (a[0] === b[0]) && (a[1] === b[1]); +export function geoVecEqual(a, b, epsilon) { + if (epsilon) { + return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon); + } else { + return (a[0] === b[0]) && (a[1] === b[1]); + } } // vector addition diff --git a/test/spec/geo/vector.js b/test/spec/geo/vector.js index 7b69aab00..20764e80a 100644 --- a/test/spec/geo/vector.js +++ b/test/spec/geo/vector.js @@ -1,11 +1,15 @@ describe('iD.geo - vector', function() { describe('geoVecEqual', function() { - it('tests vectors for equality', function() { + it('tests vectors for exact equality', function() { expect(iD.geoVecEqual([1, 2], [1, 2])).to.be.true; expect(iD.geoVecEqual([1, 2], [1, 0])).to.be.false; expect(iD.geoVecEqual([1, 2], [2, 1])).to.be.false; }); + it('tests vectors for equality within epsilon', function() { + expect(iD.geoVecEqual([1, 2], [1.0000001, 2.0000001], 1e-5)).to.be.true; + expect(iD.geoVecEqual([1, 2], [1.0000001, 2.0000001], 1e-8)).to.be.false; + }); }); describe('geoVecAdd', function() {