*/
void Week::clear()
{
- Days.reset(); //lint !e534
+ Days.reset();
IsValid = true;
}
return IsValid;
}
- new_days.set(wnr); //lint !e534
+ new_days.set(wnr);
}
// Atomic switch-over
Days = new_days;
return IsValid;
}
- Days.set(static_cast<size_t>(day), value); //lint !e534
+ Days.set(static_cast<size_t>(day), value);
return IsValid;
}
{
string weekdays_str;
- // From Monday to Saturday
- int j = 0;
- for (int i = 1; i < 7; i++)
- {
- if (Days[i])
- {
- if (!weekdays_str.empty())
- weekdays_str += ", ";
-
- weekdays_str += get_day_display(static_cast<WeekDay>(i));
-
- // check if we can group two or more days
- j = i;
- while (Days[j] && j < 7)
- j++;
- j--;
-
- // Sunday end of week? j -> 7
- if (j-i > 0 && j == 6 && Days[0])
- j++;
-
- if (j-i > 1)
- {
- if (j == 7)
- weekdays_str += "-" + get_day_display(Su);
- else
- weekdays_str += "-" + get_day_display(static_cast<WeekDay>(j));
-
- i = j;
- }
- }
- }
+ // We want to display from Monday to Sunday so reorder
+ // the bitset and make monday bit 0 and sunday bit 6.
+ bitset<7> reordered = Days >> 1;
+ reordered.set(6, Days[0]);
- // special: sunday
- if (Days[0] && j != 7)
+ for (unsigned int i = 0; i < 7; ++i)
{
+ // day active?
+ if (!reordered.test(i))
+ continue;
+
if (!weekdays_str.empty())
weekdays_str += ", ";
- weekdays_str += get_day_display(Su);
- }
+ // get day string (revert the reorder)
+ weekdays_str += get_day_display(i == 6 ? Su : static_cast<WeekDay>(i+1));
+
+ // check if we can group two or more days
+ unsigned int group_days = i;
+ while (group_days < 6 && reordered.test(group_days+1))
+ group_days++;
+
+ // Were we able to group two or more days?
+ if (group_days > i+1)
+ {
+ i = group_days;
+ weekdays_str += "-" + get_day_display(i == 6 ? Su : static_cast<WeekDay>(i+1));
+ }
+ } /*lint --e(850) */
return weekdays_str;
}
using namespace std;
using namespace I2n;
+using namespace I2n::Time;
using namespace CppUnit;
namespace
CPPUNIT_TEST(MonotonicClock);
+ CPPUNIT_TEST(WeekInvalid);
+ CPPUNIT_TEST(WeekDisplayString1);
+ CPPUNIT_TEST(WeekDisplayString2);
+ CPPUNIT_TEST(WeekDisplayString3);
+ CPPUNIT_TEST(WeekDisplayString4);
+ CPPUNIT_TEST(WeekDisplayString5);
+ CPPUNIT_TEST(WeekDisplayString6);
+ CPPUNIT_TEST(WeekDisplayString7);
+ CPPUNIT_TEST(WeekDisplayString8);
+ CPPUNIT_TEST(WeekDisplayString9);
+ CPPUNIT_TEST(WeekDisplayString10);
+ CPPUNIT_TEST(WeekDisplayString11);
+ CPPUNIT_TEST(WeekDisplayString12);
+ CPPUNIT_TEST(WeekDisplayString13);
+
CPPUNIT_TEST_SUITE_END();
protected:
CPPUNIT_ASSERT( delta_millisec < 300 );
} // eo MonotonicClock()
+ void WeekInvalid()
+ {
+ Week week("99999999");
+ CPPUNIT_ASSERT_EQUAL(false, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string(""), week.get_displaystring());
+ }
+
+ void WeekDisplayString1()
+ {
+ Week week("");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string(""), week.get_displaystring());
+ }
+
+ void WeekDisplayString2()
+ {
+ Week week("0123456");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Mon-Sun"), week.get_displaystring());
+ }
+
+ void WeekDisplayString3()
+ {
+ Week week("123456");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Mon-Sat"), week.get_displaystring());
+ }
+
+ void WeekDisplayString4()
+ {
+ Week week("012345");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Mon-Fri, Sun"), week.get_displaystring());
+ }
+
+ void WeekDisplayString5()
+ {
+ Week week("1256");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Mon, Tue, Fri, Sat"), week.get_displaystring());
+ }
+
+ void WeekDisplayString6()
+ {
+ Week week("0246");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Tue, Thu, Sat, Sun"), week.get_displaystring());
+ }
-
-}; // eo class TestTimeFunc
+ void WeekDisplayString7()
+ {
+ Week week("135");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Mon, Wed, Fri"), week.get_displaystring());
+ }
+
+ void WeekDisplayString8()
+ {
+ Week week("15");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Mon, Fri"), week.get_displaystring());
+ }
+
+ void WeekDisplayString9()
+ {
+ Week week("06");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Sat, Sun"), week.get_displaystring());
+ }
+
+ void WeekDisplayString10()
+ {
+ Week week("056");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Fri-Sun"), week.get_displaystring());
+ }
+
+ void WeekDisplayString11()
+ {
+ Week week("0");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Sun"), week.get_displaystring());
+ }
+
+ void WeekDisplayString12()
+ {
+ Week week("6");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Sat"), week.get_displaystring());
+ }
+
+ void WeekDisplayString13()
+ {
+ Week week("123");
+ CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
+ CPPUNIT_ASSERT_EQUAL(string("Mon-Wed"), week.get_displaystring());
+ }
+};
CPPUNIT_TEST_SUITE_REGISTRATION(TestTimeFunc);