File: traversal.sql

package info (click to toggle)
h3-pg 4.2.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,196 kB
  • sloc: sql: 4,469; ansic: 3,497; python: 322; sh: 56; makefile: 18
file content (76 lines) | stat: -rw-r--r-- 2,062 bytes parent folder | download | duplicates (3)
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
\pset tuples_only on
\set hexagon '\'880326b88dfffff\''
\set origin '\'880326b887fffff\''
\set pentagon '\'831c00fffffffff\''

--
-- TEST h3_grid_disk and h3_grid_ring_unsafe
--

-- gridDisk 0 is input index

SELECT h3_grid_disk(:hexagon, 0) = :hexagon;

-- gridDisk 2 is same as sum of gridRing 0, 1 and 2

SELECT array_agg(r) is null FROM (
    SELECT h3_grid_disk(:hexagon, 2) r
    EXCEPT (
        SELECT h3_grid_ring_unsafe(:hexagon, 0) r
        UNION SELECT h3_grid_ring_unsafe(:hexagon, 1) r
        UNION SELECT h3_grid_ring_unsafe(:hexagon, 2) r
    )
) q;

--
-- TEST h3_grid_disk_distances
--

-- correct number of indexes at distances 0, 1 and 2 for k=2
SELECT COUNT(index) filter (WHERE distance = 0) = 1
AND COUNT(index) filter (WHERE distance = 1) = 6
AND COUNT(index) filter (WHERE distance = 2) = 12
FROM (
    SELECT index, distance FROM h3_grid_disk_distances(:hexagon, 2)
) q;

-- same for pentagon
SELECT COUNT(index) filter (WHERE distance = 0) = 1
AND COUNT(index) filter (WHERE distance = 1) = 5
AND COUNT(index) filter (WHERE distance = 2) = 10
FROM (
    SELECT index, distance FROM h3_grid_disk_distances(:pentagon, 2)
) q;

--
-- TEST h3_grid_path_cells
--

SELECT ARRAY(SELECT h3_grid_path_cells('841c023ffffffff', '841c025ffffffff'))
    = ARRAY['841c023ffffffff','841c027ffffffff','841c025ffffffff']::h3index[];

--
-- TEST h3_grid_distance
--

-- returns 1 for indexes with one index between them
SELECT h3_grid_distance('880326b881fffff', '880326b885fffff') = 1;

-- throws for invalid inputs
CREATE FUNCTION h3_test_grid_distance_invalid() RETURNS boolean LANGUAGE PLPGSQL
    AS $$
        BEGIN
            PERFORM h3_grid_distance('880326b881fffff', h3_cell_to_parent('880326b885fffff')) = -1;
            RETURN false;
        EXCEPTION WHEN OTHERS THEN
            RETURN true;
        END;
    $$;
SELECT h3_test_grid_distance_invalid();

--
-- TEST h3_cell_to_local_ij and h3_local_ij_to_cell
--

-- they are inverse of each others
SELECT :hexagon = h3_local_ij_to_cell(:origin, h3_cell_to_local_ij(:origin, :hexagon));