📄 bigint.cpp
字号:
// ------------------
void RossiBigInt::dbg_show () const
{
cout << "--- BEGIN ---" << endl;
for (ulong i = 0; i < units_.size(); i++)
{
cout << "units_[" << i << "] = 0x" << hex << units_[i] << endl;
}
cout << "---- END ----" << endl;
}
// ------------------
string RossiBigInt::getstr_pure_hex_value () const
{
#define HEX_SETW 8
ostringstream oss;
ASSERTION (!units_.empty ());
// if (ins_i.is_empty ()) return oss << "is_empty";
oss << hex;
oss << units_.back();
for (long i = (units_.size () - 2); i>= 0; i--)
{
oss << setw (HEX_SETW)
<< setfill ('0')
<< units_ [i];
}
oss << dec;
return oss.str();
}
// ------------------
string RossiBigInt::getstr_hex_value () const
{
ostringstream oss;
oss << "0x";
oss << getstr_pure_hex_value();
return oss.str();
}
// ------------------
ostream& operator<< (ostream& os, const RossiBigInt& ins_i)
{
VinBigInt vin (ins_i.getstr_pure_hex_value(), HEX_DIGIT);
return os << vin;
}
// ------------------
void RossiBigInt::Test100_Operator_Add_Bigint()
{
ostringstream oss;
oss << "RossiBigInt::Test100_Operator_Add_Bigint" << endl;
cout << endl;
cout << endl;
cout << endl;
cout << string (oss.str().size(), '-') << endl;
cout << oss.str() << endl;
cout << string (oss.str().size(), '-') << endl;
cout << endl;
ROSSI_CREATE_EMPTY_VTEST;
vector<ulong> ulong_nums;
vector<string> hexstr_nums;
// --- ulong_nums ---
ulong_nums.push_back (0);
ulong_nums.push_back (1);
ulong_nums.push_back (2);
ulong_nums.push_back (3);
ulong_nums.push_back (9);
ulong_nums.push_back (10);
ulong_nums.push_back (11);
ulong_nums.push_back (15);
ulong_nums.push_back (16);
ulong_nums.push_back (17);
ulong_nums.push_back (0xFFFFFFFD);
ulong_nums.push_back (0xFFFFFFFE);
ulong_nums.push_back (0xFFFFFFFF);
for (ulong i = 0; i < ulong_nums.size(); i++)
{
for (ulong k = 0; k < ulong_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_ULONG (ulong_nums[i], ulong_nums[k]);
}
}
// --- hexstr_nums ---
hexstr_nums.push_back ("0");
hexstr_nums.push_back ("1");
hexstr_nums.push_back ("2");
hexstr_nums.push_back ("3");
hexstr_nums.push_back ("100");
hexstr_nums.push_back ("ABC");
hexstr_nums.push_back ("F000000000000000");
hexstr_nums.push_back ("FEDCBA9876543210");
hexstr_nums.push_back ("123456789ABCDEF");
hexstr_nums.push_back ("FFFFFFFFFFFFFFFFFFFFFFFF");
hexstr_nums.push_back ("123456789ABCDEF123456789FFFFFFFFFFF");
hexstr_nums.push_back ("111222333444555666777888999AAABBBCC");
for (ulong i = 0; i < hexstr_nums.size(); i++)
{
for (ulong k = 0; k < hexstr_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_STRING_HEX (hexstr_nums[i], hexstr_nums[k]);
}
}
for (ulong i = 0; i < vtest.size(); i++)
{
ROSSI_TEST_BINARY_OP(i, +);
}
}
// ------------------
void RossiBigInt::Test200_Operator_Subtraction_Bigint()
{
ostringstream oss;
oss << "RossiBigInt::Test200_Operator_Subtraction_Bigint";
cout << endl;
cout << endl;
cout << endl;
cout << string (oss.str().size(), '-') << endl;
cout << oss.str() << endl;
cout << string (oss.str().size(), '-') << endl;
cout << endl;
ROSSI_CREATE_EMPTY_VTEST;
vector<ulong> ulong_nums;
vector<string> hexstr_nums;
// --- ulong_nums ---
ulong_nums.push_back (0);
ulong_nums.push_back (1);
ulong_nums.push_back (2);
ulong_nums.push_back (3);
ulong_nums.push_back (9);
ulong_nums.push_back (10);
ulong_nums.push_back (11);
ulong_nums.push_back (15);
ulong_nums.push_back (16);
ulong_nums.push_back (17);
ulong_nums.push_back (0xFFFFFFFD);
ulong_nums.push_back (0xFFFFFFFE);
ulong_nums.push_back (0xFFFFFFFF);
for (ulong i = 0; i < ulong_nums.size(); i++)
{
for (ulong k = 0; k < ulong_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_ULONG (ulong_nums[i], ulong_nums[k]);
}
}
// --- hexstr_nums ---
hexstr_nums.push_back ("100000000");
// hexstr_nums.push_back ("FFFFFFFF");
hexstr_nums.push_back ("1");
hexstr_nums.push_back ("0");
hexstr_nums.push_back ("1");
hexstr_nums.push_back ("2");
hexstr_nums.push_back ("3");
hexstr_nums.push_back ("100");
hexstr_nums.push_back ("ABC");
hexstr_nums.push_back ("F000000000000000");
hexstr_nums.push_back ("FEDCBA9876543210");
hexstr_nums.push_back ("123456789ABCDEF");
hexstr_nums.push_back ("FFFFFFFFFFFFFFFFFFFFFFFF");
hexstr_nums.push_back ("123456789ABCDEF123456789FFFFFFFFFFF");
hexstr_nums.push_back ("111222333444555666777888999AAABBBCC");
for (ulong i = 0; i < hexstr_nums.size(); i++)
{
for (ulong k = 0; k < hexstr_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_STRING_HEX (hexstr_nums[i], hexstr_nums[k]);
}
}
for (ulong i = 0; i < vtest.size(); i++)
{
// ROSSI_TEST_BINARY_OP(i, -);
ROSSI_TEST_BINARY_WITH_LESS_OP(i, -);
}
}
// ------------------
void RossiBigInt::Test300_Operator_Multiplication_Bigint()
{
ostringstream oss;
oss << "RossiBigInt::Test300_Operator_Multiplication_Bigint";
cout << endl;
cout << endl;
cout << endl;
cout << string (oss.str().size(), '-') << endl;
cout << oss.str() << endl;
cout << string (oss.str().size(), '-') << endl;
cout << endl;
ROSSI_CREATE_EMPTY_VTEST;
vector<ulong> ulong_nums;
vector<string> hexstr_nums;
// --- ulong_nums ---
ulong_nums.push_back (0);
ulong_nums.push_back (1);
ulong_nums.push_back (2);
ulong_nums.push_back (3);
ulong_nums.push_back (9);
ulong_nums.push_back (10);
ulong_nums.push_back (11);
ulong_nums.push_back (15);
ulong_nums.push_back (16);
ulong_nums.push_back (17);
ulong_nums.push_back (0x10);
ulong_nums.push_back (0x100);
ulong_nums.push_back (0xFFFFFFFD);
ulong_nums.push_back (0xFFFFFFFE);
ulong_nums.push_back (0xFFFFFFFF);
for (ulong i = 0; i < ulong_nums.size(); i++)
{
for (ulong k = 0; k < ulong_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_ULONG (ulong_nums[i], ulong_nums[k]);
}
}
// --- hexstr_nums ---
hexstr_nums.push_back ("0");
hexstr_nums.push_back ("1");
hexstr_nums.push_back ("2");
hexstr_nums.push_back ("3");
hexstr_nums.push_back ("100");
hexstr_nums.push_back ("ABC");
hexstr_nums.push_back ("F000000000000000");
hexstr_nums.push_back ("FEDCBA9876543210");
hexstr_nums.push_back ("123456789ABCDEF");
hexstr_nums.push_back ("FFFFFFFFFFFFFFFFFFFFFFFF");
hexstr_nums.push_back ("123456789ABCDEF123456789FFFFFFFFFFF");
hexstr_nums.push_back ("111222333444555666777888999AAABBBCC");
for (ulong i = 0; i < hexstr_nums.size(); i++)
{
for (ulong k = 0; k < hexstr_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_STRING_HEX (hexstr_nums[i], hexstr_nums[k]);
}
}
for (ulong i = 0; i < vtest.size(); i++)
{
ROSSI_TEST_BINARY_OP(i, *);
}
}
// ------------------
void RossiBigInt::Test400_Operator_Division_Bigint()
{
ostringstream oss;
oss << "RossiBigInt::Test400_Operator_Division_Bigint";
cout << endl;
cout << endl;
cout << endl;
cout << string (oss.str().size(), '-') << endl;
cout << oss.str() << endl;
cout << string (oss.str().size(), '-') << endl;
cout << endl;
ROSSI_CREATE_EMPTY_VTEST;
vector<ulong> ulong_nums;
vector<string> hexstr_nums;
// --- ulong_nums ---
ulong_nums.push_back (1);
ulong_nums.push_back (2);
ulong_nums.push_back (3);
ulong_nums.push_back (9);
ulong_nums.push_back (10);
ulong_nums.push_back (11);
ulong_nums.push_back (15);
ulong_nums.push_back (16);
ulong_nums.push_back (17);
ulong_nums.push_back (0x10);
ulong_nums.push_back (0x100);
ulong_nums.push_back (0xFFFFFFFD);
ulong_nums.push_back (0xFFFFFFFE);
ulong_nums.push_back (0xFFFFFFFF);
for (ulong i = 0; i < ulong_nums.size(); i++)
{
for (ulong k = 0; k < ulong_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_ULONG (ulong_nums[i], ulong_nums[k]);
}
}
// --- hexstr_nums ---
hexstr_nums.push_back ("1");
hexstr_nums.push_back ("2");
hexstr_nums.push_back ("3");
hexstr_nums.push_back ("100");
hexstr_nums.push_back ("ABC");
hexstr_nums.push_back ("F000000000000000");
hexstr_nums.push_back ("FEDCBA9876543210");
hexstr_nums.push_back ("123456789ABCDEF");
hexstr_nums.push_back ("FFFFFFFFFFFFFFFFFFFFFFFF");
hexstr_nums.push_back ("123456789ABCDEF123456789FFFFFFFFFFF");
hexstr_nums.push_back ("111222333444555666777888999AAABBBCC");
for (ulong i = 0; i < hexstr_nums.size(); i++)
{
for (ulong k = 0; k < hexstr_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_STRING_HEX (hexstr_nums[i], hexstr_nums[k]);
}
}
for (ulong i = 0; i < vtest.size(); i++)
{
ROSSI_TEST_BINARY_OP(i, /);
}
}
// ------------------
void RossiBigInt::Test500_Operator_Reminder_Bigint()
{
ostringstream oss;
oss << "RossiBigInt::Test500_Operator_Reminder_Bigint";
cout << endl;
cout << endl;
cout << endl;
cout << string (oss.str().size(), '-') << endl;
cout << oss.str() << endl;
cout << string (oss.str().size(), '-') << endl;
cout << endl;
ROSSI_CREATE_EMPTY_VTEST;
vector<ulong> ulong_nums;
vector<string> hexstr_nums;
// --- ulong_nums ---
ulong_nums.push_back (1);
ulong_nums.push_back (2);
ulong_nums.push_back (3);
ulong_nums.push_back (9);
ulong_nums.push_back (10);
ulong_nums.push_back (11);
ulong_nums.push_back (15);
ulong_nums.push_back (16);
ulong_nums.push_back (17);
ulong_nums.push_back (0x10);
ulong_nums.push_back (0x100);
ulong_nums.push_back (0xFFFFFFFD);
ulong_nums.push_back (0xFFFFFFFE);
ulong_nums.push_back (0xFFFFFFFF);
for (ulong i = 0; i < ulong_nums.size(); i++)
{
for (ulong k = 0; k < ulong_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_ULONG (ulong_nums[i], ulong_nums[k]);
}
}
// --- hexstr_nums ---
hexstr_nums.push_back ("1");
hexstr_nums.push_back ("2");
hexstr_nums.push_back ("3");
hexstr_nums.push_back ("100");
hexstr_nums.push_back ("ABC");
hexstr_nums.push_back ("F000000000000000");
hexstr_nums.push_back ("FEDCBA9876543210");
hexstr_nums.push_back ("123456789ABCDEF");
hexstr_nums.push_back ("FFFFFFFFFFFFFFFFFFFFFFFF");
hexstr_nums.push_back ("123456789ABCDEF123456789FFFFFFFFFFF");
hexstr_nums.push_back ("111222333444555666777888999AAABBBCC");
for (ulong i = 0; i < hexstr_nums.size(); i++)
{
for (ulong k = 0; k < hexstr_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_STRING_HEX (hexstr_nums[i], hexstr_nums[k]);
}
}
for (ulong i = 0; i < vtest.size(); i++)
{
ROSSI_TEST_BINARY_OP(i, %);
}
}
// ------------------
void RossiBigInt::Test600_Operator_Less()
{
ostringstream oss;
oss << "RossiBigInt::Test600_Operator_Less";
cout << endl;
cout << endl;
cout << endl;
cout << string (oss.str().size(), '-') << endl;
cout << oss.str() << endl;
cout << string (oss.str().size(), '-') << endl;
cout << endl;
ROSSI_CREATE_EMPTY_VTEST;
vector<ulong> ulong_nums;
vector<string> hexstr_nums;
// --- ulong_nums ---
ulong_nums.push_back (0);
ulong_nums.push_back (1);
ulong_nums.push_back (2);
ulong_nums.push_back (3);
ulong_nums.push_back (9);
ulong_nums.push_back (10);
ulong_nums.push_back (11);
ulong_nums.push_back (15);
ulong_nums.push_back (16);
ulong_nums.push_back (17);
ulong_nums.push_back (0xFFFFFFFD);
ulong_nums.push_back (0xFFFFFFFE);
ulong_nums.push_back (0xFFFFFFFF);
for (ulong i = 0; i < ulong_nums.size(); i++)
{
for (ulong k = 0; k < ulong_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_ULONG (ulong_nums[i], ulong_nums[k]);
}
}
// --- hexstr_nums ---
hexstr_nums.push_back ("0");
hexstr_nums.push_back ("1");
hexstr_nums.push_back ("2");
hexstr_nums.push_back ("3");
hexstr_nums.push_back ("100");
hexstr_nums.push_back ("ABC");
hexstr_nums.push_back ("F000000000000000");
hexstr_nums.push_back ("FEDCBA9876543210");
hexstr_nums.push_back ("123456789ABCDEF");
hexstr_nums.push_back ("FFFFFFFFFFFFFFFFFFFFFFFF");
hexstr_nums.push_back ("123456789ABCDEF123456789FFFFFFFFFFF");
hexstr_nums.push_back ("111222333444555666777888999AAABBBCC");
for (ulong i = 0; i < hexstr_nums.size(); i++)
{
for (ulong k = 0; k < hexstr_nums.size(); k++)
{
ROSSI_ADD_TEST_CASE_STRING_HEX (hexstr_nums[i], hexstr_nums[k]);
}
}
for (ulong i = 0; i < vtest.size(); i++)
{
ROSSI_TEST_BOOLEAN_OP(i, <);
}
}
// ------------------
void RossiBigInt::All_Tests()
{
Test100_Operator_Add_Bigint();
Test200_Operator_Subtraction_Bigint ();
Test300_Operator_Multiplication_Bigint ();
Test400_Operator_Division_Bigint ();
Test500_Operator_Reminder_Bigint ();
Test600_Operator_Less ();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -