diff options
Diffstat (limited to 'src/mongo/util/time_support_test.cpp')
-rw-r--r-- | src/mongo/util/time_support_test.cpp | 1287 |
1 files changed, 641 insertions, 646 deletions
diff --git a/src/mongo/util/time_support_test.cpp b/src/mongo/util/time_support_test.cpp index 22a97acaf13..dfdd01863cb 100644 --- a/src/mongo/util/time_support_test.cpp +++ b/src/mongo/util/time_support_test.cpp @@ -39,800 +39,795 @@ namespace mongo { namespace { - const bool isTimeTSmall = - (sizeof(time_t) == sizeof(int32_t)) && std::numeric_limits<time_t>::is_signed; +const bool isTimeTSmall = + (sizeof(time_t) == sizeof(int32_t)) && std::numeric_limits<time_t>::is_signed; - /** - * To make this test deterministic, we set the time zone to America/New_York. - */ +/** + * To make this test deterministic, we set the time zone to America/New_York. + */ #ifdef _WIN32 - char tzEnvString[] = "TZ=EST+5EDT"; +char tzEnvString[] = "TZ=EST+5EDT"; #else - char tzEnvString[] = "TZ=America/New_York"; +char tzEnvString[] = "TZ=America/New_York"; #endif - MONGO_INITIALIZER(SetTimeZoneToEasternForTest)(InitializerContext*) { - if (-1 == putenv(tzEnvString)) { - return Status(ErrorCodes::BadValue, errnoWithDescription()); - } - tzset(); - return Status::OK(); - } - - TEST(TimeFormatting, DateAsISO8601UTCString) { - ASSERT_EQUALS(std::string("1970-01-01T00:00:00.000Z"), - dateToISOStringUTC(Date_t())); - ASSERT_EQUALS(std::string("1970-06-30T01:06:40.981Z"), - dateToISOStringUTC(Date_t::fromMillisSinceEpoch(15556000981LL))); - if (!isTimeTSmall) - ASSERT_EQUALS(std::string("2058-02-20T18:29:11.100Z"), - dateToISOStringUTC(Date_t::fromMillisSinceEpoch(2781455351100LL))); - ASSERT_EQUALS(std::string("2013-02-20T18:29:11.100Z"), - dateToISOStringUTC(Date_t::fromMillisSinceEpoch(1361384951100LL))); - } - - TEST(TimeFormatting, DateAsISO8601LocalString) { - ASSERT_EQUALS(std::string("1969-12-31T19:00:00.000-0500"), - dateToISOStringLocal(Date_t())); - ASSERT_EQUALS(std::string("1970-06-29T21:06:40.981-0400"), - dateToISOStringLocal(Date_t::fromMillisSinceEpoch(15556000981LL))); - if (!isTimeTSmall) - ASSERT_EQUALS(std::string("2058-02-20T13:29:11.100-0500"), - dateToISOStringLocal(Date_t::fromMillisSinceEpoch(2781455351100LL))); - ASSERT_EQUALS(std::string("2013-02-20T13:29:11.100-0500"), - dateToISOStringLocal(Date_t::fromMillisSinceEpoch(1361384951100LL))); +MONGO_INITIALIZER(SetTimeZoneToEasternForTest)(InitializerContext*) { + if (-1 == putenv(tzEnvString)) { + return Status(ErrorCodes::BadValue, errnoWithDescription()); } - - TEST(TimeFormatting, DateAsCtimeString) { - ASSERT_EQUALS(std::string("Wed Dec 31 19:00:00.000"), dateToCtimeString(Date_t())); - ASSERT_EQUALS(std::string("Mon Jun 29 21:06:40.981"), - dateToCtimeString(Date_t::fromMillisSinceEpoch(15556000981LL))); - if (!isTimeTSmall) - ASSERT_EQUALS(std::string("Wed Feb 20 13:29:11.100"), - dateToCtimeString(Date_t::fromMillisSinceEpoch(2781455351100LL))); + tzset(); + return Status::OK(); +} + +TEST(TimeFormatting, DateAsISO8601UTCString) { + ASSERT_EQUALS(std::string("1970-01-01T00:00:00.000Z"), dateToISOStringUTC(Date_t())); + ASSERT_EQUALS(std::string("1970-06-30T01:06:40.981Z"), + dateToISOStringUTC(Date_t::fromMillisSinceEpoch(15556000981LL))); + if (!isTimeTSmall) + ASSERT_EQUALS(std::string("2058-02-20T18:29:11.100Z"), + dateToISOStringUTC(Date_t::fromMillisSinceEpoch(2781455351100LL))); + ASSERT_EQUALS(std::string("2013-02-20T18:29:11.100Z"), + dateToISOStringUTC(Date_t::fromMillisSinceEpoch(1361384951100LL))); +} + +TEST(TimeFormatting, DateAsISO8601LocalString) { + ASSERT_EQUALS(std::string("1969-12-31T19:00:00.000-0500"), dateToISOStringLocal(Date_t())); + ASSERT_EQUALS(std::string("1970-06-29T21:06:40.981-0400"), + dateToISOStringLocal(Date_t::fromMillisSinceEpoch(15556000981LL))); + if (!isTimeTSmall) + ASSERT_EQUALS(std::string("2058-02-20T13:29:11.100-0500"), + dateToISOStringLocal(Date_t::fromMillisSinceEpoch(2781455351100LL))); + ASSERT_EQUALS(std::string("2013-02-20T13:29:11.100-0500"), + dateToISOStringLocal(Date_t::fromMillisSinceEpoch(1361384951100LL))); +} + +TEST(TimeFormatting, DateAsCtimeString) { + ASSERT_EQUALS(std::string("Wed Dec 31 19:00:00.000"), dateToCtimeString(Date_t())); + ASSERT_EQUALS(std::string("Mon Jun 29 21:06:40.981"), + dateToCtimeString(Date_t::fromMillisSinceEpoch(15556000981LL))); + if (!isTimeTSmall) ASSERT_EQUALS(std::string("Wed Feb 20 13:29:11.100"), - dateToCtimeString(Date_t::fromMillisSinceEpoch(1361384951100LL))); - } - - static std::string stringstreamDate(void (*formatter)(std::ostream&, Date_t), Date_t date) { - std::ostringstream os; - formatter(os, date); - return os.str(); - } - - TEST(TimeFormatting, DateAsISO8601UTCStream) { - ASSERT_EQUALS(std::string("1970-01-01T00:00:00.000Z"), - stringstreamDate(outputDateAsISOStringUTC, Date_t())); - ASSERT_EQUALS(std::string("1970-06-30T01:06:40.981Z"), - stringstreamDate(outputDateAsISOStringUTC, - Date_t::fromMillisSinceEpoch(15556000981LL))); - if (!isTimeTSmall) - ASSERT_EQUALS(std::string("2058-02-20T18:29:11.100Z"), - stringstreamDate(outputDateAsISOStringUTC, - Date_t::fromMillisSinceEpoch(2781455351100LL))); - ASSERT_EQUALS(std::string("2013-02-20T18:29:11.100Z"), + dateToCtimeString(Date_t::fromMillisSinceEpoch(2781455351100LL))); + ASSERT_EQUALS(std::string("Wed Feb 20 13:29:11.100"), + dateToCtimeString(Date_t::fromMillisSinceEpoch(1361384951100LL))); +} + +static std::string stringstreamDate(void (*formatter)(std::ostream&, Date_t), Date_t date) { + std::ostringstream os; + formatter(os, date); + return os.str(); +} + +TEST(TimeFormatting, DateAsISO8601UTCStream) { + ASSERT_EQUALS(std::string("1970-01-01T00:00:00.000Z"), + stringstreamDate(outputDateAsISOStringUTC, Date_t())); + ASSERT_EQUALS( + std::string("1970-06-30T01:06:40.981Z"), + stringstreamDate(outputDateAsISOStringUTC, Date_t::fromMillisSinceEpoch(15556000981LL))); + if (!isTimeTSmall) + ASSERT_EQUALS(std::string("2058-02-20T18:29:11.100Z"), stringstreamDate(outputDateAsISOStringUTC, - Date_t::fromMillisSinceEpoch(1361384951100LL))); - } - - TEST(TimeFormatting, DateAsISO8601LocalStream) { - ASSERT_EQUALS(std::string("1969-12-31T19:00:00.000-0500"), - stringstreamDate(outputDateAsISOStringLocal, Date_t())); - ASSERT_EQUALS(std::string("1970-06-29T21:06:40.981-0400"), + Date_t::fromMillisSinceEpoch(2781455351100LL))); + ASSERT_EQUALS( + std::string("2013-02-20T18:29:11.100Z"), + stringstreamDate(outputDateAsISOStringUTC, Date_t::fromMillisSinceEpoch(1361384951100LL))); +} + +TEST(TimeFormatting, DateAsISO8601LocalStream) { + ASSERT_EQUALS(std::string("1969-12-31T19:00:00.000-0500"), + stringstreamDate(outputDateAsISOStringLocal, Date_t())); + ASSERT_EQUALS( + std::string("1970-06-29T21:06:40.981-0400"), + stringstreamDate(outputDateAsISOStringLocal, Date_t::fromMillisSinceEpoch(15556000981LL))); + if (!isTimeTSmall) + ASSERT_EQUALS(std::string("2058-02-20T13:29:11.100-0500"), stringstreamDate(outputDateAsISOStringLocal, - Date_t::fromMillisSinceEpoch(15556000981LL))); - if (!isTimeTSmall) - ASSERT_EQUALS(std::string("2058-02-20T13:29:11.100-0500"), - stringstreamDate(outputDateAsISOStringLocal, - Date_t::fromMillisSinceEpoch(2781455351100LL))); - ASSERT_EQUALS(std::string("2013-02-20T13:29:11.100-0500"), - stringstreamDate(outputDateAsISOStringLocal, - Date_t::fromMillisSinceEpoch(1361384951100LL))); + Date_t::fromMillisSinceEpoch(2781455351100LL))); + ASSERT_EQUALS(std::string("2013-02-20T13:29:11.100-0500"), + stringstreamDate(outputDateAsISOStringLocal, + Date_t::fromMillisSinceEpoch(1361384951100LL))); +} + +TEST(TimeFormatting, DateAsCtimeStream) { + ASSERT_EQUALS(std::string("Wed Dec 31 19:00:00.000"), + stringstreamDate(outputDateAsCtime, Date_t::fromMillisSinceEpoch(0))); + ASSERT_EQUALS(std::string("Mon Jun 29 21:06:40.981"), + stringstreamDate(outputDateAsCtime, Date_t::fromMillisSinceEpoch(15556000981LL))); + if (!isTimeTSmall) + ASSERT_EQUALS( + std::string("Wed Feb 20 13:29:11.100"), + stringstreamDate(outputDateAsCtime, Date_t::fromMillisSinceEpoch(2781455351100LL))); + ASSERT_EQUALS( + std::string("Wed Feb 20 13:29:11.100"), + stringstreamDate(outputDateAsCtime, Date_t::fromMillisSinceEpoch(1361384951100LL))); +} + +TEST(TimeParsing, DateAsISO8601UTC) { + // Allowed date format: + // YYYY-MM-DDTHH:MM[:SS[.m[m[m]]]]Z + // Year, month, day, hour, and minute are required, while the seconds component and one to + // three milliseconds are optional. + + StatusWith<Date_t> swull = dateFromISOString("1971-02-03T04:05:06.789Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906789LL); + + swull = dateFromISOString("1971-02-03T04:05:06.78Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906780LL); + + swull = dateFromISOString("1971-02-03T04:05:06.7Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906700LL); + + swull = dateFromISOString("1971-02-03T04:05:06Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906000LL); + + swull = dateFromISOString("1971-02-03T04:05Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401900000LL); + + swull = dateFromISOString("1970-01-01T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 0LL); + + swull = dateFromISOString("1970-06-30T01:06:40.981Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 15556000981LL); + + if (!isTimeTSmall) { + swull = dateFromISOString("2058-02-20T18:29:11.100Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 2781455351100LL); + + swull = dateFromISOString("3001-01-01T08:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 32535244800000LL); } - TEST(TimeFormatting, DateAsCtimeStream) { - ASSERT_EQUALS(std::string("Wed Dec 31 19:00:00.000"), - stringstreamDate(outputDateAsCtime, - Date_t::fromMillisSinceEpoch(0))); - ASSERT_EQUALS(std::string("Mon Jun 29 21:06:40.981"), - stringstreamDate(outputDateAsCtime, - Date_t::fromMillisSinceEpoch(15556000981LL))); - if (!isTimeTSmall) - ASSERT_EQUALS(std::string("Wed Feb 20 13:29:11.100"), - stringstreamDate(outputDateAsCtime, - Date_t::fromMillisSinceEpoch(2781455351100LL))); - ASSERT_EQUALS(std::string("Wed Feb 20 13:29:11.100"), - stringstreamDate(outputDateAsCtime, - Date_t::fromMillisSinceEpoch(1361384951100LL))); - } + swull = dateFromISOString("2013-02-20T18:29:11.100Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1361384951100LL); +} - TEST(TimeParsing, DateAsISO8601UTC) { - // Allowed date format: - // YYYY-MM-DDTHH:MM[:SS[.m[m[m]]]]Z - // Year, month, day, hour, and minute are required, while the seconds component and one to - // three milliseconds are optional. +TEST(TimeParsing, DateAsISO8601Local) { + // Allowed date format: + // YYYY-MM-DDTHH:MM[:SS[.m[m[m]]]]+HHMM + // Year, month, day, hour, and minute are required, while the seconds component and one to + // three milliseconds are optional. The time zone offset must be four digits. - StatusWith<Date_t> swull = dateFromISOString("1971-02-03T04:05:06.789Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906789LL); + StatusWith<Date_t> swull = dateFromISOString("1971-02-03T09:16:06.789+0511"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906789LL); - swull = dateFromISOString("1971-02-03T04:05:06.78Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906780LL); + swull = dateFromISOString("1971-02-03T09:16:06.78+0511"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906780LL); - swull = dateFromISOString("1971-02-03T04:05:06.7Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906700LL); + swull = dateFromISOString("1971-02-03T09:16:06.7+0511"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906700LL); - swull = dateFromISOString("1971-02-03T04:05:06Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906000LL); + swull = dateFromISOString("1971-02-03T09:16:06+0511"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401906000LL); - swull = dateFromISOString("1971-02-03T04:05Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401900000LL); + swull = dateFromISOString("1971-02-03T09:16+0511"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 34401900000LL); - swull = dateFromISOString("1970-01-01T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 0LL); + swull = dateFromISOString("1970-01-01T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 0LL); - swull = dateFromISOString("1970-06-30T01:06:40.981Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 15556000981LL); + swull = dateFromISOString("1970-06-30T01:06:40.981Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 15556000981LL); - if (!isTimeTSmall) { - swull = dateFromISOString("2058-02-20T18:29:11.100Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2781455351100LL); + // Local times not supported + // swull = dateFromISOString("1970-01-01T00:00:00.001"); + // ASSERT_OK(swull.getStatus()); + // ASSERT_EQUALS(swull.getValue().asInt64(), 18000001LL); - swull = dateFromISOString("3001-01-01T08:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 32535244800000LL); - } + // swull = dateFromISOString("1970-01-01T00:00:00.01"); + // ASSERT_OK(swull.getStatus()); + // ASSERT_EQUALS(swull.getValue().asInt64(), 18000010LL); - swull = dateFromISOString("2013-02-20T18:29:11.100Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1361384951100LL); - } + // swull = dateFromISOString("1970-01-01T00:00:00.1"); + // ASSERT_OK(swull.getStatus()); + // ASSERT_EQUALS(swull.getValue().asInt64(), 18000100LL); - TEST(TimeParsing, DateAsISO8601Local) { - // Allowed date format: - // YYYY-MM-DDTHH:MM[:SS[.m[m[m]]]]+HHMM - // Year, month, day, hour, and minute are required, while the seconds component and one to - // three milliseconds are optional. The time zone offset must be four digits. + // swull = dateFromISOString("1970-01-01T00:00:01"); + // ASSERT_OK(swull.getStatus()); + // ASSERT_EQUALS(swull.getValue().asInt64(), 18001000LL); - StatusWith<Date_t> swull = dateFromISOString("1971-02-03T09:16:06.789+0511"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906789LL); + // swull = dateFromISOString("1970-01-01T00:01"); + // ASSERT_OK(swull.getStatus()); + // ASSERT_EQUALS(swull.getValue().asInt64(), 18060000LL); - swull = dateFromISOString("1971-02-03T09:16:06.78+0511"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906780LL); + swull = dateFromISOString("1970-06-29T21:06:40.981-0400"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 15556000981LL); - swull = dateFromISOString("1971-02-03T09:16:06.7+0511"); + if (!isTimeTSmall) { + swull = dateFromISOString("2058-02-20T13:29:11.100-0500"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906700LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2781455351100LL); - swull = dateFromISOString("1971-02-03T09:16:06+0511"); + swull = dateFromISOString("3000-12-31T23:59:59Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401906000LL); - - swull = dateFromISOString("1971-02-03T09:16+0511"); + ASSERT_EQUALS(swull.getValue().asInt64(), 32535215999000LL); + } else { + swull = dateFromISOString("2038-01-19T03:14:07Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 34401900000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2147483647000LL); + } - swull = dateFromISOString("1970-01-01T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 0LL); + swull = dateFromISOString("2013-02-20T13:29:11.100-0500"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1361384951100LL); + + swull = dateFromISOString("2013-02-20T13:29:11.100-0501"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1361385011100LL); +} + +TEST(TimeParsing, InvalidDates) { + // Invalid decimal + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.0.0Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:.0.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:.0:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T.0:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-.1T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-.1-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString(".970-01-01T00:00:00.000Z").getStatus()); + + // Extra sign characters + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.+00Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:+0.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:+0:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T+0:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-+1T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-+1-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("+970-01-01T00:00:00.000Z").getStatus()); + + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.-00Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:-0.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:-0:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T-0:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01--1T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970--1-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("-970-01-01T00:00:00.000Z").getStatus()); + + // Out of range + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:60.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:60:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T24:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-32T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-00T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-13-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-00-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1969-01-01T00:00:00.000Z").getStatus()); + + // Invalid lengths + ASSERT_NOT_OK(dateFromISOString("01970-01-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-001-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-001T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T000:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:000:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:000.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.0000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("197-01-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-1-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-1T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T0:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:0:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:0.000Z").getStatus()); + + // Invalid delimiters + ASSERT_NOT_OK(dateFromISOString("1970+01-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01+01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01Q00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00-00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00-00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00-000Z").getStatus()); + + // Missing numbers + ASSERT_NOT_OK(dateFromISOString("1970--01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00::00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.Z").getStatus()); + + // Bad time offset field + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01ZZ").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01-").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01-11111").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01Z1111").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+111").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+1160").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+2400").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+00+0").getStatus()); + + // Bad prefixes + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01.").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T05+0500").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01+0500").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01+0500").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970+0500").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T01Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970Z").getStatus()); + + // No local time + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.000").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970").getStatus()); + + // Invalid hex base specifiers + ASSERT_NOT_OK(dateFromISOString("x970-01-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-x1-01T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-x1T00:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01Tx0:00:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:x0:00.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:x0.000Z").getStatus()); + ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.x00Z").getStatus()); +} + +TEST(TimeParsing, LeapYears) { + StatusWith<Date_t> swull = dateFromISOString("1972-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 68169600000LL); + + swull = dateFromISOString("1976-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 194400000000LL); + + swull = dateFromISOString("1980-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 320630400000LL); + + swull = dateFromISOString("1984-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 446860800000LL); + + swull = dateFromISOString("1988-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 573091200000LL); - swull = dateFromISOString("1970-06-30T01:06:40.981Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 15556000981LL); + swull = dateFromISOString("1992-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 699321600000LL); - // Local times not supported - //swull = dateFromISOString("1970-01-01T00:00:00.001"); - //ASSERT_OK(swull.getStatus()); - //ASSERT_EQUALS(swull.getValue().asInt64(), 18000001LL); + swull = dateFromISOString("1996-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 825552000000LL); - //swull = dateFromISOString("1970-01-01T00:00:00.01"); - //ASSERT_OK(swull.getStatus()); - //ASSERT_EQUALS(swull.getValue().asInt64(), 18000010LL); + swull = dateFromISOString("2000-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 951782400000LL); - //swull = dateFromISOString("1970-01-01T00:00:00.1"); - //ASSERT_OK(swull.getStatus()); - //ASSERT_EQUALS(swull.getValue().asInt64(), 18000100LL); + swull = dateFromISOString("2004-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1078012800000LL); - //swull = dateFromISOString("1970-01-01T00:00:01"); - //ASSERT_OK(swull.getStatus()); - //ASSERT_EQUALS(swull.getValue().asInt64(), 18001000LL); + swull = dateFromISOString("2008-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1204243200000LL); - //swull = dateFromISOString("1970-01-01T00:01"); - //ASSERT_OK(swull.getStatus()); - //ASSERT_EQUALS(swull.getValue().asInt64(), 18060000LL); + swull = dateFromISOString("2012-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1330473600000LL); - swull = dateFromISOString("1970-06-29T21:06:40.981-0400"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 15556000981LL); + swull = dateFromISOString("2016-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1456704000000LL); - if (!isTimeTSmall) { - swull = dateFromISOString("2058-02-20T13:29:11.100-0500"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2781455351100LL); + swull = dateFromISOString("2020-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1582934400000LL); - swull = dateFromISOString("3000-12-31T23:59:59Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 32535215999000LL); - } - else { - swull = dateFromISOString("2038-01-19T03:14:07Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2147483647000LL); - } + swull = dateFromISOString("2024-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1709164800000LL); - swull = dateFromISOString("2013-02-20T13:29:11.100-0500"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1361384951100LL); + swull = dateFromISOString("2028-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1835395200000LL); - swull = dateFromISOString("2013-02-20T13:29:11.100-0501"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1361385011100LL); - } + swull = dateFromISOString("2032-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 1961625600000LL); - TEST(TimeParsing, InvalidDates) { - // Invalid decimal - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.0.0Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:.0.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:.0:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T.0:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-.1T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-.1-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString(".970-01-01T00:00:00.000Z").getStatus()); - - // Extra sign characters - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.+00Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:+0.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:+0:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T+0:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-+1T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-+1-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("+970-01-01T00:00:00.000Z").getStatus()); - - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.-00Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:-0.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:-0:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T-0:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01--1T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970--1-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("-970-01-01T00:00:00.000Z").getStatus()); - - // Out of range - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:60.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:60:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T24:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-32T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-00T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-13-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-00-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1969-01-01T00:00:00.000Z").getStatus()); - - // Invalid lengths - ASSERT_NOT_OK(dateFromISOString("01970-01-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-001-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-001T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T000:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:000:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:000.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.0000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("197-01-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-1-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-1T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T0:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:0:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:0.000Z").getStatus()); - - // Invalid delimiters - ASSERT_NOT_OK(dateFromISOString("1970+01-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01+01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01Q00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00-00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00-00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00-000Z").getStatus()); - - // Missing numbers - ASSERT_NOT_OK(dateFromISOString("1970--01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00::00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.Z").getStatus()); - - // Bad time offset field - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01ZZ").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01-").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01-11111").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01Z1111").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+111").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+1160").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+2400").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01+00+0").getStatus()); - - // Bad prefixes - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:01.").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:00:").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05:").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T05+0500").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01+0500").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01+0500").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970+0500").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T01Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970Z").getStatus()); - - // No local time - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.000").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970").getStatus()); - - // Invalid hex base specifiers - ASSERT_NOT_OK(dateFromISOString("x970-01-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-x1-01T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-x1T00:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01Tx0:00:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:x0:00.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:x0.000Z").getStatus()); - ASSERT_NOT_OK(dateFromISOString("1970-01-01T00:00:00.x00Z").getStatus()); - } + swull = dateFromISOString("2036-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 2087856000000LL); - TEST(TimeParsing, LeapYears) { - StatusWith<Date_t> swull = dateFromISOString("1972-02-29T00:00:00.000Z"); + if (!isTimeTSmall) { + swull = dateFromISOString("2040-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 68169600000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2214086400000LL); - swull = dateFromISOString("1976-02-29T00:00:00.000Z"); + swull = dateFromISOString("2044-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 194400000000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2340316800000LL); - swull = dateFromISOString("1980-02-29T00:00:00.000Z"); + swull = dateFromISOString("2048-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 320630400000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2466547200000LL); - swull = dateFromISOString("1984-02-29T00:00:00.000Z"); + swull = dateFromISOString("2052-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 446860800000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2592777600000LL); - swull = dateFromISOString("1988-02-29T00:00:00.000Z"); + swull = dateFromISOString("2056-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 573091200000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2719008000000LL); - swull = dateFromISOString("1992-02-29T00:00:00.000Z"); + swull = dateFromISOString("2060-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 699321600000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2845238400000LL); - swull = dateFromISOString("1996-02-29T00:00:00.000Z"); + swull = dateFromISOString("2064-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 825552000000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 2971468800000LL); - swull = dateFromISOString("2000-02-29T00:00:00.000Z"); + swull = dateFromISOString("2068-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 951782400000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3097699200000LL); - swull = dateFromISOString("2004-02-29T00:00:00.000Z"); + swull = dateFromISOString("2072-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1078012800000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3223929600000LL); - swull = dateFromISOString("2008-02-29T00:00:00.000Z"); + swull = dateFromISOString("2076-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1204243200000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3350160000000LL); - swull = dateFromISOString("2012-02-29T00:00:00.000Z"); + swull = dateFromISOString("2080-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1330473600000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3476390400000LL); - swull = dateFromISOString("2016-02-29T00:00:00.000Z"); + swull = dateFromISOString("2084-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1456704000000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3602620800000LL); - swull = dateFromISOString("2020-02-29T00:00:00.000Z"); + swull = dateFromISOString("2088-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1582934400000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3728851200000LL); - swull = dateFromISOString("2024-02-29T00:00:00.000Z"); + swull = dateFromISOString("2092-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1709164800000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3855081600000LL); - swull = dateFromISOString("2028-02-29T00:00:00.000Z"); + swull = dateFromISOString("2096-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1835395200000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 3981312000000LL); - swull = dateFromISOString("2032-02-29T00:00:00.000Z"); + swull = dateFromISOString("2104-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 1961625600000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 4233686400000LL); - swull = dateFromISOString("2036-02-29T00:00:00.000Z"); + swull = dateFromISOString("2108-02-29T00:00:00.000Z"); ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2087856000000LL); - - if (!isTimeTSmall) { - swull = dateFromISOString("2040-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2214086400000LL); - - swull = dateFromISOString("2044-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2340316800000LL); - - swull = dateFromISOString("2048-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2466547200000LL); - - swull = dateFromISOString("2052-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2592777600000LL); - - swull = dateFromISOString("2056-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2719008000000LL); - - swull = dateFromISOString("2060-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2845238400000LL); - - swull = dateFromISOString("2064-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 2971468800000LL); - - swull = dateFromISOString("2068-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3097699200000LL); - - swull = dateFromISOString("2072-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3223929600000LL); - - swull = dateFromISOString("2076-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3350160000000LL); - - swull = dateFromISOString("2080-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3476390400000LL); - - swull = dateFromISOString("2084-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3602620800000LL); - - swull = dateFromISOString("2088-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3728851200000LL); + ASSERT_EQUALS(swull.getValue().asInt64(), 4359916800000LL); - swull = dateFromISOString("2092-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3855081600000LL); - - swull = dateFromISOString("2096-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 3981312000000LL); - - swull = dateFromISOString("2104-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 4233686400000LL); - - swull = dateFromISOString("2108-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 4359916800000LL); - - swull = dateFromISOString("2112-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 4486147200000LL); - - swull = dateFromISOString("2116-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 4612377600000LL); - - swull = dateFromISOString("2120-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 4738608000000LL); - - swull = dateFromISOString("2124-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 4864838400000LL); + swull = dateFromISOString("2112-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 4486147200000LL); - swull = dateFromISOString("2128-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 4991068800000LL); + swull = dateFromISOString("2116-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 4612377600000LL); - swull = dateFromISOString("2132-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 5117299200000LL); + swull = dateFromISOString("2120-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 4738608000000LL); - swull = dateFromISOString("2136-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 5243529600000LL); + swull = dateFromISOString("2124-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 4864838400000LL); - swull = dateFromISOString("2140-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 5369760000000LL); + swull = dateFromISOString("2128-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 4991068800000LL); - swull = dateFromISOString("2144-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 5495990400000LL); + swull = dateFromISOString("2132-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 5117299200000LL); - swull = dateFromISOString("2148-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 5622220800000LL); + swull = dateFromISOString("2136-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 5243529600000LL); - swull = dateFromISOString("2152-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 5748451200000LL); + swull = dateFromISOString("2140-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 5369760000000LL); - swull = dateFromISOString("2156-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 5874681600000LL); + swull = dateFromISOString("2144-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 5495990400000LL); - swull = dateFromISOString("2160-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6000912000000LL); + swull = dateFromISOString("2148-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 5622220800000LL); - swull = dateFromISOString("2164-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6127142400000LL); + swull = dateFromISOString("2152-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 5748451200000LL); - swull = dateFromISOString("2168-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6253372800000LL); + swull = dateFromISOString("2156-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 5874681600000LL); - swull = dateFromISOString("2172-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6379603200000LL); + swull = dateFromISOString("2160-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6000912000000LL); - swull = dateFromISOString("2176-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6505833600000LL); + swull = dateFromISOString("2164-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6127142400000LL); - swull = dateFromISOString("2180-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6632064000000LL); + swull = dateFromISOString("2168-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6253372800000LL); - swull = dateFromISOString("2184-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6758294400000LL); + swull = dateFromISOString("2172-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6379603200000LL); - swull = dateFromISOString("2188-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 6884524800000LL); + swull = dateFromISOString("2176-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6505833600000LL); - swull = dateFromISOString("2192-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 7010755200000LL); + swull = dateFromISOString("2180-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6632064000000LL); - swull = dateFromISOString("2196-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 7136985600000LL); + swull = dateFromISOString("2184-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6758294400000LL); - swull = dateFromISOString("2204-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 7389360000000LL); + swull = dateFromISOString("2188-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 6884524800000LL); - swull = dateFromISOString("2208-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 7515590400000LL); + swull = dateFromISOString("2192-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 7010755200000LL); - swull = dateFromISOString("2212-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 7641820800000LL); + swull = dateFromISOString("2196-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 7136985600000LL); - swull = dateFromISOString("2216-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 7768051200000LL); + swull = dateFromISOString("2204-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 7389360000000LL); - swull = dateFromISOString("2220-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 7894281600000LL); + swull = dateFromISOString("2208-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 7515590400000LL); - swull = dateFromISOString("2224-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8020512000000LL); + swull = dateFromISOString("2212-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 7641820800000LL); - swull = dateFromISOString("2228-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8146742400000LL); + swull = dateFromISOString("2216-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 7768051200000LL); - swull = dateFromISOString("2232-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8272972800000LL); + swull = dateFromISOString("2220-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 7894281600000LL); - swull = dateFromISOString("2236-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8399203200000LL); + swull = dateFromISOString("2224-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8020512000000LL); - swull = dateFromISOString("2240-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8525433600000LL); + swull = dateFromISOString("2228-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8146742400000LL); - swull = dateFromISOString("2244-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8651664000000LL); + swull = dateFromISOString("2232-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8272972800000LL); - swull = dateFromISOString("2248-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8777894400000LL); + swull = dateFromISOString("2236-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8399203200000LL); - swull = dateFromISOString("2252-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 8904124800000LL); + swull = dateFromISOString("2240-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8525433600000LL); - swull = dateFromISOString("2256-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9030355200000LL); + swull = dateFromISOString("2244-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8651664000000LL); - swull = dateFromISOString("2260-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9156585600000LL); + swull = dateFromISOString("2248-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8777894400000LL); - swull = dateFromISOString("2264-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9282816000000LL); + swull = dateFromISOString("2252-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 8904124800000LL); - swull = dateFromISOString("2268-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9409046400000LL); + swull = dateFromISOString("2256-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9030355200000LL); - swull = dateFromISOString("2272-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9535276800000LL); + swull = dateFromISOString("2260-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9156585600000LL); - swull = dateFromISOString("2276-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9661507200000LL); + swull = dateFromISOString("2264-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9282816000000LL); - swull = dateFromISOString("2280-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9787737600000LL); + swull = dateFromISOString("2268-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9409046400000LL); - swull = dateFromISOString("2284-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 9913968000000LL); + swull = dateFromISOString("2272-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9535276800000LL); - swull = dateFromISOString("2288-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 10040198400000LL); + swull = dateFromISOString("2276-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9661507200000LL); - swull = dateFromISOString("2292-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 10166428800000LL); + swull = dateFromISOString("2280-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9787737600000LL); - swull = dateFromISOString("2296-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 10292659200000LL); + swull = dateFromISOString("2284-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 9913968000000LL); - swull = dateFromISOString("2304-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 10545033600000LL); + swull = dateFromISOString("2288-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 10040198400000LL); - swull = dateFromISOString("2308-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 10671264000000LL); + swull = dateFromISOString("2292-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 10166428800000LL); - swull = dateFromISOString("2312-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 10797494400000LL); + swull = dateFromISOString("2296-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 10292659200000LL); - swull = dateFromISOString("2316-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 10923724800000LL); + swull = dateFromISOString("2304-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 10545033600000LL); - swull = dateFromISOString("2320-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11049955200000LL); + swull = dateFromISOString("2308-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 10671264000000LL); - swull = dateFromISOString("2324-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11176185600000LL); + swull = dateFromISOString("2312-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 10797494400000LL); - swull = dateFromISOString("2328-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11302416000000LL); + swull = dateFromISOString("2316-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 10923724800000LL); - swull = dateFromISOString("2332-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11428646400000LL); + swull = dateFromISOString("2320-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11049955200000LL); - swull = dateFromISOString("2336-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11554876800000LL); + swull = dateFromISOString("2324-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11176185600000LL); - swull = dateFromISOString("2340-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11681107200000LL); + swull = dateFromISOString("2328-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11302416000000LL); - swull = dateFromISOString("2344-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11807337600000LL); + swull = dateFromISOString("2332-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11428646400000LL); - swull = dateFromISOString("2348-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 11933568000000LL); + swull = dateFromISOString("2336-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11554876800000LL); - swull = dateFromISOString("2352-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12059798400000LL); + swull = dateFromISOString("2340-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11681107200000LL); - swull = dateFromISOString("2356-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12186028800000LL); + swull = dateFromISOString("2344-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11807337600000LL); - swull = dateFromISOString("2360-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12312259200000LL); + swull = dateFromISOString("2348-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 11933568000000LL); - swull = dateFromISOString("2364-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12438489600000LL); + swull = dateFromISOString("2352-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12059798400000LL); - swull = dateFromISOString("2368-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12564720000000LL); + swull = dateFromISOString("2356-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12186028800000LL); - swull = dateFromISOString("2372-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12690950400000LL); + swull = dateFromISOString("2360-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12312259200000LL); - swull = dateFromISOString("2376-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12817180800000LL); + swull = dateFromISOString("2364-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12438489600000LL); - swull = dateFromISOString("2380-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 12943411200000LL); + swull = dateFromISOString("2368-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12564720000000LL); - swull = dateFromISOString("2384-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 13069641600000LL); + swull = dateFromISOString("2372-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12690950400000LL); - swull = dateFromISOString("2388-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 13195872000000LL); + swull = dateFromISOString("2376-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12817180800000LL); - swull = dateFromISOString("2392-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 13322102400000LL); + swull = dateFromISOString("2380-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 12943411200000LL); - swull = dateFromISOString("2396-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 13448332800000LL); + swull = dateFromISOString("2384-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 13069641600000LL); - swull = dateFromISOString("2400-02-29T00:00:00.000Z"); - ASSERT_OK(swull.getStatus()); - ASSERT_EQUALS(swull.getValue().asInt64(), 13574563200000LL); - } - } + swull = dateFromISOString("2388-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 13195872000000LL); - TEST(TimeFormatting, DurationFormatting) { - ASSERT_EQUALS("52\xce\xbcs", static_cast<std::string>(str::stream() << Microseconds(52))); - ASSERT_EQUALS("52ms", static_cast<std::string>(str::stream() << Milliseconds(52))); - ASSERT_EQUALS("52s", static_cast<std::string>(str::stream() << Seconds(52))); + swull = dateFromISOString("2392-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 13322102400000LL); - std::ostringstream os; - os << Milliseconds(52) << Microseconds(52) << Seconds(52); - ASSERT_EQUALS("52ms52\xce\xbcs52s", os.str()); - } + swull = dateFromISOString("2396-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 13448332800000LL); - TEST(SystemTime, ConvertDateToSystemTime) { - const std::string isoTimeString = "2015-05-14T17:28:33.123Z"; - const Date_t aDate = unittest::assertGet(dateFromISOString(isoTimeString)); - const auto aTimePoint = aDate.toSystemTimePoint(); - ASSERT_EQUALS(aDate.toDurationSinceEpoch(), - aTimePoint - stdx::chrono::system_clock::from_time_t(0)); - ASSERT_EQUALS(aDate, Date_t(aTimePoint)); + swull = dateFromISOString("2400-02-29T00:00:00.000Z"); + ASSERT_OK(swull.getStatus()); + ASSERT_EQUALS(swull.getValue().asInt64(), 13574563200000LL); } +} + +TEST(TimeFormatting, DurationFormatting) { + ASSERT_EQUALS("52\xce\xbcs", static_cast<std::string>(str::stream() << Microseconds(52))); + ASSERT_EQUALS("52ms", static_cast<std::string>(str::stream() << Milliseconds(52))); + ASSERT_EQUALS("52s", static_cast<std::string>(str::stream() << Seconds(52))); + + std::ostringstream os; + os << Milliseconds(52) << Microseconds(52) << Seconds(52); + ASSERT_EQUALS("52ms52\xce\xbcs52s", os.str()); +} + +TEST(SystemTime, ConvertDateToSystemTime) { + const std::string isoTimeString = "2015-05-14T17:28:33.123Z"; + const Date_t aDate = unittest::assertGet(dateFromISOString(isoTimeString)); + const auto aTimePoint = aDate.toSystemTimePoint(); + ASSERT_EQUALS(aDate.toDurationSinceEpoch(), + aTimePoint - stdx::chrono::system_clock::from_time_t(0)); + ASSERT_EQUALS(aDate, Date_t(aTimePoint)); +} } // namespace } // namespace mongo |