@@ -154,6 +154,8 @@ BOOST_AUTO_TEST_CASE(simple_buffer_float)
154154 v.push_back (-0.0 );
155155 v.push_back (1.0 );
156156 v.push_back (-1.0 );
157+ v.push_back (1 .1f );
158+ v.push_back (-1 .1f );
157159 v.push_back (numeric_limits<float >::min ());
158160 v.push_back (numeric_limits<float >::max ());
159161 v.push_back (nanf (" tag" ));
@@ -186,6 +188,12 @@ BOOST_AUTO_TEST_CASE(simple_buffer_float)
186188 BOOST_CHECK (std::isinf (val2));
187189 else
188190 BOOST_CHECK (fabs (val2 - val1) <= kEPS );
191+
192+ // check for compact storing of float
193+ if (val1 == val1 && val1 >= float (std::numeric_limits<int64_t >::min ()) && val1 <= float (std::numeric_limits<int64_t >::max ()) && val1 == float (int64_t (val1)))
194+ BOOST_REQUIRE_EQUAL (sbuf.size (),1 );
195+ else
196+ BOOST_REQUIRE_EQUAL (sbuf.data ()[0 ],char (0xca ));
189197 }
190198}
191199
@@ -236,6 +244,8 @@ BOOST_AUTO_TEST_CASE(simple_buffer_double)
236244 v.push_back (-0.0 );
237245 v.push_back (1.0 );
238246 v.push_back (-1.0 );
247+ v.push_back (1.1 );
248+ v.push_back (-1.1 );
239249 v.push_back (numeric_limits<double >::min ());
240250 v.push_back (numeric_limits<double >::max ());
241251 v.push_back (nanf (" tag" ));
@@ -272,6 +282,12 @@ BOOST_AUTO_TEST_CASE(simple_buffer_double)
272282 BOOST_CHECK (std::isinf (val2));
273283 else
274284 BOOST_CHECK (fabs (val2 - val1) <= kEPS );
285+
286+ // check for compact storing of double
287+ if (val1 == val1 && val1 >= double (std::numeric_limits<int64_t >::min ()) && val1 <= double (std::numeric_limits<int64_t >::max ()) && val1 == double (int64_t (val1)))
288+ BOOST_REQUIRE_EQUAL (sbuf.size (),1 );
289+ else
290+ BOOST_REQUIRE_EQUAL (uint8_t (sbuf.data ()[0 ]),uint8_t (0xcb ));
275291 }
276292}
277293
0 commit comments