diff --git a/example/speed_test.cc b/example/speed_test.cc index e410cd65..b8fb7ab1 100644 --- a/example/speed_test.cc +++ b/example/speed_test.cc @@ -60,10 +60,86 @@ void test_map_pack_unpack() { std::cout << "Convert finished..." << std::endl; } +template +struct vecvec { + typedef std::vector::type> type; + static void fill(type& v, std::size_t num_of_elems, T const& val) { + for (int elem = 0; elem < num_of_elems; ++elem) { + typename vecvec::type child; + vecvec::fill(child, num_of_elems, val); + v.push_back(child); + } + } +}; + +template +struct vecvec { + typedef std::vector type; + static void fill(type& v, std::size_t num_of_elems, T const& val) { + for (int elem = 0; elem < num_of_elems; ++elem) { + v.push_back(val); + } + } +}; + +void test_array_of_array() { + std::cout << "[TEST][array_of_array]" << std::endl; + // setup + int const depth = 16; + std::cout << "Setting up array data..." << std::endl; + typename vecvec::type v1; + vecvec::fill(v1, 3, 42); + + std::cout << "Start packing..." << std::endl; + std::stringstream buffer; + { + boost::timer::cpu_timer timer; + msgpack::pack(buffer, v1); + std::string result = timer.format(); + std::cout << result << std::endl; + } + std::cout << "Pack finished..." << std::endl; + + buffer.seekg(0); + std::string str(buffer.str()); + + // deserialized object is valid during the msgpack::zone instance alive. + msgpack::zone mempool; + msgpack::object deserialized; + std::cout << "Start unpacking..." << std::endl; + { + boost::timer::cpu_timer timer; + msgpack::unpack(str.data(), str.size(), NULL, &mempool, &deserialized); + std::string result = timer.format(); + std::cout << result << std::endl; + } + std::cout << "Unpack finished..." << std::endl; + + msgpack::unpacked unpacked; + std::cout << "Start unpacking...by void unpack(unpacked* result, const char* data, size_t len, size_t* offset = NULL)" << std::endl; + { + boost::timer::cpu_timer timer; + msgpack::unpack(&unpacked, str.data(), str.size()); + std::string result = timer.format(); + std::cout << result << std::endl; + } + std::cout << "Unpack finished..." << std::endl; + typename vecvec::type v2; + std::cout << "Start converting..." << std::endl; + { + boost::timer::cpu_timer timer; + deserialized.convert(&v2); + std::string result = timer.format(); + std::cout << result << std::endl; + } + std::cout << "Convert finished..." << std::endl; +} + int main(void) { test_map_pack_unpack(); + test_array_of_array(); }