BigInt.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright (c) 2008-2022 the Urho3D project
  2. // License: MIT
  3. #include "../ForceAssert.h"
  4. #include <Urho3D/Container/Str.h>
  5. #include <Urho3D/Math/BigInt.h>
  6. #include <Urho3D/DebugNew.h>
  7. using namespace Urho3D;
  8. void Test_Math_BigInt()
  9. {
  10. // Constructors
  11. assert(BigInt().ToString() == "0");
  12. assert(BigInt((i32)0x7FFFFFFF).ToString() == "2147483647");
  13. assert(BigInt((u32)0x80000000).ToString() == "2147483648");
  14. assert(BigInt((u32)0xFFFFFFFF).ToString() == "4294967295");
  15. assert(BigInt((i64)0x7FFFFFFFFFFFFFFF).ToString() == "9223372036854775807"); // (i64) need for macOS
  16. assert(BigInt((u64)0x8000000000000000).ToString() == "9223372036854775808"); // (u64) need for macOS
  17. assert(BigInt((u64)0xFFFFFFFFFFFFFFFF).ToString() == "18446744073709551615"); // (u64) need for macOS
  18. assert(BigInt("0").ToString() == "0");
  19. assert(BigInt("-0").ToString() == "0");
  20. assert(BigInt("3").ToString() == "3");
  21. assert(BigInt("-7").ToString() == "-7");
  22. assert(BigInt("123456789").ToString() == "123456789");
  23. assert(BigInt("-123456789").ToString() == "-123456789");
  24. assert(BigInt("123000789").ToString() == "123000789");
  25. assert(BigInt("-1230000").ToString() == "-1230000");
  26. assert(BigInt("0001230000").ToString() == "1230000");
  27. assert(BigInt("-0001230000").ToString() == "-1230000");
  28. {
  29. BigInt bi{"-99999999999999999999999999999999999999999999999999999999999999999999"
  30. "999999999999999999999999999999999999999999999999999999999999999999999"
  31. "999999999999999999999999999999999999999999999999999999999999999999999"};
  32. assert(bi.ToString() ==
  33. "-99999999999999999999999999999999999999999999999999999999999999999999"
  34. "999999999999999999999999999999999999999999999999999999999999999999999"
  35. "999999999999999999999999999999999999999999999999999999999999999999999");
  36. }
  37. // Comparison
  38. assert(BigInt("0") == BigInt("-0"));
  39. assert(BigInt("10") < BigInt("100"));
  40. assert(BigInt("10") > BigInt("-100"));
  41. assert(BigInt("-10") > BigInt("-100"));
  42. // Sum of values with same sign
  43. assert((BigInt("0") + BigInt("0")).ToString() == "0");
  44. assert((BigInt("000") + BigInt("000")).ToString() == "0");
  45. assert((BigInt("1") + BigInt("2")).ToString() == "3");
  46. assert((BigInt("1000") + BigInt("200")).ToString() == "1200");
  47. assert((BigInt("-1000") + BigInt("-234")).ToString() == "-1234");
  48. assert((BigInt("-1000") - BigInt("234")).ToString() == "-1234");
  49. assert((BigInt("-1000") - BigInt("0")).ToString() == "-1000");
  50. assert((BigInt("9999999999999999999999") + BigInt("9999999999999999999999")).ToString() == "19999999999999999999998");
  51. assert((BigInt("9999999999999999999999") + BigInt("1")).ToString() == "10000000000000000000000");
  52. // Sum of values with opposite sign
  53. assert((BigInt("000") - BigInt("000")).ToString() == "0");
  54. assert((BigInt("1000") - BigInt("1000")).ToString() == "0");
  55. assert((BigInt("1000") - BigInt("234")).ToString() == "766");
  56. assert((BigInt("234") - BigInt("1000")).ToString() == "-766");
  57. assert((BigInt("1000") - BigInt("0")).ToString() == "1000");
  58. assert((BigInt("0") - BigInt("034005")).ToString() == "-34005");
  59. assert((BigInt("10000000000000000000000") - BigInt("1")).ToString() == "9999999999999999999999");
  60. assert((BigInt("-10000000000000000000000") + BigInt("1")).ToString() == "-9999999999999999999999");
  61. // Multiply
  62. assert((BigInt("0") * BigInt("0")).ToString() == "0");
  63. assert((BigInt("1") * BigInt("1")).ToString() == "1");
  64. assert((BigInt("1") * BigInt("9999999999999999999999")).ToString() == "9999999999999999999999");
  65. assert((BigInt("0") * BigInt("9999999999999999999999")).ToString() == "0");
  66. assert((BigInt("10") * BigInt("2")).ToString() == "20");
  67. assert((BigInt("-99999") * BigInt("99999")).ToString() == "-9999800001");
  68. {
  69. BigInt bi1{"-99999999999999999999999999999999999999999999999999999999999999999999"};
  70. BigInt bi2{"99999999999999999999999999999999999999999999999999999999999999999999"};
  71. String str = (bi1 * bi2).ToString();
  72. assert(str == "-99999999999999999999999999999999999999999999999999999999999999999998"
  73. "00000000000000000000000000000000000000000000000000000000000000000001");
  74. }
  75. }