mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-04-01 01:16:52 +02:00
Added object that has integer to float and double converter.
This commit is contained in:
parent
8bc827ebf5
commit
260ce4aa1d
@ -29,8 +29,18 @@ namespace msgpack {
|
||||
|
||||
inline float& operator>> (object o, float& v)
|
||||
{
|
||||
if(o.type != type::DOUBLE) { throw type_error(); }
|
||||
v = (float)o.via.dec;
|
||||
if(o.type == type::DOUBLE) {
|
||||
v = (float)o.via.dec;
|
||||
}
|
||||
else if (o.type == type::POSITIVE_INTEGER) {
|
||||
v = (float)o.via.u64;
|
||||
}
|
||||
else if (o.type == type::NEGATIVE_INTEGER) {
|
||||
v = (float)o.via.i64;
|
||||
}
|
||||
else {
|
||||
throw type_error();
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
@ -44,8 +54,18 @@ inline packer<Stream>& operator<< (packer<Stream>& o, const float& v)
|
||||
|
||||
inline double& operator>> (object o, double& v)
|
||||
{
|
||||
if(o.type != type::DOUBLE) { throw type_error(); }
|
||||
v = o.via.dec;
|
||||
if(o.type == type::DOUBLE) {
|
||||
v = o.via.dec;
|
||||
}
|
||||
else if (o.type == type::POSITIVE_INTEGER) {
|
||||
v = (double)o.via.u64;
|
||||
}
|
||||
else if (o.type == type::NEGATIVE_INTEGER) {
|
||||
v = (double)o.via.i64;
|
||||
}
|
||||
else {
|
||||
throw type_error();
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -178,6 +178,110 @@ TEST(MSGPACK, simple_buffer_float)
|
||||
}
|
||||
}
|
||||
|
||||
TEST(MSGPACK, simple_buffer_float_from_signed_long_long)
|
||||
{
|
||||
vector<signed long long> v;
|
||||
v.push_back(0);
|
||||
v.push_back(1);
|
||||
v.push_back(-1);
|
||||
v.push_back(numeric_limits<signed long long>::min());
|
||||
v.push_back(numeric_limits<signed long long>::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);
|
||||
float val2;
|
||||
obj.convert(&val2);
|
||||
EXPECT_TRUE(fabs(val2 - val1) <= kEPS);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(MSGPACK, simple_buffer_float_from_unsigned_long_long)
|
||||
{
|
||||
vector<unsigned long long> v;
|
||||
v.push_back(0);
|
||||
v.push_back(1);
|
||||
v.push_back(2);
|
||||
v.push_back(numeric_limits<unsigned long long>::min());
|
||||
v.push_back(numeric_limits<unsigned long long>::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);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(MSGPACK, simple_buffer_double_from_signed_long_long)
|
||||
{
|
||||
vector<signed long long> v;
|
||||
v.push_back(0);
|
||||
v.push_back(1);
|
||||
v.push_back(-1);
|
||||
v.push_back(numeric_limits<signed long long>::min());
|
||||
v.push_back(numeric_limits<signed long long>::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<unsigned long long> v;
|
||||
v.push_back(0);
|
||||
v.push_back(1);
|
||||
v.push_back(2);
|
||||
v.push_back(numeric_limits<unsigned long long>::min());
|
||||
v.push_back(numeric_limits<unsigned long long>::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);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(MSGPACK, simple_buffer_double)
|
||||
{
|
||||
vector<double> v;
|
||||
|
Loading…
x
Reference in New Issue
Block a user