20 #include <ripple/basics/Log.h>
21 #include <ripple/basics/random.h>
22 #include <ripple/beast/unit_test.h>
23 #include <ripple/protocol/STAmount.h>
70 if (valueDigits == 999999999)
103 BEAST_EXPECT(!res.
native());
107 BEAST_EXPECT(!cmp.
native());
128 BEAST_EXPECT(!prod1.
native());
139 fail(
"Multiplication result is not exact");
154 BEAST_EXPECT(amount.
getText() == value);
158 BEAST_EXPECT(!success);
166 testcase(
"set value (native)");
199 testcase(
"set value (iou)");
232 testcase(
"native currency");
239 unexpected(!zeroSt.
native(),
"STAmount fail");
240 unexpected(!hundred.
native(),
"STAmount fail");
241 unexpected(zeroSt != beast::zero,
"STAmount fail");
242 unexpected(
one == beast::zero,
"STAmount fail");
243 unexpected(hundred == beast::zero,
"STAmount fail");
244 unexpected((zeroSt < zeroSt),
"STAmount fail");
245 unexpected(!(zeroSt <
one),
"STAmount fail");
246 unexpected(!(zeroSt < hundred),
"STAmount fail");
247 unexpected((
one < zeroSt),
"STAmount fail");
248 unexpected((
one <
one),
"STAmount fail");
249 unexpected(!(
one < hundred),
"STAmount fail");
250 unexpected((hundred < zeroSt),
"STAmount fail");
251 unexpected((hundred <
one),
"STAmount fail");
252 unexpected((hundred < hundred),
"STAmount fail");
253 unexpected((zeroSt > zeroSt),
"STAmount fail");
254 unexpected((zeroSt >
one),
"STAmount fail");
255 unexpected((zeroSt > hundred),
"STAmount fail");
256 unexpected(!(
one > zeroSt),
"STAmount fail");
257 unexpected((
one >
one),
"STAmount fail");
258 unexpected((
one > hundred),
"STAmount fail");
259 unexpected(!(hundred > zeroSt),
"STAmount fail");
260 unexpected(!(hundred >
one),
"STAmount fail");
261 unexpected((hundred > hundred),
"STAmount fail");
262 unexpected(!(zeroSt <= zeroSt),
"STAmount fail");
263 unexpected(!(zeroSt <=
one),
"STAmount fail");
264 unexpected(!(zeroSt <= hundred),
"STAmount fail");
265 unexpected((
one <= zeroSt),
"STAmount fail");
266 unexpected(!(
one <=
one),
"STAmount fail");
267 unexpected(!(
one <= hundred),
"STAmount fail");
268 unexpected((hundred <= zeroSt),
"STAmount fail");
269 unexpected((hundred <=
one),
"STAmount fail");
270 unexpected(!(hundred <= hundred),
"STAmount fail");
271 unexpected(!(zeroSt >= zeroSt),
"STAmount fail");
272 unexpected((zeroSt >=
one),
"STAmount fail");
273 unexpected((zeroSt >= hundred),
"STAmount fail");
274 unexpected(!(
one >= zeroSt),
"STAmount fail");
275 unexpected(!(
one >=
one),
"STAmount fail");
276 unexpected((
one >= hundred),
"STAmount fail");
277 unexpected(!(hundred >= zeroSt),
"STAmount fail");
278 unexpected(!(hundred >=
one),
"STAmount fail");
279 unexpected(!(hundred >= hundred),
"STAmount fail");
280 unexpected(!(zeroSt == zeroSt),
"STAmount fail");
281 unexpected((zeroSt ==
one),
"STAmount fail");
282 unexpected((zeroSt == hundred),
"STAmount fail");
283 unexpected((
one == zeroSt),
"STAmount fail");
284 unexpected(!(
one ==
one),
"STAmount fail");
285 unexpected((
one == hundred),
"STAmount fail");
286 unexpected((hundred == zeroSt),
"STAmount fail");
287 unexpected((hundred ==
one),
"STAmount fail");
288 unexpected(!(hundred == hundred),
"STAmount fail");
289 unexpected((zeroSt != zeroSt),
"STAmount fail");
290 unexpected(!(zeroSt !=
one),
"STAmount fail");
291 unexpected(!(zeroSt != hundred),
"STAmount fail");
292 unexpected(!(
one != zeroSt),
"STAmount fail");
293 unexpected((
one !=
one),
"STAmount fail");
294 unexpected(!(
one != hundred),
"STAmount fail");
295 unexpected(!(hundred != zeroSt),
"STAmount fail");
296 unexpected(!(hundred !=
one),
"STAmount fail");
297 unexpected((hundred != hundred),
"STAmount fail");
298 unexpected(
STAmount().getText() !=
"0",
"STAmount fail");
299 unexpected(
STAmount(31).getText() !=
"31",
"STAmount fail");
300 unexpected(
STAmount(310).getText() !=
"310",
"STAmount fail");
303 unexpected(!
to_currency(c,
"USD"),
"create USD currency");
304 unexpected(
to_string(c) !=
"USD",
"check USD currency");
306 const std::string cur =
"015841551A748AD2C1F76FF6ECB0CCCD00000000";
307 unexpected(!
to_currency(c, cur),
"create custom currency");
308 unexpected(
to_string(c) != cur,
"check custom currency");
316 testcase(
"custom currency");
322 unexpected(zeroSt.native(),
"STAmount fail");
323 unexpected(hundred.
native(),
"STAmount fail");
324 unexpected(zeroSt != beast::zero,
"STAmount fail");
325 unexpected(
one == beast::zero,
"STAmount fail");
326 unexpected(hundred == beast::zero,
"STAmount fail");
327 unexpected((zeroSt < zeroSt),
"STAmount fail");
328 unexpected(!(zeroSt <
one),
"STAmount fail");
329 unexpected(!(zeroSt < hundred),
"STAmount fail");
330 unexpected((
one < zeroSt),
"STAmount fail");
331 unexpected((
one <
one),
"STAmount fail");
332 unexpected(!(
one < hundred),
"STAmount fail");
333 unexpected((hundred < zeroSt),
"STAmount fail");
334 unexpected((hundred <
one),
"STAmount fail");
335 unexpected((hundred < hundred),
"STAmount fail");
336 unexpected((zeroSt > zeroSt),
"STAmount fail");
337 unexpected((zeroSt >
one),
"STAmount fail");
338 unexpected((zeroSt > hundred),
"STAmount fail");
339 unexpected(!(
one > zeroSt),
"STAmount fail");
340 unexpected((
one >
one),
"STAmount fail");
341 unexpected((
one > hundred),
"STAmount fail");
342 unexpected(!(hundred > zeroSt),
"STAmount fail");
343 unexpected(!(hundred >
one),
"STAmount fail");
344 unexpected((hundred > hundred),
"STAmount fail");
345 unexpected(!(zeroSt <= zeroSt),
"STAmount fail");
346 unexpected(!(zeroSt <=
one),
"STAmount fail");
347 unexpected(!(zeroSt <= hundred),
"STAmount fail");
348 unexpected((
one <= zeroSt),
"STAmount fail");
349 unexpected(!(
one <=
one),
"STAmount fail");
350 unexpected(!(
one <= hundred),
"STAmount fail");
351 unexpected((hundred <= zeroSt),
"STAmount fail");
352 unexpected((hundred <=
one),
"STAmount fail");
353 unexpected(!(hundred <= hundred),
"STAmount fail");
354 unexpected(!(zeroSt >= zeroSt),
"STAmount fail");
355 unexpected((zeroSt >=
one),
"STAmount fail");
356 unexpected((zeroSt >= hundred),
"STAmount fail");
357 unexpected(!(
one >= zeroSt),
"STAmount fail");
358 unexpected(!(
one >=
one),
"STAmount fail");
359 unexpected((
one >= hundred),
"STAmount fail");
360 unexpected(!(hundred >= zeroSt),
"STAmount fail");
361 unexpected(!(hundred >=
one),
"STAmount fail");
362 unexpected(!(hundred >= hundred),
"STAmount fail");
363 unexpected(!(zeroSt == zeroSt),
"STAmount fail");
364 unexpected((zeroSt ==
one),
"STAmount fail");
365 unexpected((zeroSt == hundred),
"STAmount fail");
366 unexpected((
one == zeroSt),
"STAmount fail");
367 unexpected(!(
one ==
one),
"STAmount fail");
368 unexpected((
one == hundred),
"STAmount fail");
369 unexpected((hundred == zeroSt),
"STAmount fail");
370 unexpected((hundred ==
one),
"STAmount fail");
371 unexpected(!(hundred == hundred),
"STAmount fail");
372 unexpected((zeroSt != zeroSt),
"STAmount fail");
373 unexpected(!(zeroSt !=
one),
"STAmount fail");
374 unexpected(!(zeroSt != hundred),
"STAmount fail");
375 unexpected(!(
one != zeroSt),
"STAmount fail");
376 unexpected((
one !=
one),
"STAmount fail");
377 unexpected(!(
one != hundred),
"STAmount fail");
378 unexpected(!(hundred != zeroSt),
"STAmount fail");
379 unexpected(!(hundred !=
one),
"STAmount fail");
380 unexpected((hundred != hundred),
"STAmount fail");
382 unexpected(
STAmount(
noIssue(), 31).getText() !=
"31",
"STAmount fail");
392 "STAmount multiply fail 1");
396 "STAmount multiply fail 2");
399 "STAmount multiply fail 3");
402 "STAmount multiply fail 4");
410 fail(
"STAmount divide fail");
420 "STAmount divide fail");
425 "STAmount divide fail");
430 "STAmount divide fail");
436 "STAmount setRate(getRate) fail");
440 "STAmount setRate(getRate) fail");
448 testcase(
"arithmetic");
456 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
457 "STAmount getRate fail 1");
461 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
462 "STAmount getRate fail 2");
466 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
467 "STAmount getRate fail 3");
471 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
472 "STAmount getRate fail 4");
476 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
477 "STAmount getRate fail 5");
481 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
482 "STAmount getRate fail 6");
486 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
487 "STAmount getRate fail 7");
491 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
492 "STAmount getRate fail 8");
501 for (
int i = 0; i <= 100000; ++i)
512 testcase(
"underflow");
527 BEAST_EXPECT(smallXsmall == beast::zero);
531 BEAST_EXPECT(bigDsmall == beast::zero);
533 BEAST_EXPECT(bigDsmall == beast::zero);
537 BEAST_EXPECT(bigDsmall == beast::zero);
541 BEAST_EXPECT(bigDsmall == beast::zero);
546 BEAST_EXPECT(r == 0);
549 r =
getRate(bigValue, smallValue);
551 BEAST_EXPECT(r == 0);
563 beginTestCase (
"rounding ");
594 STAmount fourThirdsB = twoThird2 + twoThird2;
611 testcase(
"STAmount to XRPAmount conversions");
620 auto const s = t.xrp();
621 BEAST_EXPECT(s.drops() == drops);
637 fail(
"wrong exception");
644 testcase(
"STAmount to IOUAmount conversions");
650 dollars = dollars / 10)
653 auto const s = t.iou();
654 BEAST_EXPECT(t ==
STAmount(s, usd));
655 BEAST_EXPECT(s.mantissa() == t.mantissa());
656 BEAST_EXPECT(s.exponent() == t.exponent());
670 fail(
"wrong exception");