@@ -29,10 +29,8 @@ struct STNumber_test : public beast::unit_test::suite
2929 }
3030
3131 void
32- run () override
32+ doRun ()
3333 {
34- static_assert (!std::is_convertible_v<STNumber*, Number*>);
35-
3634 {
3735 STNumber const stnum{sfNumber};
3836 BEAST_EXPECT (stnum.getSType () == STI_NUMBER);
@@ -127,6 +125,38 @@ struct STNumber_test : public beast::unit_test::suite
127125 BEAST_EXPECT (
128126 numberFromJson (sfNumber, " -0.000e6" ) == STNumber (sfNumber, 0 ));
129127
128+ {
129+ NumberRoundModeGuard mg (Number::towards_zero);
130+ // maxint64 9,223,372,036,854,775,807
131+ auto const maxInt =
132+ std::to_string (std::numeric_limits<std::int64_t >::max ());
133+ // minint64 -9,223,372,036,854,775,808
134+ auto const minInt =
135+ std::to_string (std::numeric_limits<std::int64_t >::min ());
136+ if (Number::getMantissaScale () == MantissaRange::small)
137+ {
138+ BEAST_EXPECT (
139+ numberFromJson (sfNumber, maxInt) ==
140+ STNumber (sfNumber, Number{9'223'372'036'854'775 , 3 }));
141+ BEAST_EXPECT (
142+ numberFromJson (sfNumber, minInt) ==
143+ STNumber (sfNumber, Number{-9'223'372'036'854'775 , 3 }));
144+ }
145+ else
146+ {
147+ BEAST_EXPECT (
148+ numberFromJson (sfNumber, maxInt) ==
149+ STNumber (
150+ sfNumber, Number{9'223'372'036'854'775'807 , 0 }));
151+ /*
152+ BEAST_EXPECT(
153+ numberFromJson(sfNumber, minInt) ==
154+ STNumber(
155+ sfNumber, Number{-9'223'372'036'854'775'807, 0}));
156+ */
157+ }
158+ }
159+
130160 constexpr auto imin = std::numeric_limits<int >::min ();
131161 BEAST_EXPECT (
132162 numberFromJson (sfNumber, imin) ==
@@ -279,15 +309,21 @@ struct STNumber_test : public beast::unit_test::suite
279309 }
280310 }
281311 }
312+
313+ void
314+ run () override
315+ {
316+ static_assert (!std::is_convertible_v<STNumber*, Number*>);
317+
318+ for (auto const scale : {MantissaRange::small, MantissaRange::large})
319+ {
320+ NumberMantissaScaleGuard sg (scale);
321+ testcase << to_string (Number::getMantissaScale ());
322+ doRun ();
323+ }
324+ }
282325};
283326
284327BEAST_DEFINE_TESTSUITE (STNumber, protocol, ripple);
285328
286- void
287- testCompile (std::ostream& out)
288- {
289- STNumber number{sfNumber, 42 };
290- out << number;
291- }
292-
293329} // namespace ripple
0 commit comments