test nearest/locate at high lat/lon, fix fuzzy match of negative numbers

This commit is contained in:
Emil Tin 2013-08-28 09:39:25 +02:00
parent a6c52fd154
commit 1d6e602473
3 changed files with 52 additions and 8 deletions

View File

@ -80,7 +80,7 @@ Feature: Locate - return nearest node
| nodes |
| ab |
When I request nearest I should get
When I request locate I should get
| in | out |
| 0 | a |
| 1 | a |
@ -105,7 +105,7 @@ Feature: Locate - return nearest node
| nodes |
| ab |
When I request nearest I should get
When I request locate I should get
| in | out |
| 0 | a |
| 1 | a |
@ -131,7 +131,7 @@ Feature: Locate - return nearest node
| nodes |
| axyb |
When I request nearest I should get
When I request locate I should get
| in | out |
| 0 | x |
| 1 | a |
@ -177,3 +177,21 @@ Feature: Locate - return nearest node
| b | b |
| x | x |
| y | y |
Scenario: Locate - High lat/lon
Given the node locations
| node | lat | lon |
| a | -85 | -180 |
| b | 0 | 0 |
| c | 85 | 180 |
| x | -84 | -180 |
| y | 84 | 180 |
And the ways
| nodes |
| abc |
When I request locate I should get
| in | out |
| x | a |
| y | c |

View File

@ -53,4 +53,26 @@ Feature: Locating Nearest node on a Way - pick closest way
| 1 | z |
| 2 | x |
| 3 | u |
| 4 | w |
| 4 | w |
Scenario: Nearest - High lat/lon
Given the node locations
| node | lat | lon |
| a | -85 | -180 |
| b | 0 | 0 |
| c | 85 | 180 |
| x | -70 | -100 |
| y | 70 | 100 |
| v | 1 | 1 |
| w | -1 | -1 |
And the ways
| nodes |
| abc |
When I request nearest I should get
| in | out |
| x | a |
| y | c |
| v | b |
| w | b |

View File

@ -5,10 +5,14 @@ class FuzzyMatch
if got == want
return true
elsif want.match /(.*)\s+~(.+)%$/ #percentage range: 100 ~5%
margin = 1 - $2.to_f*0.01
from = $1.to_f*margin
to = $1.to_f/margin
return got.to_f >= from && got.to_f <= to
target = $1.to_f
percentage = $2.to_f
if target==0
return true
else
ratio = (1-(got.to_f / target)).abs;
return 100*ratio < percentage;
end
elsif want.match /(.*)\s+\+\-(.+)$/ #absolute range: 100 +-5
margin = $2.to_f
from = $1.to_f-margin