Add support for int64 in refdata
authorRoland Schulz <roland@utk.edu>
Tue, 1 Jul 2014 08:53:53 +0000 (04:53 -0400)
committerRoland Schulz <roland@utk.edu>
Wed, 23 Jul 2014 23:15:56 +0000 (19:15 -0400)
Change-Id: Ia5fedbe7593d9630a095eaf1cb6d69f0c1223ee0

src/testutils/refdata.cpp
src/testutils/refdata.h
src/testutils/tests/refdata.cpp

index f145e9adb1ec2a4cef98ec4b2f668e85d8dd8ee8..61e1786517e496107b120575ce32e05dd8d0c19b 100644 (file)
@@ -268,6 +268,10 @@ class TestReferenceChecker::Impl
         static const xmlChar * const cStringNodeName;
         //! String constant for naming XML elements for integer values.
         static const xmlChar * const cIntegerNodeName;
+        //! String constant for naming XML elements for int64 values.
+        static const xmlChar * const cInt64NodeName;
+        //! String constant for naming XML elements for unsigned int64 values.
+        static const xmlChar * const cUInt64NodeName;
         //! String constant for naming XML elements for floating-point values.
         static const xmlChar * const cRealNodeName;
         //! String constant for naming XML attribute for value identifiers.
@@ -416,6 +420,10 @@ const xmlChar * const TestReferenceChecker::Impl::cStringNodeName =
     (const xmlChar *)"String";
 const xmlChar * const TestReferenceChecker::Impl::cIntegerNodeName  =
     (const xmlChar *)"Int";
+const xmlChar * const TestReferenceChecker::Impl::cInt64NodeName  =
+    (const xmlChar *)"Int64";
+const xmlChar * const TestReferenceChecker::Impl::cUInt64NodeName  =
+    (const xmlChar *)"UInt64";
 const xmlChar * const TestReferenceChecker::Impl::cRealNodeName =
     (const xmlChar *)"Real";
 const xmlChar * const TestReferenceChecker::Impl::cIdAttrName =
@@ -861,6 +869,39 @@ void TestReferenceChecker::checkInteger(int value, const char *id)
     }
 }
 
+void TestReferenceChecker::checkInt64(gmx_int64_t value, const char *id)
+{
+    if (impl_->shouldIgnore())
+    {
+        return;
+    }
+    SCOPED_TRACE(impl_->traceString(id));
+    bool        bFound      = false;
+    std::string strValue    = formatString("%" GMX_PRId64, value);
+    std::string refStrValue =
+        impl_->processItem(Impl::cInt64NodeName, id, strValue, &bFound);
+    if (bFound)
+    {
+        EXPECT_EQ(refStrValue, strValue);
+    }
+}
+
+void TestReferenceChecker::checkUInt64(gmx_uint64_t value, const char *id)
+{
+    if (impl_->shouldIgnore())
+    {
+        return;
+    }
+    SCOPED_TRACE(impl_->traceString(id));
+    bool        bFound      = false;
+    std::string strValue    = formatString("%" GMX_PRIu64, value);
+    std::string refStrValue =
+        impl_->processItem(Impl::cUInt64NodeName, id, strValue, &bFound);
+    if (bFound)
+    {
+        EXPECT_EQ(refStrValue, strValue);
+    }
+}
 
 void TestReferenceChecker::checkDouble(double value, const char *id)
 {
index 3c2c3b2f580cb6d1e29f2103c9edb5d89e9addb4..f3fd0bdfe21f9676084508d4a0d99c6c2259fb83 100644 (file)
@@ -46,6 +46,7 @@
 #include <iterator>
 #include <string>
 
+#include "gromacs/legacyheaders/types/simple.h"
 #include "gromacs/utility/common.h"
 
 namespace gmx
@@ -315,6 +316,10 @@ class TestReferenceChecker
         void checkStringBlock(const std::string &value, const char *id);
         //! Check a single integer value.
         void checkInteger(int value, const char *id);
+        //! Check a single int64 value.
+        void checkInt64(gmx_int64_t value, const char *id);
+        //! Check a single uint64 value.
+        void checkUInt64(gmx_uint64_t value, const char *id);
         //! Check a single single-precision floating point value.
         void checkFloat(float value, const char *id);
         //! Check a single double-precision floating point value.
@@ -359,6 +364,16 @@ class TestReferenceChecker
         {
             checkInteger(value, id);
         }
+        //! Check a single integer value.
+        void checkValue(gmx_int64_t value, const char *id)
+        {
+            checkInt64(value, id);
+        }
+        //! Check a single integer value.
+        void checkValue(gmx_uint64_t value, const char *id)
+        {
+            checkUInt64(value, id);
+        }
         //! Check a single single-precision floating point value.
         void checkValue(float value, const char *id)
         {
index f88f31bcb92b79e335d0cbc67b8b7e1976c82ebd..ccc442127a055991d1f719f13ed79ee7cd4adad5 100644 (file)
@@ -59,6 +59,8 @@ TEST(ReferenceDataTest, HandlesSimpleData)
         TestReferenceChecker checker(data.rootChecker());
         checker.checkBoolean(true, "int");
         checker.checkInteger(1, "int");
+        checker.checkInt64(1ULL<<42, "int64");
+        checker.checkUInt64(1ULL<<42, "uint64");
         checker.checkDouble(0.5, "real");
         checker.checkString("Test", "string");
     }
@@ -67,6 +69,8 @@ TEST(ReferenceDataTest, HandlesSimpleData)
         TestReferenceChecker checker(data.rootChecker());
         checker.checkBoolean(true, "int");
         checker.checkInteger(1, "int");
+        checker.checkInt64(1ULL<<42, "int64");
+        checker.checkUInt64(1ULL<<42, "uint64");
         checker.checkDouble(0.5, "real");
         checker.checkString("Test", "string");
     }