3131
3232static constexpr float floatTolerance = 0 .00001f ;
3333static constexpr double doubleTolerance = 0.00000000000001 ;
34+
35+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
3436static const BoostDecFloat16 decFloat16Tolerance{" 0.00000000000001" };
3537static const BoostDecFloat34 decFloat34Tolerance{" 0.00000000000000000000000000000001" };
38+ #endif
3639
3740
3841BOOST_AUTO_TEST_SUITE (NumericConverterSuite)
@@ -77,6 +80,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt16)
7780 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(ScaledInt16{-3'2768 , -4 }, 0 ), -3 );
7881 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(ScaledInt16{-3'276'8 , -1 }, -1 ), -32768 );
7982
83+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
8084 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt16{12'3 , -1 }, -2 ), 12'30 );
8185 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt16{-12'3 , -1 }, -2 ), -12'30 );
8286 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt16{12'3 , -1 }, -4 ), 12'3000 );
@@ -87,6 +91,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt16)
8791 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt16{-3'276'8 , -1 }, 0 ), -3'277 );
8892 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt16{-3'2768 , -4 }, 0 ), -3 );
8993 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt16{-3'276'8 , -1 }, -1 ), -32768 );
94+ #endif
9095
9196 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(ScaledInt16{12'3 , -1 }), 12 .3f , floatTolerance);
9297 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(ScaledInt16{-12'3 , -1 }), -12 .3f , floatTolerance);
@@ -102,6 +107,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt16)
102107 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(ScaledInt16{-3'276'8 , -1 }), -3'276.8 , doubleTolerance);
103108 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(ScaledInt16{-3'2768 , -4 }), -3.2768 , doubleTolerance);
104109
110+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
105111 BOOST_CHECK_CLOSE (
106112 converter.numberToNumber <BoostDecFloat16>(ScaledInt16{12'3 , -1 }), BoostDecFloat16{" 12.3" }, decFloat16Tolerance);
107113 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(ScaledInt16{-12'3 , -1 }), BoostDecFloat16{" -12.3" },
@@ -127,6 +133,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt16)
127133 decFloat34Tolerance);
128134 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(ScaledInt16{-3'2768 , -4 }), BoostDecFloat34{" -3.2768" },
129135 decFloat34Tolerance);
136+ #endif
130137
131138 BOOST_CHECK_EQUAL (converter.numberToString (ScaledInt16{32767 , 0 }), " 32767" );
132139 BOOST_CHECK_EQUAL (converter.numberToString (ScaledInt16{-32768 , 0 }), " -32768" );
@@ -169,6 +176,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt32)
169176 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(ScaledInt32{-214'748'3648 , -4 }, 0 ), -214'748 );
170177 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(ScaledInt32{-214'748'364'8 , -1 }, -1 ), -214'748'364'8 );
171178
179+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
172180 BOOST_CHECK (converter.numberToNumber <BoostInt128>(ScaledInt32{12'3 , -1 }, -2 ) == BoostInt128{12'30 });
173181 BOOST_CHECK (converter.numberToNumber <BoostInt128>(ScaledInt32{-12'3 , -1 }, -2 ) == BoostInt128{-12'30 });
174182 BOOST_CHECK (converter.numberToNumber <BoostInt128>(ScaledInt32{12'3 , -1 }, -4 ) == BoostInt128{12'3000 });
@@ -181,6 +189,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt32)
181189 BOOST_CHECK (converter.numberToNumber <BoostInt128>(ScaledInt32{-214'748'3648 , -4 }, 0 ) == BoostInt128{-214'748 });
182190 BOOST_CHECK (
183191 converter.numberToNumber <BoostInt128>(ScaledInt32{-214'748'364'8 , -1 }, -1 ) == BoostInt128{-2'147'483'648 });
192+ #endif
184193
185194 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(ScaledInt32{12'3 , -1 }), 12 .3f , floatTolerance);
186195 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(ScaledInt32{-12'3 , -1 }), -12 .3f , floatTolerance);
@@ -198,6 +207,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt32)
198207 converter.numberToNumber <double >(ScaledInt32{-214'748'364'8 , -1 }), -214'748'364.8 , doubleTolerance);
199208 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(ScaledInt32{-214'748'3648 , -4 }), -214'748.3648 , doubleTolerance);
200209
210+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
201211 BOOST_CHECK_CLOSE (
202212 converter.numberToNumber <BoostDecFloat16>(ScaledInt32{12'3 , -1 }), BoostDecFloat16{" 12.3" }, decFloat16Tolerance);
203213 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(ScaledInt32{-12'3 , -1 }), BoostDecFloat16{" -12.3" },
@@ -223,6 +233,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt32)
223233 BoostDecFloat34{" -214748364.8" }, decFloat34Tolerance);
224234 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(ScaledInt32{-214'748'3648 , -4 }),
225235 BoostDecFloat34{" -214748.3648" }, decFloat34Tolerance);
236+ #endif
226237
227238 BOOST_CHECK_EQUAL (converter.numberToString (ScaledInt32{2'147'483'647 , 0 }), " 2147483647" );
228239 BOOST_CHECK_EQUAL (converter.numberToString (ScaledInt32{-2'147'483'648 , 0 }), " -2147483648" );
@@ -261,6 +272,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt64)
261272 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(ScaledInt64{-922'337'203'685'477'580'7LL - 1 , -1 }, -1 ),
262273 -922'337'203'685'477'580'7LL - 1 );
263274
275+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
264276 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt64{12'3 , -1 }, -2 ), 12'30 );
265277 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt64{-12'3 , -1 }, -2 ), -12'30 );
266278 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(ScaledInt64{12'3 , -1 }, -4 ), 12'3000 );
@@ -277,6 +289,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt64)
277289 BoostInt128{-922'337'203'685'478 });
278290 BOOST_CHECK (converter.numberToNumber <BoostInt128>(ScaledInt64{-922'337'203'685'477'580'7LL - 1 , -1 }, -1 ) ==
279291 BoostInt128{-922'337'203'685'477'580'7LL - 1 });
292+ #endif
280293
281294 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(ScaledInt64{12'3 , -1 }), 12 .3f , floatTolerance);
282295 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(ScaledInt64{-12'3 , -1 }), -12 .3f , floatTolerance);
@@ -300,6 +313,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt64)
300313 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(ScaledInt64{-922'337'203'685'477'5807LL - 1 , -4 }),
301314 -9.223372036854775807e14 , doubleTolerance);
302315
316+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
303317 BOOST_CHECK_CLOSE (
304318 converter.numberToNumber <BoostDecFloat16>(ScaledInt64{12'3 , -1 }), BoostDecFloat16{" 12.3" }, decFloat16Tolerance);
305319 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(ScaledInt64{-12'3 , -1 }), BoostDecFloat16{" -12.3" },
@@ -325,6 +339,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt64)
325339 BoostDecFloat34{" -922337203685477580.8" }, decFloat34Tolerance);
326340 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(ScaledInt64{-922'337'203'685'477'5807LL - 1 , -4 }),
327341 BoostDecFloat34{" -922337203685477.5808" }, decFloat34Tolerance);
342+ #endif
328343
329344 BOOST_CHECK_EQUAL (converter.numberToString (ScaledInt64{922'337'203'685'477'5807LL , 0 }), " 9223372036854775807" );
330345 BOOST_CHECK_EQUAL (
@@ -337,6 +352,7 @@ BOOST_AUTO_TEST_CASE(convertScaledInt64)
337352 converter.numberToString (ScaledInt64{-922'337'203'685'477'5807LL - 1 , -4 }), " -922337203685477.5808" );
338353}
339354
355+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
340356BOOST_AUTO_TEST_CASE (convertScaledBoostInt128)
341357{
342358 const auto status = CLIENT .newStatus ();
@@ -463,6 +479,7 @@ BOOST_AUTO_TEST_CASE(convertScaledBoostInt128)
463479 converter.numberToString (ScaledBoostInt128{BoostInt128{" -170141183460469231731687303715884105728" }, -4 }),
464480 " -17014118346046923173168730371588410.5728" );
465481}
482+ #endif
466483
467484BOOST_AUTO_TEST_CASE (convertFloat)
468485{
@@ -504,6 +521,7 @@ BOOST_AUTO_TEST_CASE(convertFloat)
504521 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(-3 .2768f , 0 ), -3 );
505522 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(-3'276 .8f , -1 ), -32768 );
506523
524+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
507525 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(12 .3f , -2 ), 12'30 );
508526 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-12 .3f , -2 ), -12'30 );
509527 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(12 .3f , -4 ), 12'3000 );
@@ -514,6 +532,7 @@ BOOST_AUTO_TEST_CASE(convertFloat)
514532 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-3'276 .8f , 0 ), -3'277 );
515533 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-3 .2768f , 0 ), -3 );
516534 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-3'276 .8f , -1 ), -32768 );
535+ #endif
517536
518537 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(12 .3f ), 12.3 , floatTolerance);
519538 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(-12 .3f ), -12.3 , floatTolerance);
@@ -522,6 +541,7 @@ BOOST_AUTO_TEST_CASE(convertFloat)
522541 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(-3'276 .8f ), -3'276.8 , floatTolerance);
523542 BOOST_CHECK_CLOSE (converter.numberToNumber <double >(-3 .2768f ), -3.2768 , floatTolerance);
524543
544+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
525545 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(12 .3f ), BoostDecFloat16{" 12.3" }, floatTolerance);
526546 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(-12 .3f ), BoostDecFloat16{" -12.3" }, floatTolerance);
527547 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(3276 .7f ), BoostDecFloat16{" 3276.7" }, floatTolerance);
@@ -535,6 +555,7 @@ BOOST_AUTO_TEST_CASE(convertFloat)
535555 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(3 .2767f ), BoostDecFloat34{" 3.2767" }, floatTolerance);
536556 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(-3276 .8f ), BoostDecFloat34{" -3276.8" }, floatTolerance);
537557 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(-3 .2768f ), BoostDecFloat34{" -3.2768" }, floatTolerance);
558+ #endif
538559
539560 BOOST_CHECK_CLOSE (std::stof (converter.numberToString (12 .3f )), 12 .3f , floatTolerance);
540561 BOOST_CHECK_CLOSE (std::stof (converter.numberToString (-12 .3f )), -12 .3f , floatTolerance);
@@ -584,6 +605,7 @@ BOOST_AUTO_TEST_CASE(convertDouble)
584605 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(-3.2768 , 0 ), -3 );
585606 BOOST_CHECK_EQUAL (converter.numberToNumber <std::int64_t >(-3'276.8 , -1 ), -32768 );
586607
608+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
587609 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(12.3 , -2 ), 12'30 );
588610 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-12.3 , -2 ), -12'30 );
589611 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(12.3 , -4 ), 12'3000 );
@@ -594,6 +616,7 @@ BOOST_AUTO_TEST_CASE(convertDouble)
594616 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-3'276.8 , 0 ), -3'277 );
595617 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-3.2768 , 0 ), -3 );
596618 BOOST_CHECK_EQUAL (converter.numberToNumber <BoostInt128>(-3'276.8 , -1 ), -32768 );
619+ #endif
597620
598621 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(12.3 ), 12 .3f , floatTolerance);
599622 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(-12.3 ), -12 .3f , floatTolerance);
@@ -602,6 +625,7 @@ BOOST_AUTO_TEST_CASE(convertDouble)
602625 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(-3'276.8 ), -3'276 .8f , floatTolerance);
603626 BOOST_CHECK_CLOSE (converter.numberToNumber <float >(-3.2768 ), -3 .2768f , floatTolerance);
604627
628+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
605629 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(12.3 ), BoostDecFloat16{" 12.3" }, doubleTolerance);
606630 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(-12.3 ), BoostDecFloat16{" -12.3" }, doubleTolerance);
607631 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat16>(3276.7 ), BoostDecFloat16{" 3276.7" }, doubleTolerance);
@@ -615,6 +639,7 @@ BOOST_AUTO_TEST_CASE(convertDouble)
615639 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(3.2767 ), BoostDecFloat34{" 3.2767" }, doubleTolerance);
616640 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(-3276.8 ), BoostDecFloat34{" -3276.8" }, doubleTolerance);
617641 BOOST_CHECK_CLOSE (converter.numberToNumber <BoostDecFloat34>(-3.2768 ), BoostDecFloat34{" -3.2768" }, doubleTolerance);
642+ #endif
618643
619644 BOOST_CHECK_CLOSE (std::stod (converter.numberToString (12.3 )), 12.3 , doubleTolerance);
620645 BOOST_CHECK_CLOSE (std::stod (converter.numberToString (-12.3 )), -12.3 , doubleTolerance);
@@ -624,6 +649,8 @@ BOOST_AUTO_TEST_CASE(convertDouble)
624649 BOOST_CHECK_CLOSE (std::stod (converter.numberToString (-3.2768 )), -3.2768 , doubleTolerance);
625650}
626651
652+ #if FB_CPP_USE_BOOST_MULTIPRECISION != 0
653+
627654BOOST_AUTO_TEST_CASE (convertDecFloat16)
628655{
629656 const auto status = CLIENT .newStatus ();
@@ -848,4 +875,6 @@ BOOST_AUTO_TEST_CASE(decFloat34NumberLimits)
848875 BOOST_CHECK_EQUAL (BoostDecFloat34{lowestString}, lowestValue);
849876}
850877
878+ #endif
879+
851880BOOST_AUTO_TEST_SUITE_END ()
0 commit comments