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");
233 STAmount zeroSt, one(1), hundred(100);
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");
310 c !=
Currency(from_hex_text<Currency>(cur)),
311 "check custom currency");
319 testcase(
"custom currency");
325 unexpected(zeroSt.native(),
"STAmount fail");
326 unexpected(hundred.
native(),
"STAmount fail");
327 unexpected(zeroSt != beast::zero,
"STAmount fail");
328 unexpected(one == beast::zero,
"STAmount fail");
329 unexpected(hundred == beast::zero,
"STAmount fail");
330 unexpected((zeroSt < zeroSt),
"STAmount fail");
331 unexpected(!(zeroSt < one),
"STAmount fail");
332 unexpected(!(zeroSt < hundred),
"STAmount fail");
333 unexpected((one < zeroSt),
"STAmount fail");
334 unexpected((one < one),
"STAmount fail");
335 unexpected(!(one < hundred),
"STAmount fail");
336 unexpected((hundred < zeroSt),
"STAmount fail");
337 unexpected((hundred < one),
"STAmount fail");
338 unexpected((hundred < hundred),
"STAmount fail");
339 unexpected((zeroSt > zeroSt),
"STAmount fail");
340 unexpected((zeroSt > one),
"STAmount fail");
341 unexpected((zeroSt > hundred),
"STAmount fail");
342 unexpected(!(one > zeroSt),
"STAmount fail");
343 unexpected((one > one),
"STAmount fail");
344 unexpected((one > hundred),
"STAmount fail");
345 unexpected(!(hundred > zeroSt),
"STAmount fail");
346 unexpected(!(hundred > one),
"STAmount fail");
347 unexpected((hundred > hundred),
"STAmount fail");
348 unexpected(!(zeroSt <= zeroSt),
"STAmount fail");
349 unexpected(!(zeroSt <= one),
"STAmount fail");
350 unexpected(!(zeroSt <= hundred),
"STAmount fail");
351 unexpected((one <= zeroSt),
"STAmount fail");
352 unexpected(!(one <= one),
"STAmount fail");
353 unexpected(!(one <= hundred),
"STAmount fail");
354 unexpected((hundred <= zeroSt),
"STAmount fail");
355 unexpected((hundred <= one),
"STAmount fail");
356 unexpected(!(hundred <= hundred),
"STAmount fail");
357 unexpected(!(zeroSt >= zeroSt),
"STAmount fail");
358 unexpected((zeroSt >= one),
"STAmount fail");
359 unexpected((zeroSt >= hundred),
"STAmount fail");
360 unexpected(!(one >= zeroSt),
"STAmount fail");
361 unexpected(!(one >= one),
"STAmount fail");
362 unexpected((one >= hundred),
"STAmount fail");
363 unexpected(!(hundred >= zeroSt),
"STAmount fail");
364 unexpected(!(hundred >= one),
"STAmount fail");
365 unexpected(!(hundred >= hundred),
"STAmount fail");
366 unexpected(!(zeroSt == zeroSt),
"STAmount fail");
367 unexpected((zeroSt == one),
"STAmount fail");
368 unexpected((zeroSt == hundred),
"STAmount fail");
369 unexpected((one == zeroSt),
"STAmount fail");
370 unexpected(!(one == one),
"STAmount fail");
371 unexpected((one == hundred),
"STAmount fail");
372 unexpected((hundred == zeroSt),
"STAmount fail");
373 unexpected((hundred == one),
"STAmount fail");
374 unexpected(!(hundred == hundred),
"STAmount fail");
375 unexpected((zeroSt != zeroSt),
"STAmount fail");
376 unexpected(!(zeroSt != one),
"STAmount fail");
377 unexpected(!(zeroSt != hundred),
"STAmount fail");
378 unexpected(!(one != zeroSt),
"STAmount fail");
379 unexpected((one != one),
"STAmount fail");
380 unexpected(!(one != hundred),
"STAmount fail");
381 unexpected(!(hundred != zeroSt),
"STAmount fail");
382 unexpected(!(hundred != one),
"STAmount fail");
383 unexpected((hundred != hundred),
"STAmount fail");
385 unexpected(
STAmount(
noIssue(), 31).getText() !=
"31",
"STAmount fail");
395 "STAmount multiply fail 1");
399 "STAmount multiply fail 2");
402 "STAmount multiply fail 3");
405 "STAmount multiply fail 4");
413 fail(
"STAmount divide fail");
423 "STAmount divide fail");
428 "STAmount divide fail");
433 "STAmount divide fail");
439 "STAmount setRate(getRate) fail");
443 "STAmount setRate(getRate) fail");
451 testcase(
"arithmetic");
459 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
460 "STAmount getRate fail 1");
464 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
465 "STAmount getRate fail 2");
469 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
470 "STAmount getRate fail 3");
474 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
475 "STAmount getRate fail 4");
479 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
480 "STAmount getRate fail 5");
484 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
485 "STAmount getRate fail 6");
489 (((100ull - 14) << (64 - 8)) | 1000000000000000ull),
490 "STAmount getRate fail 7");
494 (((100ull - 16) << (64 - 8)) | 1000000000000000ull),
495 "STAmount getRate fail 8");
504 for (
int i = 0; i <= 100000; ++i)
515 testcase(
"underflow");
530 BEAST_EXPECT(smallXsmall == beast::zero);
534 BEAST_EXPECT(bigDsmall == beast::zero);
536 BEAST_EXPECT(bigDsmall == beast::zero);
540 BEAST_EXPECT(bigDsmall == beast::zero);
544 BEAST_EXPECT(bigDsmall == beast::zero);
549 BEAST_EXPECT(r == 0);
552 r =
getRate(bigValue, smallValue);
554 BEAST_EXPECT(r == 0);
566 beginTestCase (
"rounding ");
597 STAmount fourThirdsB = twoThird2 + twoThird2;
614 testcase(
"STAmount to XRPAmount conversions");
623 auto const s = t.xrp();
624 BEAST_EXPECT(s.drops() == drops);
640 fail(
"wrong exception");
647 testcase(
"STAmount to IOUAmount conversions");
653 dollars = dollars / 10)
656 auto const s = t.iou();
657 BEAST_EXPECT(t ==
STAmount(s, usd));
658 BEAST_EXPECT(s.mantissa() == t.mantissa());
659 BEAST_EXPECT(s.exponent() == t.exponent());
673 fail(
"wrong exception");