summaryrefslogtreecommitdiff
path: root/contrib/ntp/tests/libntp/g_vi64ops.cpp
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2015-07-05 15:42:16 +0000
committerCy Schubert <cy@FreeBSD.org>2015-07-05 15:42:16 +0000
commit276da39af92f48350aa01091a2b8b3e735217eea (patch)
treefb96356e3ef85aaa8d1f5939a9decd315a7ca596 /contrib/ntp/tests/libntp/g_vi64ops.cpp
parent31c98473c1337a238b00342edd7ef85dfb378e24 (diff)
parent873997f35a991eee09ed91148a0cf332360380da (diff)
Notes
Diffstat (limited to 'contrib/ntp/tests/libntp/g_vi64ops.cpp')
-rw-r--r--contrib/ntp/tests/libntp/g_vi64ops.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/contrib/ntp/tests/libntp/g_vi64ops.cpp b/contrib/ntp/tests/libntp/g_vi64ops.cpp
new file mode 100644
index 0000000000000..29f7932b37a0c
--- /dev/null
+++ b/contrib/ntp/tests/libntp/g_vi64ops.cpp
@@ -0,0 +1,64 @@
+#include "g_libntptest.h"
+
+extern "C" {
+#include "vint64ops.h"
+}
+
+class vi64Test : public libntptest {
+public:
+ ::testing::AssertionResult IsEqual(const vint64 &expected, const vint64 &actual) {
+ if (0 == memcmp(&expected, &actual, sizeof(vint64))) {
+ return ::testing::AssertionSuccess();
+ } else {
+ return ::testing::AssertionFailure()
+ << "expected: "
+ << std::hex << expected.D_s.hi << '.'
+ << std::hex << expected.D_s.lo
+ << " but was "
+ << std::hex << actual.D_s.hi << '.'
+ << std::hex << actual.D_s.lo;
+ }
+ }
+};
+
+// ----------------------------------------------------------------------
+// test number parser
+TEST_F(vi64Test, ParseVUI64_pos) {
+ vint64 act, exp;
+ const char *sp;
+ char *ep;
+
+ sp = "1234x";
+ exp.D_s.hi = 0;
+ exp.D_s.lo = 1234;
+ act = strtouv64(sp, &ep, 0);
+ EXPECT_TRUE(IsEqual(exp, act));
+ EXPECT_EQ(*ep, 'x');
+}
+
+TEST_F(vi64Test, ParseVUI64_neg) {
+ vint64 act, exp;
+ const char *sp;
+ char *ep;
+
+ sp = "-1234x";
+ exp.D_s.hi = ~0;
+ exp.D_s.lo = -1234;
+ act = strtouv64(sp, &ep, 0);
+ EXPECT_TRUE(IsEqual(exp, act));
+ EXPECT_EQ(*ep, 'x');
+}
+
+TEST_F(vi64Test, ParseVUI64_case) {
+ vint64 act, exp;
+ const char *sp;
+ char *ep;
+
+ sp = "0123456789AbCdEf";
+ exp.D_s.hi = 0x01234567;
+ exp.D_s.lo = 0x89ABCDEF;
+ act = strtouv64(sp, &ep, 16);
+ EXPECT_TRUE(IsEqual(exp, act));
+ EXPECT_EQ(*ep, '\0');
+}
+