forked from pgRouting/GSoC-pgRouting
-
Notifications
You must be signed in to change notification settings - Fork 0
/
binaryBreadthFirstSearch-compare-dijkstra.sql
73 lines (49 loc) · 2.82 KB
/
binaryBreadthFirstSearch-compare-dijkstra.sql
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
\i setup.sql
SELECT plan(1156);
SET client_min_messages TO ERROR;
-- Compare final row of result (Only final row due to existence of multiple valid paths)
CREATE or REPLACE FUNCTION binaryBreadthFirstSearch_compare_dijkstra(MAX_LIMIT INTEGER default 17)
RETURNS SETOF TEXT AS
$BODY$
DECLARE
inner_sql TEXT;
dijkstra_sql TEXT;
binaryBreadthFirstSearch TEXT;
BEGIN
FOR i IN 1.. MAX_LIMIT LOOP
FOR j IN 1.. MAX_LIMIT LOOP
-- DIRECTED
inner_sql := 'SELECT id, source, target, road_work as cost, reverse_road_work as reverse_cost FROM roadworks';
dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', true) ORDER BY seq DESC LIMIT 1';
binaryBreadthFirstSearch := 'SELECT * FROM pgr_binaryBreadthFirstSearch($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', true) ORDER BY seq DESC LIMIT 1';
RETURN query SELECT set_eq(binaryBreadthFirstSearch, dijkstra_sql, binaryBreadthFirstSearch);
inner_sql := 'SELECT id, source, target, road_work as cost FROM roadworks';
dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', true) ORDER BY seq DESC LIMIT 1';
binaryBreadthFirstSearch := 'SELECT * FROM pgr_binaryBreadthFirstSearch($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', true) ORDER BY seq DESC LIMIT 1';
RETURN query SELECT set_eq(binaryBreadthFirstSearch, dijkstra_sql, binaryBreadthFirstSearch);
-- UNDIRECTED
inner_sql := 'SELECT id, source, target, road_work as cost, reverse_road_work as reverse_cost FROM roadworks';
dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', false) ORDER BY seq DESC LIMIT 1';
binaryBreadthFirstSearch := 'SELECT * FROM pgr_binaryBreadthFirstSearch($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', false) ORDER BY seq DESC LIMIT 1';
RETURN query SELECT set_eq(binaryBreadthFirstSearch, dijkstra_sql, binaryBreadthFirstSearch);
inner_sql := 'SELECT id, source, target, road_work as cost FROM roadworks';
dijkstra_sql := 'SELECT * FROM pgr_dijkstra($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', false) ORDER BY seq DESC LIMIT 1';
binaryBreadthFirstSearch := 'SELECT * FROM pgr_binaryBreadthFirstSearch($$' || inner_sql || '$$, ' || i || ', ' || j
|| ', false) ORDER BY seq DESC LIMIT 1';
RETURN query SELECT set_eq(binaryBreadthFirstSearch, dijkstra_sql, binaryBreadthFirstSearch);
END LOOP;
END LOOP;
RETURN;
END
$BODY$
language plpgsql;
SELECT * from binaryBreadthFirstSearch_compare_dijkstra();
SELECT * FROM finish();
ROLLBACK;