@@ -264,7 +264,7 @@ BOOST_AUTO_TEST_CASE(pack_convert_variant_float)
264
264
BOOST_CHECK (val2.is_double ());
265
265
BOOST_CHECK (fabs (12.34 - val2.as_double ()) <= kEPS );
266
266
BOOST_CHECK_NO_THROW (boost::get<double >(val2));
267
- BOOST_CHECK (fabs (val2 .as_double () - val2.as_double ()) <= kEPS );
267
+ BOOST_CHECK (fabs (val1 .as_double () - val2.as_double ()) <= kEPS );
268
268
}
269
269
270
270
BOOST_AUTO_TEST_CASE (object_variant_float)
@@ -277,7 +277,8 @@ BOOST_AUTO_TEST_CASE(object_variant_float)
277
277
BOOST_CHECK (val2.is_double ());
278
278
BOOST_CHECK (fabs (12.34 - val2.as_double ()) <= kEPS );
279
279
BOOST_CHECK_NO_THROW (boost::get<double >(val2));
280
- BOOST_CHECK (fabs (val2.as_double () - val2.as_double ()) <= kEPS );
280
+ BOOST_CHECK (fabs (val1.as_double () - val2.as_double ()) <= kEPS );
281
+ BOOST_CHECK (val1 == val2);
281
282
}
282
283
283
284
BOOST_AUTO_TEST_CASE (object_with_zone_variant_float)
@@ -291,7 +292,116 @@ BOOST_AUTO_TEST_CASE(object_with_zone_variant_float)
291
292
BOOST_CHECK (val2.is_double ());
292
293
BOOST_CHECK (fabs (12.34 - val2.as_double ()) <= kEPS );
293
294
BOOST_CHECK_NO_THROW (boost::get<double >(val2));
294
- BOOST_CHECK (fabs (val2.as_double () - val2.as_double ()) <= kEPS );
295
+ BOOST_CHECK (fabs (val1.as_double () - val2.as_double ()) <= kEPS );
296
+ BOOST_CHECK (val1 == val2);
297
+ }
298
+
299
+ BOOST_AUTO_TEST_CASE (pack_convert_variant_float_zero_atdp_positive)
300
+ {
301
+ std::stringstream ss;
302
+ msgpack::type::variant val1 = 12.0 ;
303
+ BOOST_CHECK (val1.is_uint64_t ());
304
+ BOOST_CHECK_EQUAL (val1.as_uint64_t (), 12 );
305
+ BOOST_CHECK (fabs (12.0 - val1.as_double ()) <= kEPS );
306
+
307
+ msgpack::pack (ss, val1);
308
+
309
+ std::string const & str = ss.str ();
310
+ msgpack::object_handle oh =
311
+ msgpack::unpack (str.data (), str.size ());
312
+ msgpack::type::variant val2 = oh.get ().as <msgpack::type::variant>();
313
+ BOOST_CHECK (val2.is_uint64_t ());
314
+ BOOST_CHECK_EQUAL (val2.as_uint64_t (), 12 );
315
+ BOOST_CHECK_NO_THROW (boost::get<uint64_t >(val2));
316
+ BOOST_CHECK (fabs (12.0 - val2.as_double ()) <= kEPS );
317
+ BOOST_CHECK_EQUAL (val1.as_uint64_t (), val2.as_uint64_t ());
318
+ }
319
+
320
+ BOOST_AUTO_TEST_CASE (object_variant_float_zero_atdp_positive)
321
+ {
322
+ msgpack::type::variant val1 = 12.0 ;
323
+ BOOST_CHECK (val1.is_uint64_t ());
324
+ BOOST_CHECK_EQUAL (val1.as_uint64_t (), 12 );
325
+ BOOST_CHECK (fabs (12.0 - val1.as_double ()) <= kEPS );
326
+ msgpack::object obj (val1);
327
+ msgpack::type::variant val2 = obj.as <msgpack::type::variant>();
328
+ BOOST_CHECK (val2.is_uint64_t ());
329
+ BOOST_CHECK_EQUAL (val2.as_uint64_t (), 12 );
330
+ BOOST_CHECK_NO_THROW (boost::get<uint64_t >(val2));
331
+ BOOST_CHECK (fabs (12.0 - val2.as_double ()) <= kEPS );
332
+ BOOST_CHECK_EQUAL (val1.as_uint64_t (), val2.as_uint64_t ());
333
+ BOOST_CHECK (val1 == val2);
334
+ }
335
+
336
+ BOOST_AUTO_TEST_CASE (object_with_zone_variant_float_zero_atdp_positive)
337
+ {
338
+ msgpack::zone z;
339
+ msgpack::type::variant val1 = 12.0 ;
340
+ BOOST_CHECK (val1.is_uint64_t ());
341
+ BOOST_CHECK_EQUAL (val1.as_uint64_t (), 12 );
342
+ BOOST_CHECK (fabs (12.0 - val1.as_double ()) <= kEPS );
343
+ msgpack::object obj (val1, z);
344
+ msgpack::type::variant val2 = obj.as <msgpack::type::variant>();
345
+ BOOST_CHECK (val2.is_uint64_t ());
346
+ BOOST_CHECK_EQUAL (val2.as_uint64_t (), 12 );
347
+ BOOST_CHECK_NO_THROW (boost::get<uint64_t >(val2));
348
+ BOOST_CHECK_EQUAL (val1.as_uint64_t (), val2.as_uint64_t ());
349
+ BOOST_CHECK (fabs (12.0 - val2.as_double ()) <= kEPS );
350
+ BOOST_CHECK (val1 == val2);
351
+ }
352
+
353
+ BOOST_AUTO_TEST_CASE (pack_convert_variant_float_zero_atdp_negative)
354
+ {
355
+ std::stringstream ss;
356
+ msgpack::type::variant val1 = -12.0 ;
357
+ BOOST_CHECK (val1.is_int64_t ());
358
+ BOOST_CHECK_EQUAL (val1.as_int64_t (), -12 );
359
+ BOOST_CHECK (fabs (-12.0 - val1.as_double ()) <= kEPS );
360
+
361
+ msgpack::pack (ss, val1);
362
+
363
+ std::string const & str = ss.str ();
364
+ msgpack::object_handle oh =
365
+ msgpack::unpack (str.data (), str.size ());
366
+ msgpack::type::variant val2 = oh.get ().as <msgpack::type::variant>();
367
+ BOOST_CHECK (val2.is_int64_t ());
368
+ BOOST_CHECK_EQUAL (val2.as_int64_t (), -12 );
369
+ BOOST_CHECK_NO_THROW (boost::get<int64_t >(val2));
370
+ BOOST_CHECK (fabs (-12.0 - val2.as_double ()) <= kEPS );
371
+ BOOST_CHECK_EQUAL (val1.as_int64_t (), val2.as_int64_t ());
372
+ }
373
+
374
+ BOOST_AUTO_TEST_CASE (object_variant_float_zero_atdp_negative)
375
+ {
376
+ msgpack::type::variant val1 = -12.0 ;
377
+ BOOST_CHECK (val1.is_int64_t ());
378
+ BOOST_CHECK_EQUAL (val1.as_int64_t (), -12 );
379
+ BOOST_CHECK (fabs (-12.0 - val1.as_double ()) <= kEPS );
380
+ msgpack::object obj (val1);
381
+ msgpack::type::variant val2 = obj.as <msgpack::type::variant>();
382
+ BOOST_CHECK (val2.is_int64_t ());
383
+ BOOST_CHECK_EQUAL (val2.as_int64_t (), -12 );
384
+ BOOST_CHECK_NO_THROW (boost::get<int64_t >(val2));
385
+ BOOST_CHECK (fabs (-12.0 - val2.as_double ()) <= kEPS );
386
+ BOOST_CHECK_EQUAL (val1.as_int64_t (), val2.as_int64_t ());
387
+ BOOST_CHECK (val1 == val2);
388
+ }
389
+
390
+ BOOST_AUTO_TEST_CASE (object_with_zone_variant_float_zero_atdp_negative)
391
+ {
392
+ msgpack::zone z;
393
+ msgpack::type::variant val1 = -12.0 ;
394
+ BOOST_CHECK (val1.is_int64_t ());
395
+ BOOST_CHECK_EQUAL (val1.as_int64_t (), -12 );
396
+ BOOST_CHECK (fabs (-12.0 - val1.as_double ()) <= kEPS );
397
+ msgpack::object obj (val1, z);
398
+ msgpack::type::variant val2 = obj.as <msgpack::type::variant>();
399
+ BOOST_CHECK (val2.is_int64_t ());
400
+ BOOST_CHECK_EQUAL (val2.as_int64_t (), -12 );
401
+ BOOST_CHECK_NO_THROW (boost::get<int64_t >(val2));
402
+ BOOST_CHECK (fabs (-12.0 - val2.as_double ()) <= kEPS );
403
+ BOOST_CHECK_EQUAL (val1.as_int64_t (), val2.as_int64_t ());
404
+ BOOST_CHECK (val1 == val2);
295
405
}
296
406
297
407
// str
0 commit comments