Add support for serializing 32-bit integers
[alexxy/gromacs.git] / src / testutils / refdata.cpp
index 1e22a71f7bbaba35372ce6bd96e301848e1616b4..0482fdf45e9c48e385d5d61965fc207c61b5951c 100644 (file)
@@ -388,7 +388,11 @@ class TestReferenceChecker::Impl
         static const char * const    cUCharNodeName;
         //! String constant for naming XML elements for integer values.
         static const char * const    cIntegerNodeName;
-        //! String constant for naming XML elements for int64 values.
+        //! String constant for naming XML elements for int32 values.
+        static const char * const    cInt32NodeName;
+        //! String constant for naming XML elements for unsigned int32 values.
+        static const char * const    cUInt32NodeName;
+        //! String constant for naming XML elements for int32 values.
         static const char * const    cInt64NodeName;
         //! String constant for naming XML elements for unsigned int64 values.
         static const char * const    cUInt64NodeName;
@@ -555,6 +559,8 @@ const char *const TestReferenceChecker::Impl::cBooleanNodeName    = "Bool";
 const char *const TestReferenceChecker::Impl::cStringNodeName     = "String";
 const char *const TestReferenceChecker::Impl::cUCharNodeName      = "UChar";
 const char *const TestReferenceChecker::Impl::cIntegerNodeName    = "Int";
+const char *const TestReferenceChecker::Impl::cInt32NodeName      = "Int32";
+const char *const TestReferenceChecker::Impl::cUInt32NodeName     = "UInt32";
 const char *const TestReferenceChecker::Impl::cInt64NodeName      = "Int64";
 const char *const TestReferenceChecker::Impl::cUInt64NodeName     = "UInt64";
 const char *const TestReferenceChecker::Impl::cRealNodeName       = "Real";
@@ -904,6 +910,18 @@ void TestReferenceChecker::checkInteger(int value, const char *id)
                                     ExactStringChecker(formatString("%d", value))));
 }
 
+void TestReferenceChecker::checkInt32(int32_t value, const char *id)
+{
+    EXPECT_PLAIN(impl_->processItem(Impl::cInt32NodeName, id,
+                                    ExactStringChecker(formatString("%" PRId32, value))));
+}
+
+void TestReferenceChecker::checkUInt32(uint32_t value, const char *id)
+{
+    EXPECT_PLAIN(impl_->processItem(Impl::cUInt32NodeName, id,
+                                    ExactStringChecker(formatString("%" PRIu32, value))));
+}
+
 void TestReferenceChecker::checkInt64(int64_t value, const char *id)
 {
     EXPECT_PLAIN(impl_->processItem(Impl::cInt64NodeName, id,
@@ -986,10 +1004,22 @@ void TestReferenceChecker::checkAny(const Any &any, const char *id)
     {
         checkInteger(any.cast<int>(), id);
     }
+    else if (any.isType<int32_t>())
+    {
+        checkInt32(any.cast<int32_t>(), id);
+    }
+    else if (any.isType<uint32_t>())
+    {
+        checkInt32(any.cast<uint32_t>(), id);
+    }
     else if (any.isType<int64_t>())
     {
         checkInt64(any.cast<int64_t>(), id);
     }
+    else if (any.isType<uint64_t>())
+    {
+        checkInt64(any.cast<uint64_t>(), id);
+    }
     else if (any.isType<float>())
     {
         checkFloat(any.cast<float>(), id);
@@ -1073,6 +1103,19 @@ int TestReferenceChecker::readInteger(const char *id)
 }
 
 
+int32_t TestReferenceChecker::readInt32(const char *id)
+{
+    if (impl_->shouldIgnore())
+    {
+        GMX_THROW(TestException("Trying to read from non-existent reference data value"));
+    }
+    int32_t value = 0;
+    EXPECT_PLAIN(impl_->processItem(Impl::cInt32NodeName, id,
+                                    ValueExtractor<int32_t>(&value)));
+    return value;
+}
+
+
 int64_t TestReferenceChecker::readInt64(const char *id)
 {
     if (impl_->shouldIgnore())