File: trsp_tests.sql

package info (click to toggle)
pgrouting 4.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 17,676 kB
  • sloc: cpp: 21,494; sql: 14,113; ansic: 9,896; perl: 1,144; sh: 848; javascript: 314; xml: 182; makefile: 29
file content (77 lines) | stat: -rw-r--r-- 2,611 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
CREATE OR REPLACE FUNCTION compare_trsp_dijkstra_new(lim INTEGER, flag boolean, restrictions_sql TEXT)
RETURNS SETOF TEXT AS
$BODY$
DECLARE
  k INTEGER := 0;
  dijkstra_sql TEXT;
  trsp_sql TEXT;
  directed TEXT;
  params TEXT;
  msg TEXT;
BEGIN

  IF NOT min_version('3.4.0') THEN
    RETURN QUERY SELECT skip(1, 'New signatures on 3.4');
    RETURN;
  END IF;

  IF min_lib_version('4.0.0') and NOT min_version('3.6.0') THEN
    RETURN QUERY SELECT skip(1, 'Internal function __v4trsp deprecated on 3.5.0');
    RETURN;
  END IF;

  directed = 'Undirected';
  IF flag THEN directed = 'Directed'; END IF;

  FOR i IN 1..lim BY 2 LOOP
    FOR j IN 1..lim LOOP

      params = ' ' || i || ', ' || j || ', ' || flag;

      -- skipping results comparable with pgr_dijkstraVia
      IF (restrictions_sql = 'related' AND flag = true) THEN CONTINUE WHEN
            i IN (1,3,5,6,7) AND j IN (12,17);
      END IF;
      IF (restrictions_sql = 'related' AND flag = false) THEN CONTINUE WHEN
          (i=1 AND j IN (8,9,12,17)) OR
          (i=3 AND j IN (8,9,12,17)) OR
          (i IN (5,6) AND j IN (1,3)) OR
          (i=7 AND j IN (12,17));
      END IF;


      IF (restrictions_sql = 'related' AND (
        (flag = false AND (i IN (10,15) AND J IN (1,3))) OR
        (flag = true  AND (
            (i IN (5,6,10,15) AND J IN (1,3)) OR
            (i IN (5,6,7,8,9,11) AND J IN (10,15)) OR
            (i IN (10) AND J IN (15))
          ))
        ))
      THEN
        k := k + 1;
      ELSE
        dijkstra_sql := 'SELECT seq, node, edge FROM pgr_dijkstra($$with_reverse_cost$$, ' || params || ')';
        trsp_sql := 'SELECT seq, node, edge FROM pgr_trsp($$with_reverse_cost$$, $$' || restrictions_sql ||'$$, ' || params || ')';
        msg := restrictions_sql || '-' || params || '-reverse_cost ' || dijkstra_sql || '; ' || trsp_sql;
        RETURN QUERY SELECT set_eq(trsp_sql, dijkstra_sql, msg);
      END IF;

      IF (restrictions_sql = 'related' AND flag = false AND
          ((i IN (1,3,5,6,7,8,9,10,11,12) AND J = 15) OR (i IN (5,6) AND J IN (12,17)))
         )
          THEN
        k := k + 1;
      ELSE
        dijkstra_sql := 'SELECT seq, node, edge FROM pgr_dijkstra($$no_reverse_cost$$, ' || params || ')';
        trsp_sql := 'SELECT seq, node, edge from pgr_trsp($$no_reverse_cost$$, $$' || restrictions_sql ||'$$, ' || params || ')';
        msg := restrictions_sql || '-' || params || '-no_reverse_cost ' || dijkstra_sql || '; ' || trsp_sql;
        RETURN QUERY SELECT set_eq(trsp_sql, dijkstra_sql, msg);
      END IF;


    END LOOP;
  END LOOP;
END
$BODY$
language plpgsql;