From 945a838850be68a2600eaadcd6fb1678f23909b3 Mon Sep 17 00:00:00 2001 From: Michael Penick Date: Thu, 16 Jun 2016 13:54:42 -0700 Subject: [PATCH] Fix: cass_date_time_to_epoch() unable to handle dates before date type epoch --- src/external_types.cpp | 2 +- test/unit_tests/src/test_date_time.cpp | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/external_types.cpp b/src/external_types.cpp index 6404db669..26c4fff8e 100644 --- a/src/external_types.cpp +++ b/src/external_types.cpp @@ -136,7 +136,7 @@ cass_int64_t cass_time_from_epoch(cass_int64_t epoch_secs) { } cass_int64_t cass_date_time_to_epoch(cass_uint32_t date, cass_int64_t time) { - return (date - CASS_DATE_EPOCH) * NUM_SECONDS_PER_DAY + + return (static_cast(date) - CASS_DATE_EPOCH) * NUM_SECONDS_PER_DAY + time / CASS_TIME_NANOSECONDS_PER_SECOND; } diff --git a/test/unit_tests/src/test_date_time.cpp b/test/unit_tests/src/test_date_time.cpp index ba1b4f53b..e85a14be1 100644 --- a/test/unit_tests/src/test_date_time.cpp +++ b/test/unit_tests/src/test_date_time.cpp @@ -23,6 +23,8 @@ #include #include +#define CASS_DATE_EPOCH 2147483648U + BOOST_AUTO_TEST_SUITE(date_time) BOOST_AUTO_TEST_CASE(simple) @@ -35,9 +37,9 @@ BOOST_AUTO_TEST_CASE(simple) BOOST_AUTO_TEST_CASE(date) { - BOOST_CHECK(cass_date_from_epoch(0) ==2147483648u); - BOOST_CHECK(cass_date_from_epoch(24 * 3600) ==2147483649u); - BOOST_CHECK(cass_date_from_epoch(2 * 24 * 3600) ==2147483650u); + BOOST_CHECK_EQUAL(cass_date_from_epoch(0), CASS_DATE_EPOCH); + BOOST_CHECK_EQUAL(cass_date_from_epoch(24 * 3600), CASS_DATE_EPOCH + 1); + BOOST_CHECK_EQUAL(cass_date_from_epoch(2 * 24 * 3600), CASS_DATE_EPOCH + 2); } BOOST_AUTO_TEST_CASE(time) @@ -49,4 +51,11 @@ BOOST_AUTO_TEST_CASE(time) BOOST_CHECK(actual == expected); } +BOOST_AUTO_TEST_CASE(date_time_to_epoc) +{ + BOOST_CHECK_EQUAL(cass_date_time_to_epoch(CASS_DATE_EPOCH, 0), 0L); // Epoch + BOOST_CHECK_EQUAL(cass_date_time_to_epoch(CASS_DATE_EPOCH - 1, 0), -24L * 3600L); // Epoch - 1 day + BOOST_CHECK_EQUAL(cass_date_time_to_epoch(CASS_DATE_EPOCH + 1, 0), 24L * 3600L); // Epoch + 1 day +} + BOOST_AUTO_TEST_SUITE_END()