diff --git a/test/msgpack_test.cpp b/test/msgpack_test.cpp index aee9735e..77e79e08 100644 --- a/test/msgpack_test.cpp +++ b/test/msgpack_test.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -178,109 +179,58 @@ TEST(MSGPACK, simple_buffer_float) } } -TEST(MSGPACK, simple_buffer_float_from_signed_long_long) +namespace { +template +struct TypePair { + typedef F float_type; + typedef I integer_type; +}; +} // namespace + +template +class IntegerToFloatingPointTest : public testing::Test { +}; +TYPED_TEST_CASE_P(IntegerToFloatingPointTest); + +TYPED_TEST_P(IntegerToFloatingPointTest, simple_buffer) { - vector v; + typedef typename TypeParam::float_type float_type; + typedef typename TypeParam::integer_type integer_type; + vector v; v.push_back(0); v.push_back(1); - v.push_back(-1); - v.push_back(numeric_limits::min()); - v.push_back(numeric_limits::max()); + if (is_signed::value) v.push_back(-1); + else v.push_back(2); + v.push_back(numeric_limits::min()); + v.push_back(numeric_limits::max()); for (unsigned int i = 0; i < kLoop; i++) { v.push_back(rand()); } for (unsigned int i = 0; i < v.size() ; i++) { msgpack::sbuffer sbuf; - signed long long val1 = v[i]; + integer_type val1 = v[i]; msgpack::pack(sbuf, val1); msgpack::zone z; msgpack::object obj; msgpack::unpack_return ret = msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj); EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret); - float val2; + float_type val2; obj.convert(&val2); EXPECT_TRUE(fabs(val2 - val1) <= kEPS); } } -TEST(MSGPACK, simple_buffer_float_from_unsigned_long_long) -{ - vector v; - v.push_back(0); - v.push_back(1); - v.push_back(2); - v.push_back(numeric_limits::min()); - v.push_back(numeric_limits::max()); - for (unsigned int i = 0; i < kLoop; i++) { - v.push_back(rand()); - } - for (unsigned int i = 0; i < v.size() ; i++) { - msgpack::sbuffer sbuf; - unsigned long long val1 = v[i]; - msgpack::pack(sbuf, val1); - msgpack::zone z; - msgpack::object obj; - msgpack::unpack_return ret = - msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj); - EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret); - float val2; - obj.convert(&val2); - EXPECT_TRUE(fabs(val2 - val1) <= kEPS); - } -} +REGISTER_TYPED_TEST_CASE_P(IntegerToFloatingPointTest, + simple_buffer); -TEST(MSGPACK, simple_buffer_double_from_signed_long_long) -{ - vector v; - v.push_back(0); - v.push_back(1); - v.push_back(-1); - v.push_back(numeric_limits::min()); - v.push_back(numeric_limits::max()); - for (unsigned int i = 0; i < kLoop; i++) { - v.push_back(rand()); - } - for (unsigned int i = 0; i < v.size() ; i++) { - msgpack::sbuffer sbuf; - signed long long val1 = v[i]; - msgpack::pack(sbuf, val1); - msgpack::zone z; - msgpack::object obj; - msgpack::unpack_return ret = - msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj); - EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret); - double val2; - obj.convert(&val2); - EXPECT_TRUE(fabs(val2 - val1) <= kEPS); - } -} - -TEST(MSGPACK, simple_buffer_double_from_unsigned_long_long) -{ - vector v; - v.push_back(0); - v.push_back(1); - v.push_back(2); - v.push_back(numeric_limits::min()); - v.push_back(numeric_limits::max()); - for (unsigned int i = 0; i < kLoop; i++) { - v.push_back(rand()); - } - for (unsigned int i = 0; i < v.size() ; i++) { - msgpack::sbuffer sbuf; - unsigned long long val1 = v[i]; - msgpack::pack(sbuf, val1); - msgpack::zone z; - msgpack::object obj; - msgpack::unpack_return ret = - msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj); - EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret); - double val2; - obj.convert(&val2); - EXPECT_TRUE(fabs(val2 - val1) <= kEPS); - } -} +typedef testing::Types, + TypePair, + TypePair, + TypePair > IntegerToFloatingPointTestTypes; +INSTANTIATE_TYPED_TEST_CASE_P(IntegerToFloatingPointTestInstance, + IntegerToFloatingPointTest, + IntegerToFloatingPointTestTypes); TEST(MSGPACK, simple_buffer_double) {