ISO8601: Added ::monthOfYear and tests

This commit is contained in:
Paul Beckingham 2015-09-26 14:47:08 -04:00
parent f26cff9a4a
commit ff320345e9
3 changed files with 50 additions and 11 deletions

View file

@ -827,6 +827,7 @@ int ISO8601d::daysInYear (int year)
}
////////////////////////////////////////////////////////////////////////////////
// Static
std::string ISO8601d::monthName (int month)
{
static const char* months[12] =
@ -851,6 +852,7 @@ std::string ISO8601d::monthName (int month)
}
////////////////////////////////////////////////////////////////////////////////
// Static
void ISO8601d::dayName (int dow, std::string& name)
{
static const char* days[7] =
@ -868,6 +870,7 @@ void ISO8601d::dayName (int dow, std::string& name)
}
////////////////////////////////////////////////////////////////////////////////
// Static
std::string ISO8601d::dayName (int dow)
{
static const char* days[7] =
@ -889,15 +892,38 @@ std::string ISO8601d::dayName (int dow)
int ISO8601d::dayOfWeek (const std::string& input)
{
if (ISO8601d::minimumMatchLength== 0)
minimumMatchLength= 3;
ISO8601d::minimumMatchLength= 3;
if (closeEnough (STRING_DATE_SUNDAY, input, minimumMatchLength)) return 0;
else if (closeEnough (STRING_DATE_MONDAY, input, minimumMatchLength)) return 1;
else if (closeEnough (STRING_DATE_TUESDAY, input, minimumMatchLength)) return 2;
else if (closeEnough (STRING_DATE_WEDNESDAY, input, minimumMatchLength)) return 3;
else if (closeEnough (STRING_DATE_THURSDAY, input, minimumMatchLength)) return 4;
else if (closeEnough (STRING_DATE_FRIDAY, input, minimumMatchLength)) return 5;
else if (closeEnough (STRING_DATE_SATURDAY, input, minimumMatchLength)) return 6;
if (closeEnough (STRING_DATE_SUNDAY, input, ISO8601d::minimumMatchLength)) return 0;
else if (closeEnough (STRING_DATE_MONDAY, input, ISO8601d::minimumMatchLength)) return 1;
else if (closeEnough (STRING_DATE_TUESDAY, input, ISO8601d::minimumMatchLength)) return 2;
else if (closeEnough (STRING_DATE_WEDNESDAY, input, ISO8601d::minimumMatchLength)) return 3;
else if (closeEnough (STRING_DATE_THURSDAY, input, ISO8601d::minimumMatchLength)) return 4;
else if (closeEnough (STRING_DATE_FRIDAY, input, ISO8601d::minimumMatchLength)) return 5;
else if (closeEnough (STRING_DATE_SATURDAY, input, ISO8601d::minimumMatchLength)) return 6;
return -1;
}
////////////////////////////////////////////////////////////////////////////////
// Static
int ISO8601d::monthOfYear (const std::string& input)
{
if (ISO8601d::minimumMatchLength== 0)
ISO8601d::minimumMatchLength= 3;
if (closeEnough (STRING_DATE_JANUARY, input, ISO8601d::minimumMatchLength)) return 1;
else if (closeEnough (STRING_DATE_FEBRUARY, input, ISO8601d::minimumMatchLength)) return 2;
else if (closeEnough (STRING_DATE_MARCH, input, ISO8601d::minimumMatchLength)) return 3;
else if (closeEnough (STRING_DATE_APRIL, input, ISO8601d::minimumMatchLength)) return 4;
else if (closeEnough (STRING_DATE_MAY, input, ISO8601d::minimumMatchLength)) return 5;
else if (closeEnough (STRING_DATE_JUNE, input, ISO8601d::minimumMatchLength)) return 6;
else if (closeEnough (STRING_DATE_JULY, input, ISO8601d::minimumMatchLength)) return 7;
else if (closeEnough (STRING_DATE_AUGUST, input, ISO8601d::minimumMatchLength)) return 8;
else if (closeEnough (STRING_DATE_SEPTEMBER, input, ISO8601d::minimumMatchLength)) return 9;
else if (closeEnough (STRING_DATE_OCTOBER, input, ISO8601d::minimumMatchLength)) return 10;
else if (closeEnough (STRING_DATE_NOVEMBER, input, ISO8601d::minimumMatchLength)) return 11;
else if (closeEnough (STRING_DATE_DECEMBER, input, ISO8601d::minimumMatchLength)) return 12;
return -1;
}

View file

@ -50,9 +50,8 @@ public:
static std::string monthName (int);
static void dayName (int, std::string&);
static std::string dayName (int);
static int dayOfWeek (const std::string&);
static int monthOfYear (const std::string&);
static int length (const std::string&);
int month () const;

View file

@ -71,7 +71,7 @@ void testParse (
////////////////////////////////////////////////////////////////////////////////
int main (int argc, char** argv)
{
UnitTest t (815);
UnitTest t (827);
ISO8601d iso;
std::string::size_type start = 0;
@ -246,6 +246,20 @@ int main (int argc, char** argv)
t.is (ISO8601d::monthName (11), "November", "11 = November");
t.is (ISO8601d::monthName (12), "December", "12 = December");
// Names.
t.is (ISO8601d::monthOfYear ("January"), 1, "January = 1");
t.is (ISO8601d::monthOfYear ("February"), 2, "February = 2");
t.is (ISO8601d::monthOfYear ("March"), 3, "March = 3");
t.is (ISO8601d::monthOfYear ("April"), 4, "April = 4");
t.is (ISO8601d::monthOfYear ("May"), 5, "May = 5");
t.is (ISO8601d::monthOfYear ("June"), 6, "June = 6");
t.is (ISO8601d::monthOfYear ("July"), 7, "July = 7");
t.is (ISO8601d::monthOfYear ("August"), 8, "August = 8");
t.is (ISO8601d::monthOfYear ("September"), 9, "September = 9");
t.is (ISO8601d::monthOfYear ("October"), 10, "October = 10");
t.is (ISO8601d::monthOfYear ("November"), 11, "November = 11");
t.is (ISO8601d::monthOfYear ("December"), 12, "December = 12");
t.is (ISO8601d::dayName (0), "Sunday", "0 == Sunday");
t.is (ISO8601d::dayName (1), "Monday", "1 == Monday");
t.is (ISO8601d::dayName (2), "Tuesday", "2 == Tuesday");