diff options
author | Sergey Magidovich <mgsergio@mapswithme.com> | 2016-06-07 14:22:24 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-23 18:58:28 +0300 |
commit | 0ace7df8390afe16e42162d97463b04511d6783b (patch) | |
tree | c57a1e29d059da52e2e2fe250bfcb196a19422ef /3party | |
parent | c50413ea557f9eae44d5d171171036f6b81892ff (diff) |
Open end is now handled.
Diffstat (limited to '3party')
-rw-r--r-- | 3party/opening_hours/opening_hours.cpp | 9 | ||||
-rw-r--r-- | 3party/opening_hours/opening_hours.hpp | 2 | ||||
-rw-r--r-- | 3party/opening_hours/opening_hours_tests/opening_hours_tests.cpp | 26 | ||||
-rw-r--r-- | 3party/opening_hours/rules_evaluation.cpp | 4 | ||||
-rw-r--r-- | 3party/opening_hours/rules_evaluation_private.hpp | 2 |
5 files changed, 38 insertions, 5 deletions
diff --git a/3party/opening_hours/opening_hours.cpp b/3party/opening_hours/opening_hours.cpp index ea603b43fc..c673d9fc6f 100644 --- a/3party/opening_hours/opening_hours.cpp +++ b/3party/opening_hours/opening_hours.cpp @@ -321,6 +321,14 @@ bool Timespan::HasExtendedHours() const return endHM.GetDuration() <= startHM.GetDuration(); } +void Timespan::ExpandPlus() +{ + if (HasPlus()) + { + SetEnd(HourMinutes(24_h)); + } +} + std::ostream & operator<<(std::ostream & ost, Timespan const & span) { ost << span.GetStart(); @@ -768,6 +776,7 @@ bool OpeningHours::IsValid() const { return m_valid; } + bool OpeningHours::IsTwentyFourHours() const { return m_rule.size() == 1 && m_rule[0].IsTwentyFourHours(); diff --git a/3party/opening_hours/opening_hours.hpp b/3party/opening_hours/opening_hours.hpp index 20f17d86ce..83d0ff3d83 100644 --- a/3party/opening_hours/opening_hours.hpp +++ b/3party/opening_hours/opening_hours.hpp @@ -231,6 +231,8 @@ public: void SetPeriod(TimespanPeriod const & period) { m_period = period; } void SetPlus(bool const plus) { m_plus = plus; } + void ExpandPlus(); + private: Time m_start; Time m_end; diff --git a/3party/opening_hours/opening_hours_tests/opening_hours_tests.cpp b/3party/opening_hours/opening_hours_tests/opening_hours_tests.cpp index 00e4f54f02..d59b7ba6a9 100644 --- a/3party/opening_hours/opening_hours_tests/opening_hours_tests.cpp +++ b/3party/opening_hours/opening_hours_tests/opening_hours_tests.cpp @@ -1499,9 +1499,8 @@ BOOST_AUTO_TEST_CASE(OpeningHours_TestIsOpen) BOOST_CHECK(Parse("06:13-15:00; 16:30+", rules)); BOOST_CHECK(IsOpen(rules, "2013-12-12 7:00")); + BOOST_CHECK(IsOpen(rules, "2013-12-12 20:00")); BOOST_CHECK(IsClosed(rules, "2013-12-12 16:00")); - /// Open end is not supported yet, so evaluate to close - BOOST_CHECK(IsClosed(rules, "2013-12-12 20:00")); } { TRuleSequences rules; @@ -1533,6 +1532,15 @@ BOOST_AUTO_TEST_CASE(OpeningHours_TestIsOpen) BOOST_CHECK(IsClosed(rules, "2015-04-12 14:15")); BOOST_CHECK(IsClosed(rules, "2016-04-12 20:15")); } + { + TRuleSequences rules; + BOOST_CHECK(Parse("Mo-Th 15:00+; Fr-Su 13:00+", rules)); + + BOOST_CHECK(!IsOpen(rules, "2016-06-06 13:14")); + BOOST_CHECK(IsOpen(rules, "2016-06-06 17:06")); + BOOST_CHECK(IsOpen(rules, "2016-06-05 13:06")); + BOOST_CHECK(IsOpen(rules, "2016-05-31 18:28")); + } } @@ -1563,4 +1571,18 @@ BOOST_AUTO_TEST_CASE(OpeningHours_TestOpeningHours) OpeningHours oh("Nov +1"); BOOST_CHECK(!oh.IsValid()); } + { + OpeningHours oh("Mo-Th 15:00+; Fr-Su 13:00+"); + BOOST_CHECK(oh.IsValid()); + + std::tm time = {}; + BOOST_CHECK(GetTimeTuple("2016-05-31 18:28", fmt, time)); + BOOST_CHECK(oh.IsOpen(mktime(&time))); + + BOOST_CHECK(GetTimeTuple("2016-05-31 22:28", fmt, time)); + BOOST_CHECK(oh.IsOpen(mktime(&time))); + + BOOST_CHECK(GetTimeTuple("2016-05-31 10:30", fmt, time)); + BOOST_CHECK(oh.IsClosed(mktime(&time))); + } } diff --git a/3party/opening_hours/rules_evaluation.cpp b/3party/opening_hours/rules_evaluation.cpp index 3762b8360d..7fdac0f3e9 100644 --- a/3party/opening_hours/rules_evaluation.cpp +++ b/3party/opening_hours/rules_evaluation.cpp @@ -190,12 +190,13 @@ namespace osmoh // ADL shadows ::operator==. using ::operator==; -bool IsActive(Timespan const & span, std::tm const & time) +bool IsActive(Timespan span, std::tm const & time) { // Timespan with e.h. should be split into parts with no e.h. // before calling IsActive(). // TODO(mgsergio): set assert(!span.HasExtendedHours()) + span.ExpandPlus(); if (span.HasStart() && span.HasEnd()) { THourMinutes start; @@ -331,7 +332,6 @@ bool IsActive(RuleSequence const & rule, time_t const timestamp) if (checkIsActive(rule, dateTimeTMShifted) && IsActive(additionalSpan, dateTimeTMShifted)) - { return true; } diff --git a/3party/opening_hours/rules_evaluation_private.hpp b/3party/opening_hours/rules_evaluation_private.hpp index 37329574ea..a5a15ef9a7 100644 --- a/3party/opening_hours/rules_evaluation_private.hpp +++ b/3party/opening_hours/rules_evaluation_private.hpp @@ -6,7 +6,7 @@ namespace osmoh { -bool IsActive(Timespan const & spsn, std::tm const & date); +bool IsActive(Timespan span, std::tm const & date); bool IsActive(WeekdayRange const & range, std::tm const & date); bool IsActive(Holiday const & holiday, std::tm const & date); bool IsActive(Weekdays const & weekdays, std::tm const & date); |