Fixing bug in Schedule:solve problems when black repetitive interval list is empty
Change-Id: I508c47cf014700bd1ee01eec4e97cd9bc05e83a7
diff --git a/tests/unit-tests/schedule.t.cpp b/tests/unit-tests/schedule.t.cpp
index 22f2a10..0fb6c3f 100644
--- a/tests/unit-tests/schedule.t.cpp
+++ b/tests/unit-tests/schedule.t.cpp
@@ -30,10 +30,9 @@
BOOST_AUTO_TEST_SUITE(TestSchedule)
-BOOST_AUTO_TEST_CASE(CalculateCoveringInterval)
+BOOST_AUTO_TEST_CASE(CalIntervalWithBlackAndWhite)
{
Schedule schedule;
-
RepetitiveInterval interval1(from_iso_string("20150825T000000"),
from_iso_string("20150827T000000"),
5, 10, 2, RepetitiveInterval::RepeatUnit::DAY);
@@ -100,6 +99,97 @@
BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T000000");
}
+BOOST_AUTO_TEST_CASE(CalIntervalWithoutBlack)
+{
+ Schedule schedule;
+ RepetitiveInterval interval1(from_iso_string("20150825T000000"),
+ from_iso_string("20150827T000000"),
+ 5, 10, 2, RepetitiveInterval::RepeatUnit::DAY);
+ RepetitiveInterval interval2(from_iso_string("20150825T000000"),
+ from_iso_string("20150827T000000"),
+ 6, 8, 1, RepetitiveInterval::RepeatUnit::DAY);
+ RepetitiveInterval interval3(from_iso_string("20150825T000000"),
+ from_iso_string("20150825T000000"),
+ 4, 7);
+
+ schedule.addWhiteInterval(interval1);
+ schedule.addWhiteInterval(interval2);
+ schedule.addWhiteInterval(interval3);
+
+ Interval resultInterval;
+ bool isPositive;
+
+ // tp1 --> positive 8.25 4-10
+ TimeStamp tp1 = from_iso_string("20150825T063000");
+ std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp1);
+ BOOST_CHECK_EQUAL(isPositive, true);
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T040000");
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T100000");
+
+ // tp2 --> positive 8.26 6-8
+ TimeStamp tp2 = from_iso_string("20150826T073000");
+ std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp2);
+ BOOST_CHECK_EQUAL(isPositive, true);
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150826T060000");
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T080000");
+
+ // tp3 --> positive 8.27 5-10
+ TimeStamp tp3 = from_iso_string("20150827T053000");
+ std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp3);
+ BOOST_CHECK_EQUAL(isPositive, true);
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150827T050000");
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150827T100000");
+
+ // tp4 --> negative 8.25 10-24
+ TimeStamp tp4 = from_iso_string("20150825T113000");
+ std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp4);
+ BOOST_CHECK_EQUAL(isPositive, false);
+ BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T100000");
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T000000");
+
+ // tp5 --> negative 8.25 0-4
+ TimeStamp tp5 = from_iso_string("20150825T013000");
+ std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp5);
+ BOOST_CHECK_EQUAL(isPositive, false);
+ BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T000000");
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T040000");
+}
+
+BOOST_AUTO_TEST_CASE(CalIntervalWithoutWhite)
+{
+ Schedule schedule;
+ RepetitiveInterval interval1(from_iso_string("20150825T000000"),
+ from_iso_string("20150827T000000"),
+ 5, 10, 2, RepetitiveInterval::RepeatUnit::DAY);
+ RepetitiveInterval interval2(from_iso_string("20150825T000000"),
+ from_iso_string("20150827T000000"),
+ 6, 8, 1, RepetitiveInterval::RepeatUnit::DAY);
+
+ schedule.addBlackInterval(interval1);
+ schedule.addBlackInterval(interval2);
+
+ Interval resultInterval;
+ bool isPositive;
+
+ // tp1 --> negative 8.25 4-10
+ TimeStamp tp1 = from_iso_string("20150825T063000");
+ std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp1);
+ BOOST_CHECK_EQUAL(isPositive, false);
+ BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T050000");
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T100000");
+
+ // tp2 --> negative 8.25 0-4
+ TimeStamp tp2 = from_iso_string("20150825T013000");
+ std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp2);
+ BOOST_CHECK_EQUAL(isPositive, false);
+ BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T000000");
+ BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T000000");
+}
+
const uint8_t SCHEDULE[] = {
0x8f, 0xc4,// Schedule
0x8d, 0x90,// WhiteIntervalList