diff --git a/features/bicycle/ferry.feature b/features/bicycle/ferry.feature index e7846f64d..378a3a656 100644 --- a/features/bicycle/ferry.feature +++ b/features/bicycle/ferry.feature @@ -4,7 +4,7 @@ Feature: Bike - Handle ferry routes Background: Given the speedprofile "bicycle" - Scenario: Bike - Use a ferry route + Scenario: Bike - Ferry route Given the node map | a | b | c | | | | | | d | | | @@ -27,4 +27,109 @@ Feature: Bike - Handle ferry routes | c | f | cde,efg | | c | g | cde,efg | + Scenario: Bike - Ferry duration, single node + Given the node map + | a | b | c | d | + | | | e | f | + | | | g | h | + | | | i | j | + + And the ways + | nodes | highway | route | bicycle | duration | + | ab | primary | | | | + | cd | primary | | | | + | ef | primary | | | | + | gh | primary | | | | + | ij | primary | | | | + | bc | | ferry | yes | 0:01 | + | be | | ferry | yes | 0:10 | + | bg | | ferry | yes | 1:00 | + | bi | | ferry | yes | 10:00 | + Scenario: Bike - Ferry duration, multiple nodes + Given the node map + | x | | | | | y | + | | a | b | c | d | | + + And the ways + | nodes | highway | route | bicycle | duration | + | xa | primary | | | | + | yd | primary | | | | + | abcd | | ferry | yes | 1:00 | + + When I route I should get + | from | to | route | time | + | a | d | abcd | 3600s +-1 | + | d | a | abcd | 3600s +-1 | + + Scenario: Bike - Ferry duration, connected routes + Given the node map + | x | | | | | | | | y | + | | a | b | c | d | e | f | g | | + + And the ways + | nodes | highway | route | bicycle | duration | + | xa | primary | | | | + | yg | primary | | | | + | abcd | | ferry | yes | 0:30 | + | defg | | ferry | yes | 0:30 | + + When I route I should get + | from | to | route | time | + | a | g | abcd,defg | 3600s +-1 | + | g | a | defg,abcd | 3600s +-1 | + + Scenario: Bike - Prefer road when faster than ferry + Given the node map + | x | a | b | c | | + | | | | | d | + | y | g | f | e | | + + And the ways + | nodes | highway | route | bicycle | duration | + | xa | primary | | | | + | yg | primary | | | | + | xy | primary | | | | + | abcd | | ferry | yes | 0:01 | + | defg | | ferry | yes | 0:01 | + + When I route I should get + | from | to | route | time | + | a | g | xa,xy,yg | 60s +-25% | + | g | a | yg,xy,xa | 60s +-25% | + + Scenario: Bike - Long winding ferry route + Given the node map + | x | | b | | d | | f | | y | + | | a | | c | | e | | g | | + + And the ways + | nodes | highway | route | bicycle | duration | + | xa | primary | | | | + | yg | primary | | | | + | abcdefg | | ferry | yes | 6:30 | + + When I route I should get + | from | to | route | time | + | a | g | abcdefg | 23400s +-1 | + | g | a | abcdefg | 23400s +-1 | + + Scenario: Bike - Ferry duration, individual parts + Given the node map + | x | y | | z | | | v | + | a | b | | c | | | d | + + And the ways + | nodes | highway | route | bicycle | duration | + | xa | primary | | | | + | yb | primary | | | | + | zc | primary | | | | + | vd | primary | | | | + | abcd | | ferry | yes | 1:00 | + + When I route I should get + | from | to | route | time | + | a | d | abcd | 3600s +-1 | + | a | b | abcd | 600s +-1 | + | b | c | abcd | 1200s +-1 | + | c | d | abcd | 1800s +-1 | diff --git a/features/testbot/ferry.feature b/features/testbot/ferry.feature new file mode 100644 index 000000000..35b18d04e --- /dev/null +++ b/features/testbot/ferry.feature @@ -0,0 +1,60 @@ +@routing @testbot @ferry +Feature: Testbot - Handle ferry routes + + Background: + Given the speedprofile "testbot" + + Scenario: Testbot - Ferry duration, single node + Given the node map + | a | b | c | d | + | | | e | f | + | | | g | h | + | | | i | j | + + And the ways + | nodes | highway | route | bicycle | duration | + | ab | primary | | | | + | cd | primary | | | | + | ef | primary | | | | + | gh | primary | | | | + | ij | primary | | | | + | bc | | ferry | yes | 0:01 | + | be | | ferry | yes | 0:10 | + | bg | | ferry | yes | 1:00 | + | bi | | ferry | yes | 10:00 | + + Scenario: Testbot - Ferry duration, multiple nodes + Given the node map + | x | | | | | y | + | | a | b | c | d | | + + And the ways + | nodes | highway | route | bicycle | duration | + | xa | primary | | | | + | yd | primary | | | | + | abcd | | ferry | yes | 1:00 | + + When I route I should get + | from | to | route | time | + | a | d | abcd | 3600s +-1 | + | d | a | abcd | 3600s +-1 | + + Scenario: Bike - Ferry duration, individual parts + Given the node map + | x | y | | z | | | v | + | a | b | | c | | | d | + + And the ways + | nodes | highway | route | bicycle | duration | + | xa | primary | | | | + | yb | primary | | | | + | zc | primary | | | | + | vd | primary | | | | + | abcd | | ferry | yes | 1:00 | + + When I route I should get + | from | to | route | time | + | a | d | abcd | 3600s +-1 | + | a | b | abcd | 600s +-1 | + | b | c | abcd | 1200s +-1 | + | c | d | abcd | 1800s +-1 | \ No newline at end of file diff --git a/profiles/testbot.lua b/profiles/testbot.lua index f674ffe69..3eb1ff339 100644 --- a/profiles/testbot.lua +++ b/profiles/testbot.lua @@ -43,10 +43,19 @@ function way_function (way, numberOfNodesInWay) local highway = way.tags:Find("highway") local name = way.tags:Find("name") local oneway = way.tags:Find("oneway") + local route = way.tags:Find("route") + local duration = way.tags:Find("duration") way.name = name - way.speed = speed_profile[highway] or speed_profile['default'] + if route ~= nil and durationIsValid(duration) then + way.ignore_in_grid = true + way.speed = math.max( 1, parseDuration(duration) / math.max(1, numberOfNodesInWay-1) ) + way.is_duration_set = true + else + way.speed = speed_profile[highway] or speed_profile['default'] + end + if oneway == "no" or oneway == "0" or oneway == "false" then way.direction = Way.bidirectional elseif oneway == "-1" then