56
56
#define FASTFLOAT_ODDPLATFORM 1
57
57
#endif
58
58
59
- #define iHexAndDec (v ) \
60
- (std::ostringstream{} << std::hex << " 0x" << (v) << " (" << std::dec << (v) \
61
- << " )" ) \
62
- .str()
63
- #define fHexAndDec (v ) \
64
- (std::ostringstream{} << std::hexfloat << (v) << " (" << std::defaultfloat \
65
- << std::setprecision(DBL_MAX_10_EXP + 1 ) << (v) \
66
- << " )" ) \
67
- .str()
59
+ template <typename T> std::string iHexAndDec (T v) {
60
+ std::ostringstream ss;
61
+ ss << std::hex << " 0x" << (v) << " (" << std::dec << (v) << " )" ;
62
+ return ss.str ();
63
+ }
64
+
65
+ template <typename T> std::string fHexAndDec (T v) {
66
+ std::ostringstream ss;
67
+ ss << std::hexfloat << (v) << " (" << std::defaultfloat
68
+ << std::setprecision (DBL_MAX_10_EXP + 1 ) << (v) << " )" ;
69
+ return ss.str ();
70
+ }
68
71
69
72
char const *round_name (int d) {
70
73
switch (d) {
@@ -174,7 +177,7 @@ TEST_CASE("double.parse_zero") {
174
177
auto r1 = fast_float::from_chars (zero, zero + 1 , f);
175
178
CHECK (r1.ec == std::errc ());
176
179
std::cout << " FE_UPWARD parsed zero as " << fHexAndDec (f) << std::endl;
177
- CHECK (f == 0 );
180
+ CHECK (f == 0 . );
178
181
::memcpy (&float64_parsed, &f, sizeof (f));
179
182
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
180
183
<< std::endl;
@@ -184,7 +187,7 @@ TEST_CASE("double.parse_zero") {
184
187
auto r2 = fast_float::from_chars (zero, zero + 1 , f);
185
188
CHECK (r2.ec == std::errc ());
186
189
std::cout << " FE_TOWARDZERO parsed zero as " << fHexAndDec (f) << std::endl;
187
- CHECK (f == 0 );
190
+ CHECK (f == 0 . );
188
191
::memcpy (&float64_parsed, &f, sizeof (f));
189
192
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
190
193
<< std::endl;
@@ -194,7 +197,7 @@ TEST_CASE("double.parse_zero") {
194
197
auto r3 = fast_float::from_chars (zero, zero + 1 , f);
195
198
CHECK (r3.ec == std::errc ());
196
199
std::cout << " FE_DOWNWARD parsed zero as " << fHexAndDec (f) << std::endl;
197
- CHECK (f == 0 );
200
+ CHECK (f == 0 . );
198
201
::memcpy (&float64_parsed, &f, sizeof (f));
199
202
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
200
203
<< std::endl;
@@ -204,7 +207,7 @@ TEST_CASE("double.parse_zero") {
204
207
auto r4 = fast_float::from_chars (zero, zero + 1 , f);
205
208
CHECK (r4.ec == std::errc ());
206
209
std::cout << " FE_TONEAREST parsed zero as " << fHexAndDec (f) << std::endl;
207
- CHECK (f == 0 );
210
+ CHECK (f == 0 . );
208
211
::memcpy (&float64_parsed, &f, sizeof (f));
209
212
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
210
213
<< std::endl;
@@ -226,7 +229,7 @@ TEST_CASE("double.parse_negative_zero") {
226
229
CHECK (r1.ec == std::errc ());
227
230
std::cout << " FE_UPWARD parsed negative zero as " << fHexAndDec (f)
228
231
<< std::endl;
229
- CHECK (f == 0 );
232
+ CHECK (f == 0 . );
230
233
::memcpy (&float64_parsed, &f, sizeof (f));
231
234
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
232
235
<< std::endl;
@@ -237,7 +240,7 @@ TEST_CASE("double.parse_negative_zero") {
237
240
CHECK (r2.ec == std::errc ());
238
241
std::cout << " FE_TOWARDZERO parsed negative zero as " << fHexAndDec (f)
239
242
<< std::endl;
240
- CHECK (f == 0 );
243
+ CHECK (f == 0 . );
241
244
::memcpy (&float64_parsed, &f, sizeof (f));
242
245
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
243
246
<< std::endl;
@@ -248,7 +251,7 @@ TEST_CASE("double.parse_negative_zero") {
248
251
CHECK (r3.ec == std::errc ());
249
252
std::cout << " FE_DOWNWARD parsed negative zero as " << fHexAndDec (f)
250
253
<< std::endl;
251
- CHECK (f == 0 );
254
+ CHECK (f == 0 . );
252
255
::memcpy (&float64_parsed, &f, sizeof (f));
253
256
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
254
257
<< std::endl;
@@ -259,7 +262,7 @@ TEST_CASE("double.parse_negative_zero") {
259
262
CHECK (r4.ec == std::errc ());
260
263
std::cout << " FE_TONEAREST parsed negative zero as " << fHexAndDec (f)
261
264
<< std::endl;
262
- CHECK (f == 0 );
265
+ CHECK (f == 0 . );
263
266
::memcpy (&float64_parsed, &f, sizeof (f));
264
267
std::cout << " double as uint64_t is " << iHexAndDec (float64_parsed)
265
268
<< std::endl;
@@ -312,7 +315,7 @@ TEST_CASE("float.parse_zero") {
312
315
auto r1 = fast_float::from_chars (zero, zero + 1 , f);
313
316
CHECK (r1.ec == std::errc ());
314
317
std::cout << " FE_UPWARD parsed zero as " << fHexAndDec (f) << std::endl;
315
- CHECK (f == 0 );
318
+ CHECK (f == 0 . f );
316
319
::memcpy (&float32_parsed, &f, sizeof (f));
317
320
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
318
321
<< std::endl;
@@ -322,7 +325,7 @@ TEST_CASE("float.parse_zero") {
322
325
auto r2 = fast_float::from_chars (zero, zero + 1 , f);
323
326
CHECK (r2.ec == std::errc ());
324
327
std::cout << " FE_TOWARDZERO parsed zero as " << fHexAndDec (f) << std::endl;
325
- CHECK (f == 0 );
328
+ CHECK (f == 0 . f );
326
329
::memcpy (&float32_parsed, &f, sizeof (f));
327
330
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
328
331
<< std::endl;
@@ -332,7 +335,7 @@ TEST_CASE("float.parse_zero") {
332
335
auto r3 = fast_float::from_chars (zero, zero + 1 , f);
333
336
CHECK (r3.ec == std::errc ());
334
337
std::cout << " FE_DOWNWARD parsed zero as " << fHexAndDec (f) << std::endl;
335
- CHECK (f == 0 );
338
+ CHECK (f == 0 . f );
336
339
::memcpy (&float32_parsed, &f, sizeof (f));
337
340
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
338
341
<< std::endl;
@@ -342,7 +345,7 @@ TEST_CASE("float.parse_zero") {
342
345
auto r4 = fast_float::from_chars (zero, zero + 1 , f);
343
346
CHECK (r4.ec == std::errc ());
344
347
std::cout << " FE_TONEAREST parsed zero as " << fHexAndDec (f) << std::endl;
345
- CHECK (f == 0 );
348
+ CHECK (f == 0 . f );
346
349
::memcpy (&float32_parsed, &f, sizeof (f));
347
350
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
348
351
<< std::endl;
@@ -364,7 +367,7 @@ TEST_CASE("float.parse_negative_zero") {
364
367
CHECK (r1.ec == std::errc ());
365
368
std::cout << " FE_UPWARD parsed negative zero as " << fHexAndDec (f)
366
369
<< std::endl;
367
- CHECK (f == 0 );
370
+ CHECK (f == 0 . f );
368
371
::memcpy (&float32_parsed, &f, sizeof (f));
369
372
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
370
373
<< std::endl;
@@ -375,7 +378,7 @@ TEST_CASE("float.parse_negative_zero") {
375
378
CHECK (r2.ec == std::errc ());
376
379
std::cout << " FE_TOWARDZERO parsed negative zero as " << fHexAndDec (f)
377
380
<< std::endl;
378
- CHECK (f == 0 );
381
+ CHECK (f == 0 . f );
379
382
::memcpy (&float32_parsed, &f, sizeof (f));
380
383
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
381
384
<< std::endl;
@@ -386,7 +389,7 @@ TEST_CASE("float.parse_negative_zero") {
386
389
CHECK (r3.ec == std::errc ());
387
390
std::cout << " FE_DOWNWARD parsed negative zero as " << fHexAndDec (f)
388
391
<< std::endl;
389
- CHECK (f == 0 );
392
+ CHECK (f == 0 . f );
390
393
::memcpy (&float32_parsed, &f, sizeof (f));
391
394
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
392
395
<< std::endl;
@@ -397,7 +400,7 @@ TEST_CASE("float.parse_negative_zero") {
397
400
CHECK (r4.ec == std::errc ());
398
401
std::cout << " FE_TONEAREST parsed negative zero as " << fHexAndDec (f)
399
402
<< std::endl;
400
- CHECK (f == 0 );
403
+ CHECK (f == 0 . f );
401
404
::memcpy (&float32_parsed, &f, sizeof (f));
402
405
std::cout << " float as uint32_t is " << iHexAndDec (float32_parsed)
403
406
<< std::endl;
0 commit comments