diff --git a/Makefile b/Makefile index c1ed909..2b6b965 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ EXTENSION = pgtfs DATA = pgtfs--0.0.1.sql MODULE_big = pgtfs OBJS = pgtfs.o src/models/network.o src/csa/csa.o -REGRESS=pgtfs_test +REGRESS= pgtfs_test network_edge_cases_test REGRESS_OPTS= --user=postgres PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/expected/network_edge_cases_test.out b/expected/network_edge_cases_test.out new file mode 100644 index 0000000..132b07a --- /dev/null +++ b/expected/network_edge_cases_test.out @@ -0,0 +1,130 @@ +-- SPDX-FileCopyrightText: © 2024 Adrian C. Prelipcean +-- +-- SPDX-License-Identifier: EUPL-1.2 +create extension if not exists pgtfs; +NOTICE: extension "pgtfs" already exists, skipping +-- wrong trip id type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id::int, + stop_id, + arrival_time::double precision, + departure_time::double precision, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); +ERROR: Expected text for trip ID, got integer +-- wrong stop id type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id::int, + arrival_time::double precision, + departure_time::double precision, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); +ERROR: Expected text for stop ID, got integer +-- wrong arrival time type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id, + arrival_time::numeric, + departure_time::double precision, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); +ERROR: Expected float8 for arrival time, got numeric +-- wrong departure time type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id, + arrival_time::double precision, + departure_time::numeric, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); +ERROR: Expected float8 for departure time, got numeric +-- wrong stop sequence type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id, + arrival_time::double precision, + departure_time::double precision, + stop_sequence::text from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); +ERROR: Expected integer for stop sequence, got text diff --git a/expected/network_edge_cases_test.out.license b/expected/network_edge_cases_test.out.license new file mode 100644 index 0000000..718426b --- /dev/null +++ b/expected/network_edge_cases_test.out.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: © 2024 Adrian C. Prelipcean + +SPDX-License-Identifier: EUPL-1.2 diff --git a/sql/network_edge_cases_test.sql b/sql/network_edge_cases_test.sql new file mode 100644 index 0000000..ece6b38 --- /dev/null +++ b/sql/network_edge_cases_test.sql @@ -0,0 +1,130 @@ +-- SPDX-FileCopyrightText: © 2024 Adrian C. Prelipcean +-- +-- SPDX-License-Identifier: EUPL-1.2 + +create extension if not exists pgtfs; + +-- wrong trip id type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id::int, + stop_id, + arrival_time::double precision, + departure_time::double precision, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); + +-- wrong stop id type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id::int, + arrival_time::double precision, + departure_time::double precision, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); + +-- wrong arrival time type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id, + arrival_time::numeric, + departure_time::double precision, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); + +-- wrong departure time type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id, + arrival_time::double precision, + departure_time::numeric, + stop_sequence::int from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +); + +-- wrong stop sequence type +select + stop_id, + stop_sequence, + arrival_time, + trip_id +from pgtfs_csa( + '1', '2', 1712707200.0, + $$ +select + trip_id, + stop_id, + arrival_time::double precision, + departure_time::double precision, + stop_sequence::text from ( + values + ('1753','1',NULL,1712757660,1), + ('1753','2',1712759880,1712759940,2), + ('1753','3',1712762040,1712762100,3), + ('1753','4',1712762100,NULL,4) + ) + as data (trip_id, stop_id, arrival_time, departure_time, stop_sequence); +$$ +);