osrm-backend/features/testbot/distance_matrix.feature

731 lines
23 KiB
Gherkin
Raw Normal View History

@matrix @testbot
Feature: Basic Distance Matrix
# note that results of travel distance are in metres
Background:
Given the profile "testbot"
And the partition extra arguments "--small-component-size 1 --max-cell-sizes 2,4,8,16"
Scenario: Testbot - Travel distance matrix of small grid
Given the node map
"""
a b c
d e f
"""
And the ways
| nodes |
| abc |
| def |
| ad |
| be |
| cf |
When I request a travel distance matrix I should get
| | a | b | e | f |
| a | 0 | 100 | 199.9 | 300 |
| b | 100 | 0 | 100 | 200 |
| e | 199.9 | 100 | 0 | 100.1 |
| f | 300 | 200 | 100.1 | 0 |
Scenario: Testbot - Travel distance matrix of minimal network exact distances
Given the node map
2016-09-30 03:33:08 -04:00
"""
a z
b
c
d
2016-09-30 03:33:08 -04:00
"""
And the ways
| nodes |
| az |
| zbcd |
When I request a travel distance matrix I should get
| | a | z | b | c | d |
| a | 0 | 100 | 199.9 | 300 | 399.9 |
| z | 100 | 0 | 100 | 200 | 300 |
| b | 199.9 | 100 | 0 | 100.1 | 200 |
| c | 300 | 200 | 100.1 | 0 | 100 |
| d | 399.9 | 300 | 200 | 100 | 0 |
Scenario: Testbot - Travel distance matrix of minimal network with toll exclude
Given the query options
| exclude | toll |
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b
c d
2016-09-30 03:33:08 -04:00
"""
And the ways
| nodes | highway | toll | # |
| ab | motorway | | not drivable for exclude=motorway |
| cd | primary | | always drivable |
| ac | primary | yes | not drivable for exclude=toll and exclude=motorway,toll |
| bd | motorway | yes | not drivable for exclude=toll and exclude=motorway,toll |
When I request a travel distance matrix I should get
| | a | b | c | d |
| a | 0 | 100 | | |
| b | 100 | 0 | | |
| c | | | 0 | 100 |
| d | | | 100 | 0 |
Scenario: Testbot - Travel distance matrix of minimal network with motorway exclude
Given the query options
| exclude | motorway |
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b
c d
2016-09-30 03:33:08 -04:00
"""
And the ways
| nodes | highway | # |
| ab | motorway | not drivable for exclude=motorway |
| cd | residential | |
| ac | residential | |
| bd | residential | |
When I request a travel distance matrix I should get
| | a | b | c | d |
| a | 0 | 299.9 | 100 | 199.9 |
Scenario: Testbot - Travel distance matrix of minimal network disconnected motorway exclude
Given the query options
| exclude | motorway |
And the extract extra arguments "--small-component-size 4"
Given the node map
"""
ab efgh
cd
"""
And the ways
| nodes | highway | # |
| be | motorway | not drivable for exclude=motorway |
| abcd | residential | |
| efgh | residential | |
When I request a travel distance matrix I should get
| | a | b | e |
| a | 0 | 50 | |
Scenario: Testbot - Travel distance matrix of minimal network with motorway and toll excludes
Given the query options
| exclude | motorway,toll |
Given the node map
"""
a b e f
c d g h
"""
And the ways
| nodes | highway | toll | # |
| be | motorway | | not drivable for exclude=motorway |
| dg | primary | yes | not drivable for exclude=toll |
| abcd | residential | | |
| efgh | residential | | |
When I request a travel distance matrix I should get
| | a | b | e | g |
| a | 0 | 100 | | |
Scenario: Testbot - Travel distance matrix with different way speeds
Given the node map
"""
a b c d
"""
And the ways
| nodes | highway |
| ab | primary |
| bc | secondary |
| cd | tertiary |
When I request a travel distance matrix I should get
| | a | b | c | d |
| a | 0 | 100 | 200 | 300 |
| b | 100 | 0 | 100.1 | 200 |
| c | 200 | 100.1 | 0 | 100 |
| d | 300 | 200 | 100 | 0 |
When I request a travel distance matrix I should get
| | a | b | c | d |
| a | 0 | 100 | 200 | 300 |
When I request a travel distance matrix I should get
| | a |
| a | 0 |
| b | 100 |
| c | 200 |
| d | 300 |
Scenario: Testbot - Travel distance matrix of small grid
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b c
d e f
"""
And the ways
| nodes |
| abc |
| def |
| ad |
| be |
| cf |
When I request a travel distance matrix I should get
| | a | b | e | f |
| a | 0 | 100 | 199.9 | 300 |
| b | 100 | 0 | 100 | 200 |
| e | 199.9 | 100 | 0 | 100.1 |
| f | 300 | 200 | 100.1 | 0 |
Scenario: Testbot - Travel distance matrix of network with unroutable parts
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b
"""
And the ways
| nodes | oneway |
| ab | yes |
When I request a travel distance matrix I should get
| | a | b |
| a | 0 | 100 |
| b | | 0 |
Scenario: Testbot - Travel distance matrix of network with oneways
Given the node map
2016-09-30 03:33:08 -04:00
"""
x a b y
d e
"""
And the ways
| nodes | oneway |
| abeda | yes |
| xa | |
| by | |
When I request a travel distance matrix I should get
| | x | y | d | e |
| x | 0 | 300 | 400 | 300 |
| y | 499.9 | 0 | 300 | 199.9 |
| d | 199.9 | 300 | 0 | 300 |
| e | 300 | 400 | 100.1 | 0 |
Scenario: Testbot - Rectangular travel distance matrix
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b c
d e f
"""
And the ways
| nodes |
| abc |
| def |
| ad |
| be |
| cf |
When I route I should get
| from | to | distance |
| e | a | 199.9m |
| e | b | 100m |
| f | a | 300m |
| f | b | 200m |
When I request a travel distance matrix I should get
| | a | b | e | f |
| a | 0 | 100 | 199.9 | 300 |
When I request a travel distance matrix I should get
| | a |
| a | 0 |
| b | 100 |
| e | 199.9 |
| f | 300 |
When I request a travel distance matrix I should get
| | a | b | e | f |
| a | 0 | 100 | 199.9 | 300 |
| b | 100 | 0 | 100 | 200 |
When I request a travel distance matrix I should get
| | a | b |
| a | 0 | 100 |
| b | 100 | 0 |
| e | 199.9 | 100 |
| f | 300 | 200 |
When I request a travel distance matrix I should get
| | a | b | e | f |
| a | 0 | 100 | 199.9 | 300 |
| b | 100 | 0 | 100 | 200 |
| e | 199.9 | 100 | 0 | 100.1 |
When I request a travel distance matrix I should get
| | a | b | e |
| a | 0 | 100 | 199.9 |
| b | 100 | 0 | 100 |
| e | 199.9 | 100 | 0 |
| f | 300 | 200 | 100.1 |
When I request a travel distance matrix I should get
| | a | b | e | f |
| a | 0 | 100 | 199.9 | 300 |
| b | 100 | 0 | 100 | 200 |
| e | 199.9 | 100 | 0 | 100.1 |
| f | 300 | 200 | 100.1 | 0 |
Scenario: Testbot - Travel distance 3x2 matrix
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b c
d e f
"""
And the ways
| nodes |
| abc |
| def |
| ad |
| be |
| cf |
When I request a travel distance matrix I should get
| | b | e | f |
| a | 100 | 199.9 | 300 |
| b | 0 | 100 | 200 |
Scenario: Testbot - All coordinates are from same small component
Given a grid size of 300 meters
Given the extract extra arguments "--small-component-size 4"
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b f
d e g
"""
And the ways
| nodes |
| ab |
| be |
| ed |
| da |
| fg |
When I request a travel distance matrix I should get
| | f | g |
| f | 0 | 300 |
| g | 300 | 0 |
Scenario: Testbot - Coordinates are from different small component and snap to big CC
Given a grid size of 300 meters
Given the extract extra arguments "--small-component-size 4"
Given the node map
2016-09-30 03:33:08 -04:00
"""
a b f h
d e g i
"""
And the ways
| nodes |
| ab |
| be |
| ed |
| da |
| fg |
| hi |
When I route I should get
| from | to | distance |
| f | g | 300m |
| f | i | 300m |
| g | f | 300m |
| g | h | 300m |
| h | g | 300m |
| h | i | 300m |
| i | f | 300m |
| i | h | 300m |
When I request a travel distance matrix I should get
| | f | g | h | i |
| f | 0 | 300 | 0 | 300 |
| g | 300 | 0 | 300 | 0 |
| h | 0 | 300 | 0 | 300 |
| i | 300 | 0 | 300 | 0 |
Scenario: Testbot - Travel distance matrix with loops
Given the node map
2016-09-30 03:33:08 -04:00
"""
a 1 2 b
d 4 3 c
"""
And the ways
| nodes | oneway |
| ab | yes |
| bc | yes |
| cd | yes |
| da | yes |
When I request a travel distance matrix I should get
| | 1 | 2 | 3 | 4 |
| 1 | 0 | 100.1 | 399.9 | 500 |
| 2 | 699.8 | 0 | 299.9 | 399.9 |
| 3 | 399.9 | 500 | 0 | 100.1 |
| 4 | 299.9 | 399.9 | 699.8 | 0 |
Scenario: Testbot - Travel distance matrix based on segment durations
2017-05-18 08:27:28 -04:00
Given the profile file
"""
2017-05-18 08:27:28 -04:00
local functions = require('testbot')
functions.setup_testbot = functions.setup
functions.setup = function()
local profile = functions.setup_testbot()
profile.traffic_signal_penalty = 0
profile.u_turn_penalty = 0
return profile
end
functions.process_segment = function(profile, segment)
segment.weight = 2
segment.duration = 11
end
2017-05-18 08:27:28 -04:00
return functions
"""
And the node map
"""
a-b-c-d
.
e
"""
And the ways
| nodes |
| abcd |
| ce |
When I request a travel distance matrix I should get
| | a | b | c | d | e |
| a | 0 | 100 | 200 | 300 | 400 |
| b | 100 | 0 | 100.1 | 200 | 300.1 |
| c | 200 | 100.1 | 0 | 100 | 200 |
| d | 300 | 200 | 100 | 0 | 300 |
| e | 400 | 300.1 | 200 | 300 | 0 |
Scenario: Testbot - Travel distance matrix for alternative loop paths
2017-05-18 08:27:28 -04:00
Given the profile file
"""
2017-05-18 08:27:28 -04:00
local functions = require('testbot')
functions.setup_testbot = functions.setup
functions.setup = function()
local profile = functions.setup_testbot()
profile.traffic_signal_penalty = 0
profile.u_turn_penalty = 0
profile.weight_precision = 3
return profile
end
functions.process_segment = function(profile, segment)
segment.weight = 777
segment.duration = 3
end
2017-05-18 08:27:28 -04:00
return functions
"""
And the node map
"""
a 2 1 b
7 4
8 3
c 5 6 d
"""
And the ways
| nodes | oneway |
| ab | yes |
| bd | yes |
| dc | yes |
| ca | yes |
When I request a travel distance matrix I should get
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 1 | 0 | 1099.8 | 300 | 199.9 | 600 | 499.9 | 899.9 | 799.9 |
| 2 | 100.1 | 0 | 400 | 300 | 700 | 600 | 1000 | 899.9 |
| 3 | 899.9 | 799.9 | 0 | 1099.8 | 300 | 199.9 | 600 | 499.9 |
| 4 | 1000 | 899.9 | 100.1 | 0 | 400 | 300 | 700 | 600 |
| 5 | 600 | 499.9 | 899.9 | 799.9 | 0 | 1099.8 | 300 | 199.9 |
| 6 | 700 | 600 | 1000 | 899.9 | 100.1 | 0 | 400 | 300 |
| 7 | 300 | 199.9 | 600 | 499.9 | 899.9 | 799.9 | 0 | 1099.8 |
| 8 | 400 | 300 | 700 | 600 | 1000 | 899.9 | 100.1 | 0 |
When I request a travel distance matrix I should get
| | 1 |
| 1 | 0 |
| 2 | 100.1 |
| 3 | 899.9 |
| 4 | 1000 |
| 5 | 600 |
| 6 | 700 |
| 7 | 300 |
| 8 | 400 |
Scenario: Testbot - Travel distance matrix with ties
Given the node map
"""
a b
c d
"""
And the ways
| nodes |
| ab |
| ac |
| bd |
| dc |
When I route I should get
| from | to | route | distance | time | weight |
| a | c | ac,ac | 200m | 20s | 20 |
When I route I should get
| from | to | route | distance |
| a | b | ab,ab | 450m |
| a | c | ac,ac | 200m |
| a | d | ac,dc,dc | 500m |
When I request a travel distance matrix I should get
| | a | b | c | d |
| a | 0 | 450 | 200 | 500 |
When I request a travel distance matrix I should get
| | a |
| a | 0 |
| b | 450 |
| c | 200 |
| d | 500 |
When I request a travel distance matrix I should get
| | a | c |
| a | 0 | 200 |
| c | 200 | 0 |
# Check rounding errors
Scenario: Testbot - Long distances in tables
Given a grid size of 1000 meters
Given the node map
"""
a b c d
"""
And the ways
| nodes |
| abcd |
When I request a travel distance matrix I should get
| | a | b | c | d |
| a | 0 | 1000.1 | 2000 | 3000.1 |
Scenario: Testbot - OneToMany vs ManyToOne
Given the node map
"""
a b
c
"""
And the ways
| nodes | oneway |
| ab | yes |
| ac | |
| bc | |
When I request a travel distance matrix I should get
| | a | b |
| b | 241.3 | 0 |
When I request a travel distance matrix I should get
| | a |
| a | 0 |
| b | 241.3 |
Scenario: Testbot - Varying distances between nodes
Given the node map
"""
a b c d
e
f
"""
And the ways
| nodes | oneway |
| feabcd | yes |
| ec | |
| fd | |
When I request a travel distance matrix I should get
| | a | b | c | d | e | f |
| a | 0 | 100 | 300 | 650 | 1934.5 | 1534.6 |
| b | 760.6 | 0 | 200 | 550.1 | 1834.6 | 1434.6 |
| c | 560.6 | 660.5 | 0 | 350 | 1634.6 | 1234.6 |
| d | 1484.6 | 1584.5| 1784.5 | 0 | 1284.5 | 884.6 |
| e | 200 | 300 | 500 | 710.6 | 0 | 1595.2 |
| f | 600 | 699.9 | 899.9 | 1110.5 | 399.9 | 0 |
Scenario: Testbot - Filling in noroutes with estimates (defaults to input coordinate location)
Given a grid size of 300 meters
Given the extract extra arguments "--small-component-size 4"
Given the query options
| fallback_speed | 5 |
Given the node map
"""
a b f h 1
d e g i
"""
And the ways
| nodes |
| abeda |
| fhigf |
When I request a travel distance matrix I should get
| | a | b | f | 1 |
| a | 0 | 300 | 900 | 1500 |
| b | 300 | 0 | 600 | 1200.1 |
| f | 900 | 600 | 0 | 300 |
| 1 | 1500 | 1200.1 | 300 | 0 |
When I request a travel distance matrix I should get
| | a | b | f | 1 |
| a | 0 | 300 | 900 | 1500 |
When I request a travel distance matrix I should get
| | a |
| a | 0 |
| b | 300 |
| f | 900 |
| 1 | 1500 |
Scenario: Testbot - Fise input coordinate
Given a grid size of 300 meters
Given the extract extra arguments "--small-component-size 4"
Given the query options
| fallback_speed | 5 |
| fallback_coordinate | input |
Given the node map
"""
a b f h 1
d e g i
"""
And the ways
| nodes |
| abeda |
| fhigf |
When I request a travel distance matrix I should get
| | a | b | f | 1 |
| a | 0 | 300 | 900 | 1500 |
| b | 300 | 0 | 600 | 1200.1 |
| f | 900 | 600 | 0 | 300 |
| 1 | 1500 | 1200.1 | 300 | 0 |
When I request a travel distance matrix I should get
| | a | b | f | 1 |
| a | 0 | 300 | 900 | 1500 |
When I request a travel distance matrix I should get
| | a |
| a | 0 |
| b | 300 |
| f | 900 |
| 1 | 1500 |
Scenario: Testbot - Filling in noroutes with estimates - use snapped coordinate
Given a grid size of 300 meters
Given the extract extra arguments "--small-component-size 4"
Given the query options
| fallback_speed | 5 |
| fallback_coordinate | snapped |
Given the node map
"""
a b f h 1
d e g i
"""
And the ways
| nodes |
| abeda |
| fhigf |
When I request a travel distance matrix I should get
| | a | b | f | 1 |
| a | 0 | 300 | 900 | 1200 |
| b | 300 | 0 | 600 | 900 |
| f | 900 | 600 | 0 | 300 |
| 1 | 1200 | 900 | 300 | 0 |
When I request a travel distance matrix I should get
| | a | b | f | 1 |
| a | 0 | 300 | 900 | 1200 |
When I request a travel distance matrix I should get
| | a |
| a | 0 |
| b | 300 |
| f | 900 |
| 1 | 1200 |
Scenario: Ensure consistency with route, and make sure offsets work in both directions
Given a grid size of 100 meters
Given the node map
"""
a b c d e f g h i j
1 2 3
"""
And the ways
| nodes |
| abcdef |
| fghij |
When I route I should get
| from | to | route | distance |
| 1 | 2 | abcdef,fghij,fghij | 1000.1m |
| 1 | 3 | abcdef,fghij,fghij | 1400.1m |
| 2 | 3 | fghij,fghij | 400m |
When I request a travel distance matrix I should get
| | 1 | 2 | 3 |
| 1 | 0 | 1000.1 | 1400.1 |
| 2 | 1000.1 | 0 | 400 |
| 3 | 1400.1 | 400 | 0 |