From c6e453fb00cc41493c0c895b8cd368b045b4bf89 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Thu, 20 Jul 2017 00:42:39 +0900 Subject: [PATCH] Fix boundary problem in range node (#1338) * Fix boundary problem in range node * Remove duplicated test case * Empty commit to retry Travis CI --- nodes/core/logic/16-range.js | 4 ++-- test/nodes/core/logic/16-range_spec.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/nodes/core/logic/16-range.js b/nodes/core/logic/16-range.js index d4be55137..1de073fee 100644 --- a/nodes/core/logic/16-range.js +++ b/nodes/core/logic/16-range.js @@ -35,8 +35,8 @@ module.exports = function(RED) { if (n > node.maxin) { n = node.maxin; } } if (node.action == "roll") { - if (n >= node.maxin) { n = (n - node.minin) % (node.maxin - node.minin) + node.minin; } - if (n < node.minin) { n = (n - node.minin) % (node.maxin - node.minin) + node.maxin; } + var divisor = node.maxin - node.minin; + n = ((n - node.minin) % divisor + divisor) % divisor + node.minin; } msg.payload = ((n - node.minin) / (node.maxin - node.minin) * (node.maxout - node.minout)) + node.minout; if (node.round) { msg.payload = Math.round(msg.payload); } diff --git a/test/nodes/core/logic/16-range_spec.js b/test/nodes/core/logic/16-range_spec.js index 3ec99d5ac..2d1c28bf2 100644 --- a/test/nodes/core/logic/16-range_spec.js +++ b/test/nodes/core/logic/16-range_spec.js @@ -90,14 +90,14 @@ describe('range Node', function() { genericRangeTest("roll", 0, 10, 0, 360, true, 12.5, 90, done); // 1/4 around wrap => "one and a quarter turns" }); - it('wraps numbers around say for degree/rotation reading 1/4', function(done) { - genericRangeTest("roll", 0, 10, 0, 360, true, 12.5, 90, done); // 1/4 around wrap => "one and a quarter turns" - }); - it('wraps numbers down say for degree/rotation reading 1/4', function(done) { genericRangeTest("roll", 0, 10, 0, 360, true, -12.5, 270, done); // 1/4 backwards wrap => "one and a quarter turns backwards" }); + it('wraps numbers around say for degree/rotation reading 0', function(done) { + genericRangeTest("roll", 0, 10, 0, 360, true, -10, 0, done); + }); + it('clamps numbers within a range - over max', function(done) { genericRangeTest("clamp", 0, 10, 0, 1000, false, 111, 1000, done); });