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

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/3party
diff options
context:
space:
mode:
authorSergey Magidovich <mgsergio@mapswithme.com>2016-06-07 14:22:24 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-06-23 18:58:28 +0300
commit0ace7df8390afe16e42162d97463b04511d6783b (patch)
treec57a1e29d059da52e2e2fe250bfcb196a19422ef /3party
parentc50413ea557f9eae44d5d171171036f6b81892ff (diff)
Open end is now handled.
Diffstat (limited to '3party')
-rw-r--r--3party/opening_hours/opening_hours.cpp9
-rw-r--r--3party/opening_hours/opening_hours.hpp2
-rw-r--r--3party/opening_hours/opening_hours_tests/opening_hours_tests.cpp26
-rw-r--r--3party/opening_hours/rules_evaluation.cpp4
-rw-r--r--3party/opening_hours/rules_evaluation_private.hpp2
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);