From ff320345e93505b7c5854f5bd6f15f234dfa02d1 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sat, 26 Sep 2015 14:47:08 -0400 Subject: [PATCH] ISO8601: Added ::monthOfYear and tests --- src/ISO8601.cpp | 42 ++++++++++++++++++++++++++++++++++-------- src/ISO8601.h | 3 +-- test/iso8601d.t.cpp | 16 +++++++++++++++- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/src/ISO8601.cpp b/src/ISO8601.cpp index a3e2cbd3d..ee7da3b87 100644 --- a/src/ISO8601.cpp +++ b/src/ISO8601.cpp @@ -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; } diff --git a/src/ISO8601.h b/src/ISO8601.h index 45027d06d..e407e5603 100644 --- a/src/ISO8601.h +++ b/src/ISO8601.h @@ -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; diff --git a/test/iso8601d.t.cpp b/test/iso8601d.t.cpp index b3023af7e..1211fb5f9 100644 --- a/test/iso8601d.t.cpp +++ b/test/iso8601d.t.cpp @@ -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");