File: edge_cases.pg

package info (click to toggle)
pgrouting 4.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 17,332 kB
  • sloc: cpp: 21,315; sql: 10,419; ansic: 9,795; perl: 1,142; sh: 919; javascript: 314; xml: 182; makefile: 29
file content (146 lines) | stat: -rw-r--r-- 6,498 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* :file: This file is part of the pgRouting project.
:copyright: Copyright (c) 2019-2026 pgRouting developers
:license: Creative Commons Attribution-Share Alike 3.0 https://creativecommons.org/licenses/by-sa/3.0 */


BEGIN;

UPDATE edges SET cost = sign(cost), reverse_cost = sign(reverse_cost);
SELECT plan(29);

CREATE OR REPLACE FUNCTION types_check()
RETURNS SETOF TEXT AS
$BODY$
DECLARE code TEXT := 'P0001';
BEGIN

  IF min_version('4.0.0') THEN
    code := 'XX000';
  END IF;

  -- 0 edges tests

  RETURN QUERY SELECT is_empty(' SELECT id, source, target, cost > 0, reverse_cost > 0  from edges where id>18 ','1');

  -- directed graph
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '', 5)', '2');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[5])','3');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[2,5])', '4');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '', 5, max_depth => 2)', '5');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[5], max_depth => 2)','6');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[2,5], max_depth => 2)', '7');

  -- undirected graph
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '', 5, directed := false)', '8');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[5], directed := false)','9');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[2,5], directed := false)', '10');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '', 5, max_depth => 2, directed := false)', '11');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[5], max_depth => 2, directed := false)','12');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges where id>18 '',array[2,5], max_depth => 2, directed := false)', '13');


  -- vertex not present in graph tests

  -- directed graph
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'', -10)', '14');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[-10])','15');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[20,-10])', '16');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'', -10, max_depth => 2)', '17');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[-10], max_depth => 2)','18');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[20,-10], max_depth => 2)', '19');

  -- undirected graph
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'', -10, directed := false)', '20');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[-10], directed := false)','21');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[20,-10], directed := false)', '22');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'', -10, max_depth => 2, directed := false)', '23');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[-10], max_depth => 2, directed := false)','24');
  RETURN QUERY SELECT is_empty('
    SELECT * from pgr_breadthFirstSearch(''SELECT id, source, target, cost, reverse_cost  from edges'',array[20,-10], max_depth => 2, directed := false)', '25');

  -- negative depth tests

  PREPARE breadthFirstSearch26 AS
  SELECT *
  FROM pgr_breadthFirstSearch(
    'SELECT id, source, target, cost, reverse_cost
    FROM edges',
    4, max_depth => -3
  );

  RETURN QUERY SELECT throws_ok('breadthFirstSearch26',
    code,
    'Negative value found on ''max_depth''',
    '26: Negative max_depth throws');



  PREPARE breadthFirstSearch27 AS
  SELECT *
  FROM pgr_breadthFirstSearch(
    'SELECT id, source, target, cost, reverse_cost
    FROM edges',
    ARRAY[4, 10], max_depth => -3
  );

  RETURN QUERY SELECT throws_ok('breadthFirstSearch27',
    code,
    'Negative value found on ''max_depth''',
    '27: Negative max_depth throws');

  PREPARE breadthFirstSearch28 AS
  SELECT *
  FROM pgr_breadthFirstSearch(
    'SELECT id, source, target, cost, reverse_cost
    FROM edges',
    4, max_depth => -3, directed => false
  );

  RETURN QUERY SELECT throws_ok('breadthFirstSearch28',
    code,
    'Negative value found on ''max_depth''',
    '28: Negative max_depth throws');

  PREPARE breadthFirstSearch29 AS
  SELECT *
  FROM pgr_breadthFirstSearch(
    'SELECT id, source, target, cost, reverse_cost
    FROM edges',
    ARRAY[4, 10], max_depth => -3, directed => false
  );

  RETURN QUERY SELECT throws_ok('breadthFirstSearch29',
    code,
    'Negative value found on ''max_depth''',
    '29: Negative max_depth throws');

END;
$BODY$
LANGUAGE plpgsql;

SELECT types_check();
SELECT * FROM finish();
ROLLBACK;