diff --git a/features/locate/locate.feature b/features/locate/locate.feature index cbf6b200f..e033a41fb 100644 --- a/features/locate/locate.feature +++ b/features/locate/locate.feature @@ -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 | diff --git a/features/nearest/pick.feature b/features/nearest/pick.feature index f3bd76d76..86698a4fb 100644 --- a/features/nearest/pick.feature +++ b/features/nearest/pick.feature @@ -53,4 +53,26 @@ Feature: Locating Nearest node on a Way - pick closest way | 1 | z | | 2 | x | | 3 | u | - | 4 | w | \ No newline at end of file + | 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 | diff --git a/features/support/fuzzy.rb b/features/support/fuzzy.rb index 611d1efec..0d579ab4d 100644 --- a/features/support/fuzzy.rb +++ b/features/support/fuzzy.rb @@ -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