summaryrefslogtreecommitdiff
path: root/tests/libntp/caljulian.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libntp/caljulian.cpp')
-rw-r--r--tests/libntp/caljulian.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/libntp/caljulian.cpp b/tests/libntp/caljulian.cpp
new file mode 100644
index 0000000..d9cc952
--- /dev/null
+++ b/tests/libntp/caljulian.cpp
@@ -0,0 +1,94 @@
+#include "libntptest.h"
+
+extern "C" {
+#include "ntp_calendar.h"
+}
+
+#include <string>
+#include <sstream>
+
+class caljulianTest : public libntptest {
+protected:
+ virtual void SetUp();
+ virtual void TearDown();
+
+ std::string CalendarToString(const calendar &cal) {
+ std::ostringstream ss;
+ ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday
+ << " (" << cal.yearday << ") " << (u_int)cal.hour << ":"
+ << (u_int)cal.minute << ":" << (u_int)cal.second;
+ return ss.str();
+ }
+
+ ::testing::AssertionResult IsEqual(const calendar &expected, const calendar &actual) {
+ if (expected.year == actual.year &&
+ (expected.yearday == actual.yearday ||
+ (expected.month == actual.month &&
+ expected.monthday == actual.monthday)) &&
+ expected.hour == actual.hour &&
+ expected.minute == actual.minute &&
+ expected.second == actual.second) {
+ return ::testing::AssertionSuccess();
+ } else {
+ return ::testing::AssertionFailure()
+ << "expected: " << CalendarToString(expected) << " but was "
+ << CalendarToString(actual);
+ }
+ }
+};
+
+void caljulianTest::SetUp()
+{
+ ntpcal_set_timefunc(timefunc);
+ settime(1970, 1, 1, 0, 0, 0);
+}
+
+void caljulianTest::TearDown()
+{
+ ntpcal_set_timefunc(NULL);
+}
+
+
+TEST_F(caljulianTest, RegularTime) {
+ u_long testDate = 3485080800UL; // 2010-06-09 14:00:00
+ calendar expected = {2010,160,6,9,14,0,0};
+
+ calendar actual;
+
+ caljulian(testDate, &actual);
+
+ EXPECT_TRUE(IsEqual(expected, actual));
+}
+
+TEST_F(caljulianTest, LeapYear) {
+ u_long input = 3549902400UL; // 2012-06-28 20:00:00Z
+ calendar expected = {2012, 179, 6, 28, 20, 0, 0};
+
+ calendar actual;
+
+ caljulian(input, &actual);
+
+ EXPECT_TRUE(IsEqual(expected, actual));
+}
+
+TEST_F(caljulianTest, uLongBoundary) {
+ u_long time = 4294967295UL; // 2036-02-07 6:28:15
+ calendar expected = {2036,0,2,7,6,28,15};
+
+ calendar actual;
+
+ caljulian(time, &actual);
+
+ EXPECT_TRUE(IsEqual(expected, actual));
+}
+
+TEST_F(caljulianTest, uLongWrapped) {
+ u_long time = 0;
+ calendar expected = {2036,0,2,7,6,28,16};
+
+ calendar actual;
+
+ caljulian(time, &actual);
+
+ EXPECT_TRUE(IsEqual(expected, actual));
+}