Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/just_gtfs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlga Khlopkova <o.khlopkova@corp.mail.ru>2020-04-27 16:14:07 +0300
committerOlga Khlopkova <o.khlopkova@corp.mail.ru>2020-04-27 16:14:07 +0300
commit521d2b76ad8b78fcf60009fe97bb235c44561933 (patch)
tree7d9beacf78d3a1d7b734e62a0a4f7998c498d425
parent083d98e4315574a4d556d3fc8184c71ae1234ef9 (diff)
fix for frequencies
-rw-r--r--include/just_gtfs/just_gtfs.h21
-rw-r--r--tests/unit_tests.cpp52
2 files changed, 61 insertions, 12 deletions
diff --git a/include/just_gtfs/just_gtfs.h b/include/just_gtfs/just_gtfs.h
index 3817c5e..c13f22f 100644
--- a/include/just_gtfs/just_gtfs.h
+++ b/include/just_gtfs/just_gtfs.h
@@ -977,7 +977,7 @@ public:
inline Result read_frequencies();
inline const Frequencies & get_frequencies() const;
- inline std::optional<Frequency> get_frequency(const Id & trip_id) const;
+ inline Frequencies get_frequencies(const Id & trip_id) const;
inline void add_frequency(const Frequency & frequency);
inline Result read_transfers();
@@ -1697,7 +1697,7 @@ inline const CalendarDates & Feed::get_calendar_dates() const { return calendar_
inline CalendarDates Feed::get_calendar_dates(const Id & service_id, bool sort_by_date) const
{
- std::vector<CalendarDate> res;
+ CalendarDates res;
for (const auto & calendar_date : calendar_dates)
{
if (calendar_date.service_id == service_id)
@@ -1776,16 +1776,15 @@ inline Result Feed::read_frequencies()
inline const Frequencies & Feed::get_frequencies() const { return frequencies; }
-inline std::optional<Frequency> Feed::get_frequency(const Id & trip_id) const
+inline Frequencies Feed::get_frequencies(const Id & trip_id) const
{
- const auto it = std::find_if(
- frequencies.begin(), frequencies.end(),
- [&trip_id](const Frequency & frequency) { return frequency.trip_id == trip_id; });
-
- if (it == frequencies.end())
- return std::nullopt;
-
- return *it;
+ Frequencies res;
+ for (const auto & frequency : frequencies)
+ {
+ if (frequency.trip_id == trip_id)
+ res.push_back(frequency);
+ }
+ return res;
}
inline void Feed::add_frequency(const Frequency & frequency) { frequencies.push_back(frequency); }
diff --git a/tests/unit_tests.cpp b/tests/unit_tests.cpp
index 629974a..bd678c0 100644
--- a/tests/unit_tests.cpp
+++ b/tests/unit_tests.cpp
@@ -223,7 +223,7 @@ TEST_CASE("Read GTFS feed")
CHECK_EQ(feed.get_stop_times().size(), 28);
}
-TEST_CASE("Agencies")
+TEST_CASE("Agency")
{
Feed feed("data/sample_feed");
auto res = feed.read_agencies();
@@ -342,4 +342,54 @@ TEST_CASE("Shapes")
auto const shape = feed.get_shape("10237");
CHECK_EQ(shape.size(), 4);
}
+
+TEST_CASE("Calendar")
+{
+ Feed feed("data/sample_feed");
+ auto res = feed.read_calendar();
+ CHECK_EQ(res.code, ResultCode::OK);
+
+ const auto & calendar = feed.get_calendar();
+ CHECK_EQ(calendar.size(), 2);
+ CHECK_EQ(calendar[0].service_id, "FULLW");
+ CHECK_EQ(calendar[0].start_date, Date(2007, 01, 01));
+ CHECK_EQ(calendar[0].end_date, Date(2010, 12, 31));
+ CHECK_EQ(calendar[0].monday, CalendarAvailability::Available);
+ CHECK_EQ(calendar[0].sunday, CalendarAvailability::Available);
+
+ auto calendar_for_service = feed.get_calendar("FULLW");
+ CHECK(calendar_for_service);
+}
+
+TEST_CASE("Calendar dates")
+{
+ Feed feed("data/sample_feed");
+ auto res = feed.read_calendar_dates();
+ CHECK_EQ(res.code, ResultCode::OK);
+
+ const auto & calendar_dates = feed.get_calendar_dates();
+ CHECK_EQ(calendar_dates.size(), 1);
+ CHECK_EQ(calendar_dates[0].service_id, "FULLW");
+ CHECK_EQ(calendar_dates[0].date, Date(2007, 06, 04));
+ CHECK_EQ(calendar_dates[0].exception_type, CalendarDateException::Removed);
+
+ auto calendar_dates_for_service = feed.get_calendar_dates("FULLW");
+ CHECK_EQ(calendar_dates_for_service.size(), 1);
+}
+
+TEST_CASE("Frequencies")
+{
+ Feed feed("data/sample_feed");
+ auto res = feed.read_frequencies();
+ CHECK_EQ(res.code, ResultCode::OK);
+
+ const auto & frequencies = feed.get_frequencies();
+ CHECK_EQ(frequencies.size(), 11);
+ CHECK_EQ(frequencies[0].trip_id, "STBA");
+ CHECK_EQ(frequencies[0].start_time, Time(6, 00, 00));
+ CHECK_EQ(frequencies[0].end_time, Time(22, 00, 00));
+ CHECK_EQ(frequencies[0].headway_secs, 1800);
+ auto const frequencies_for_trip = feed.get_frequencies("CITY1");
+ CHECK_EQ(frequencies_for_trip.size(), 5);
+}
TEST_SUITE_END();