/* ---------------------------------------------------------------------------- * 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 * -------------------------------------------------------------------------- */ /* * @brief Unit tests for serialization of library classes * @author Frank Dellaert * @author Alex Cunningham */ /* ************************************************************************* */ // Serialization testing code. /* ************************************************************************* */ #include #include #include // includes for standard serialization types #include #include #include #include #include #include #include // whether to print the serialized text to stdout const bool verbose = false; // Templated round-trip serialization template void roundtrip(const T& input, T& output) { // Serialize std::ostringstream out_archive_stream; { boost::archive::text_oarchive out_archive(out_archive_stream); out_archive << input; } // Convert to string std::string serialized = out_archive_stream.str(); if (verbose) std::cout << serialized << std::endl << std::endl; // De-serialize { std::istringstream in_archive_stream(serialized); boost::archive::text_iarchive in_archive(in_archive_stream); in_archive >> output; } } // This version requires equality operator template bool equality(const T& input = T()) { T output; roundtrip(input,output); return input==output; } // This version requires equals template bool equalsObj(const T& input = T()) { T output; roundtrip(input,output); return input.equals(output); } // De-referenced version for pointers template bool equalsDereferenced(const T& input) { T output; 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; { std::ostringstream out_archive_stream; boost::archive::xml_oarchive out_archive(out_archive_stream); out_archive << boost::serialization::make_nvp("data", input); // Convert to string serialized = out_archive_stream.str(); } if (verbose) std::cout << serialized << std::endl << std::endl; // De-serialize std::istringstream in_archive_stream(serialized); boost::archive::xml_iarchive in_archive(in_archive_stream); in_archive >> boost::serialization::make_nvp("data", output); } // This version requires equality operator template bool equalityXML(const T& input = T()) { T output; roundtripXML(input,output); return input==output; } // This version requires equals template bool equalsXML(const T& input = T()) { T output; roundtripXML(input,output); return input.equals(output); } /* ************************************************************************* */ // Actual Tests /* ************************************************************************* */ #include #include #include #include #include #include #include //#include //#include //#include #include #include using namespace std; using namespace gtsam; /* ************************************************************************* */ TEST (Serialization, text_geometry) { EXPECT(equalsObj(Point2(1.0, 2.0))); EXPECT(equalsObj(Pose2(1.0, 2.0, 0.3))); EXPECT(equalsObj(Rot2::fromDegrees(30.0))); EXPECT(equalsObj(Point3(1.0, 2.0, 3.0))); EXPECT(equalsObj()); EXPECT(equalsObj(Rot3::RzRyRx(1.0, 3.0, 2.0))); } /* ************************************************************************* */ TEST (Serialization, xml_geometry) { EXPECT(equalsXML(Point2(1.0, 2.0))); EXPECT(equalsXML(Pose2(1.0, 2.0, 0.3))); EXPECT(equalsXML(Rot2::fromDegrees(30.0))); EXPECT(equalsXML(Point3(1.0, 2.0, 3.0))); EXPECT(equalsXML()); EXPECT(equalsXML(Rot3::RzRyRx(1.0, 3.0, 2.0))); } /* ************************************************************************* */ TEST (Serialization, text_linear) { // NOT WORKING: // EXPECT(equalsObj()); // EXPECT(equalsObj()); } /* ************************************************************************* */ TEST (Serialization, xml_linear) { // NOT WORKING: // EXPECT(equalsXML()); // EXPECT(equalsXML()); } /* ************************************************************************* */ TEST (Serialization, text_planar) { EXPECT(equalsObj(gtsam::planarSLAM::PoseKey(2))); EXPECT(equalsObj(gtsam::planarSLAM::PointKey(2))); EXPECT(equalsObj()); } /* ************************************************************************* */ TEST (Serialization, xml_planar) { EXPECT(equalsXML(gtsam::planarSLAM::PoseKey(2))); EXPECT(equalsXML(gtsam::planarSLAM::PointKey(2))); EXPECT(equalsXML()); } /* ************************************************************************* */ int main() { TestResult tr; return TestRegistry::runAllTests(tr); } /* ************************************************************************* */