From 23245f06df9b76a16877339654dd5163fb213521 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Sat, 4 May 2013 23:44:55 -0700 Subject: gras: added serialization support for gras types sbuffer, streamtag, and packetmsg get registered into the polymorphic archive w/ unit tests resolves #65 --- tests/CMakeLists.txt | 3 +- tests/serialize_tags_test.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/serialize_tags_test.cpp (limited to 'tests') diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7626eb0..797f858 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,7 +7,7 @@ include(GrTest) ######################################################################## # unit test suite ######################################################################## -find_package(Boost COMPONENTS unit_test_framework) +find_package(Boost COMPONENTS unit_test_framework serialization) if (NOT Boost_FOUND) return() @@ -15,6 +15,7 @@ endif() set(test_sources block_props_test.cpp + serialize_tags_test.cpp ) include_directories(${GRAS_INCLUDE_DIRS}) diff --git a/tests/serialize_tags_test.cpp b/tests/serialize_tags_test.cpp new file mode 100644 index 0000000..2a07e2b --- /dev/null +++ b/tests/serialize_tags_test.cpp @@ -0,0 +1,76 @@ +// Copyright (C) by Josh Blum. See LICENSE.txt for licensing information. + +#include +#include +#include + +#include +#include +#include + +// include headers that implement a archive in simple text format +#include +#include +#include +#include + +static PMCC loopback_test(PMCC p0) +{ + std::cout << "\ndoing loopback test on " << p0 << std::endl; + std::stringstream ss; + boost::archive::polymorphic_text_oarchive oa(ss); + + oa << p0; + //std::cout << "stringstream holds " << ss.str() << std::endl; + + boost::archive::polymorphic_text_iarchive ia(ss); + PMCC p1; + ia >> p1; + + return p1; +} + +static gras::SBuffer get_random_sbuff(void) +{ + gras::SBufferConfig config; + config.length = 100; + gras::SBuffer buff(config); + for (size_t i = 0; i < buff.length/sizeof(long); i++) + { + reinterpret_cast(buff.get())[i] = std::rand(); + } + return buff; +} + +BOOST_AUTO_TEST_CASE(test_sbuffer_type) +{ + gras::SBuffer src_buff = get_random_sbuff(); + PMCC result = loopback_test(PMC_M(src_buff)); + const gras::SBuffer &result_buff = result.as(); + + BOOST_CHECK_EQUAL(src_buff.length, result_buff.length); + BOOST_CHECK(std::memcmp(src_buff.get(), result_buff.get(), src_buff.length) == 0); +} + +BOOST_AUTO_TEST_CASE(test_null_sbuffer_type) +{ + gras::SBuffer src_buff; + PMCC result = loopback_test(PMC_M(src_buff)); + const gras::SBuffer &result_buff = result.as(); + BOOST_CHECK(not src_buff); + BOOST_CHECK(not result_buff); +} + +BOOST_AUTO_TEST_CASE(test_pkt_msg_type) +{ + gras::PacketMsg pkt_msg; + pkt_msg.buff = get_random_sbuff(); + pkt_msg.info = PMC_M(long(42)); + + PMCC result = loopback_test(PMC_M(pkt_msg)); + const gras::PacketMsg &result_msg = result.as(); + + BOOST_CHECK_EQUAL(pkt_msg.info.type().name(), result_msg.info.type().name()); + BOOST_CHECK(pkt_msg.info.eq(result_msg.info)); + BOOST_CHECK(std::memcmp(pkt_msg.buff.get(), result_msg.buff.get(), pkt_msg.buff.length) == 0); +} -- cgit