diff --git a/Makefile b/Makefile index 12c1ff40..027d782c 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ -all: test.cpp +all: test.cpp unittests g++ -std=c++0x test.cpp -o test -ljsoncpp -I./.. +unittests: unittests.cpp + g++ -std=c++0x unittests.cpp -o unittests -lboost_unit_test_framework -I./.. + diff --git a/unittests.cpp b/unittests.cpp new file mode 100644 index 00000000..9a30e032 --- /dev/null +++ b/unittests.cpp @@ -0,0 +1,88 @@ +#include +#include +#include + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE Hello +#include + + +template +typename std::enable_if::value, T>::type +random_value(std::mt19937 & gen) +{ return std::uniform_real_distribution(-10000.0, 10000.0)(gen); } + +template +typename std::enable_if::value, T>::type +random_value(std::mt19937 & gen) +{ return std::uniform_int_distribution(std::numeric_limits::lowest(), std::numeric_limits::max())(gen); } + +BOOST_AUTO_TEST_CASE( pod ) +{ + std::random_device rd; + std::mt19937 gen(rd()); + + for(size_t i=0; i<100; ++i) + { + + uint8_t const o_uint8 = random_value(gen); + int8_t const o_int8 = random_value(gen); + uint16_t const o_uint16 = random_value(gen); + int16_t const o_int16 = random_value(gen); + uint32_t const o_uint32 = random_value(gen); + int32_t const o_int32 = random_value(gen); + uint64_t const o_uint64 = random_value(gen); + int64_t const o_int64 = random_value(gen); + float const o_float = random_value(gen); + double const o_double = random_value(gen); + + std::ostringstream os; + cereal::BinaryOutputArchive oar(os); + oar & o_uint8; + oar & o_int8; + oar & o_uint16; + oar & o_int16; + oar & o_uint32; + oar & o_int32; + oar & o_uint64; + oar & o_int64; + oar & o_float; + oar & o_double; + + uint8_t i_uint8 = 0.0; + int8_t i_int8 = 0.0; + uint16_t i_uint16 = 0.0; + int16_t i_int16 = 0.0; + uint32_t i_uint32 = 0.0; + int32_t i_int32 = 0.0; + uint64_t i_uint64 = 0.0; + int64_t i_int64 = 0.0; + float i_float = 0.0; + double i_double = 0.0; + + std::istringstream is(os.str()); + cereal::BinaryInputArchive iar(is); + iar & i_uint8; + iar & i_int8; + iar & i_uint16; + iar & i_int16; + iar & i_uint32; + iar & i_int32; + iar & i_uint64; + iar & i_int64; + iar & i_float; + iar & i_double; + + BOOST_CHECK_EQUAL(i_uint8 , o_uint8); + BOOST_CHECK_EQUAL(i_int8 , o_int8); + BOOST_CHECK_EQUAL(i_uint16 , o_uint16); + BOOST_CHECK_EQUAL(i_int16 , o_int16); + BOOST_CHECK_EQUAL(i_uint32 , o_uint32); + BOOST_CHECK_EQUAL(i_int32 , o_int32); + BOOST_CHECK_EQUAL(i_uint64 , o_uint64); + BOOST_CHECK_EQUAL(i_int64 , o_int64); + BOOST_CHECK_EQUAL(i_float , o_float); + BOOST_CHECK_EQUAL(i_double , o_double); + } + +}