| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // Copyright (c) 2008-2022 the Urho3D project
- // License: MIT
- #include "../ForceAssert.h"
- #include <Urho3D/Container/Str.h>
- #include <Urho3D/Math/BigInt.h>
- #include <Urho3D/DebugNew.h>
- using namespace Urho3D;
- void Test_Math_BigInt()
- {
- // Constructors
- assert(BigInt().ToString() == "0");
- assert(BigInt((i32)0x7FFFFFFF).ToString() == "2147483647");
- assert(BigInt((u32)0x80000000).ToString() == "2147483648");
- assert(BigInt((u32)0xFFFFFFFF).ToString() == "4294967295");
- assert(BigInt((i64)0x7FFFFFFFFFFFFFFF).ToString() == "9223372036854775807"); // (i64) need for macOS
- assert(BigInt((u64)0x8000000000000000).ToString() == "9223372036854775808"); // (u64) need for macOS
- assert(BigInt((u64)0xFFFFFFFFFFFFFFFF).ToString() == "18446744073709551615"); // (u64) need for macOS
- assert(BigInt("0").ToString() == "0");
- assert(BigInt("-0").ToString() == "0");
- assert(BigInt("3").ToString() == "3");
- assert(BigInt("-7").ToString() == "-7");
- assert(BigInt("123456789").ToString() == "123456789");
- assert(BigInt("-123456789").ToString() == "-123456789");
- assert(BigInt("123000789").ToString() == "123000789");
- assert(BigInt("-1230000").ToString() == "-1230000");
- assert(BigInt("0001230000").ToString() == "1230000");
- assert(BigInt("-0001230000").ToString() == "-1230000");
-
- {
- BigInt bi{"-99999999999999999999999999999999999999999999999999999999999999999999"
- "999999999999999999999999999999999999999999999999999999999999999999999"
- "999999999999999999999999999999999999999999999999999999999999999999999"};
-
- assert(bi.ToString() ==
- "-99999999999999999999999999999999999999999999999999999999999999999999"
- "999999999999999999999999999999999999999999999999999999999999999999999"
- "999999999999999999999999999999999999999999999999999999999999999999999");
- }
- // Comparison
- assert(BigInt("0") == BigInt("-0"));
- assert(BigInt("10") < BigInt("100"));
- assert(BigInt("10") > BigInt("-100"));
- assert(BigInt("-10") > BigInt("-100"));
- // Sum of values with same sign
- assert((BigInt("0") + BigInt("0")).ToString() == "0");
- assert((BigInt("000") + BigInt("000")).ToString() == "0");
- assert((BigInt("1") + BigInt("2")).ToString() == "3");
- assert((BigInt("1000") + BigInt("200")).ToString() == "1200");
- assert((BigInt("-1000") + BigInt("-234")).ToString() == "-1234");
- assert((BigInt("-1000") - BigInt("234")).ToString() == "-1234");
- assert((BigInt("-1000") - BigInt("0")).ToString() == "-1000");
- assert((BigInt("9999999999999999999999") + BigInt("9999999999999999999999")).ToString() == "19999999999999999999998");
- assert((BigInt("9999999999999999999999") + BigInt("1")).ToString() == "10000000000000000000000");
- // Sum of values with opposite sign
- assert((BigInt("000") - BigInt("000")).ToString() == "0");
- assert((BigInt("1000") - BigInt("1000")).ToString() == "0");
- assert((BigInt("1000") - BigInt("234")).ToString() == "766");
- assert((BigInt("234") - BigInt("1000")).ToString() == "-766");
- assert((BigInt("1000") - BigInt("0")).ToString() == "1000");
- assert((BigInt("0") - BigInt("034005")).ToString() == "-34005");
- assert((BigInt("10000000000000000000000") - BigInt("1")).ToString() == "9999999999999999999999");
- assert((BigInt("-10000000000000000000000") + BigInt("1")).ToString() == "-9999999999999999999999");
- // Multiply
- assert((BigInt("0") * BigInt("0")).ToString() == "0");
- assert((BigInt("1") * BigInt("1")).ToString() == "1");
- assert((BigInt("1") * BigInt("9999999999999999999999")).ToString() == "9999999999999999999999");
- assert((BigInt("0") * BigInt("9999999999999999999999")).ToString() == "0");
- assert((BigInt("10") * BigInt("2")).ToString() == "20");
- assert((BigInt("-99999") * BigInt("99999")).ToString() == "-9999800001");
-
- {
- BigInt bi1{"-99999999999999999999999999999999999999999999999999999999999999999999"};
- BigInt bi2{"99999999999999999999999999999999999999999999999999999999999999999999"};
- String str = (bi1 * bi2).ToString();
- assert(str == "-99999999999999999999999999999999999999999999999999999999999999999998"
- "00000000000000000000000000000000000000000000000000000000000000000001");
- }
- }
|