/* ---------------------------------------------------------------------------- * GTSAM Copyright 2010, Georgia Tech Research Corporation, * Atlanta, Georgia 30332-0415 * All Rights Reserved * Authors: Frank Dellaert, et al. (see THANKS for the full author list) * See LICENSE for the license information * -------------------------------------------------------------------------- */ /** * @file serializationTestHelpers.h * @brief * @author Alex Cunningham * @author Richard Roberts * @date Feb 7, 2012 */ #pragma once #include #include #include #include #include // whether to print the serialized text to stdout const bool verbose = false; namespace gtsam { namespace serializationTestHelpers { // templated default object creation so we only need to declare one friend (if applicable) template T create() { return T(); } // Templated round-trip serialization template void roundtrip(const T& input, T& output) { // Serialize std::string serialized = serialize(input); if (verbose) std::cout << serialized << std::endl << std::endl; deserialize(serialized, output); } // This version requires equality operator template bool equality(const T& input = T()) { T output = create(); roundtrip(input,output); return input==output; } // This version requires Testable template bool equalsObj(const T& input = T()) { T output = create(); roundtrip(input,output); return assert_equal(input, output); } // De-referenced version for pointers, requires equals method template bool equalsDereferenced(const T& input) { T output = create(); roundtrip(input,output); return input->equals(*output); } // Templated round-trip serialization using XML template void roundtripXML(const T& input, T& output) { // Serialize std::string serialized = serializeXML(input); if (verbose) std::cout << serialized << std::endl << std::endl; // De-serialize deserializeXML(serialized, output); } // This version requires equality operator template bool equalityXML(const T& input = T()) { T output = create(); roundtripXML(input,output); return input==output; } // This version requires Testable template bool equalsXML(const T& input = T()) { T output = create(); roundtripXML(input,output); return assert_equal(input, output); } // This version is for pointers, requires equals method template bool equalsDereferencedXML(const T& input = T()) { T output = create(); roundtripXML(input,output); return input->equals(*output); } // Templated round-trip serialization using XML template void roundtripBinary(const T& input, T& output) { // Serialize std::string serialized = serializeBinary(input); if (verbose) std::cout << serialized << std::endl << std::endl; // De-serialize deserializeBinary(serialized, output); } // This version requires equality operator template bool equalityBinary(const T& input = T()) { T output = create(); roundtripBinary(input,output); return input==output; } // This version requires Testable template bool equalsBinary(const T& input = T()) { T output = create(); roundtripBinary(input,output); return assert_equal(input, output); } // This version is for pointers, requires equals method template bool equalsDereferencedBinary(const T& input = T()) { T output = create(); roundtripBinary(input,output); return input->equals(*output); } } // \namespace serializationTestHelpers } // \namespace gtsam