QtBigInt/tests/tst_arithmetictests.cpp

179 lines
4.5 KiB
C++
Raw Normal View History

2019-07-09 13:59:03 +03:00
#include <QtTest>
2019-07-09 15:35:24 +03:00
#include <bigint.h>
2019-07-09 13:59:03 +03:00
// add necessary includes here
class arithmetictests : public QObject
{
Q_OBJECT
public:
arithmetictests();
~arithmetictests();
private slots:
void arithmeticAssignmentAdditionTest();
void arithmeticAssignmentSubtractionTest();
void arithmeticAssignmentMultiplicationTest();
void arithmeticAssignmentDivisionTest();
void arithmeticAssignmentModuloTest();
2019-07-09 15:35:24 +03:00
void constructorsTest();
2019-07-09 13:59:03 +03:00
};
2019-07-09 15:35:24 +03:00
arithmetictests::arithmetictests() {
2019-07-09 13:59:03 +03:00
}
2019-07-09 15:35:24 +03:00
arithmetictests::~arithmetictests() {
2019-07-09 13:59:03 +03:00
}
2019-07-09 15:35:24 +03:00
void arithmetictests::constructorsTest() {
BigInt num1; // should be 0 by default
QVERIFY(num1 == 0);
BigInt num2(0); // 0 passed as an integer
QVERIFY(num2 == 0);
BigInt num3("0"); // 0 passed as a string
QVERIFY(num3 == 0);
BigInt num4(num3); // object with value 0 passed to copy constructor
QVERIFY(num4 == 0);
BigInt num5(0.0); // object with value 0 passed to copy constructor
QVERIFY(num5 == 0);
// inversion
BigInt num21(1.0);
QVERIFY(num21 != 0);
BigInt num31("1");
QVERIFY(num31 != 0);
BigInt num41(num31);
QVERIFY(num41 != 0);
BigInt num51(1.0);
QVERIFY(num51 != 0);
2019-07-09 15:35:24 +03:00
}
2019-07-09 15:35:24 +03:00
void arithmetictests::arithmeticAssignmentAdditionTest() {
BigInt num1, num2, num3;
num1 = "85241964353410";
num2 = "617705612502427";
num3 += num1;
QVERIFY(num3 == "85241964353410");
num3 += num2;
QVERIFY(num3 == "702947576855837");
num3 += num1 + num2;
QVERIFY(num3 == "1405895153711674");
num3 += 0;
QVERIFY(num3 == "1405895153711674");
num3 += 1234567890;
QVERIFY(num3 == "1405896388279564");
num3 += "12345678909876543210";
QVERIFY(num3 == "12347084806264822774");
2019-07-09 15:35:24 +03:00
}
2019-07-09 13:59:03 +03:00
void arithmetictests::arithmeticAssignmentSubtractionTest() {
BigInt num1, num2, num3;
num1 = "169523540030343";
num2 = "849991085752380";
num3 -= num1;
QVERIFY(num3 == "-169523540030343");
num3 -= num2;
QVERIFY(num3 == "-1019514625782723");
num3 -= -(num1 + num2);
QVERIFY(num3 == 0);
num3 -= 0;
QVERIFY(num3 == 0);
num3 -= 1234567890;
QVERIFY(num3 == -1234567890);
num3 -= "12345678909876543210";
QVERIFY(num3 == "-12345678911111111100");
2019-07-09 13:59:03 +03:00
}
void arithmetictests::arithmeticAssignmentMultiplicationTest() {
BigInt num1, num2, num3;
num1 = "169523540030343";
num2 = "849991085752380";
num3 = 1;
num3 *= num1;
QVERIFY(num3 == "169523540030343");
num3 *= num2;
QVERIFY(num3 == "144093497850978300540184466340");
num3 *= num1 * num2;
QVERIFY(num3 == "20762936122929888116068405550279299956640101675030592995600");
num3 *= 0;
QVERIFY(num3 == 0);
num3 = 1;
num3 *= -1234567890;
QVERIFY(num3 == -1234567890);
num3 *= "-12345678909876543210";
QVERIFY(num3 == "15241578762383784111263526900");
}
void arithmetictests::arithmeticAssignmentDivisionTest() {
BigInt num1, num2, num3;
num1 = "1695235400303";
num2 = "-14409349785097830054018446630";
num3 = "99609344092229394637577667754049630552571016118837570372569130682";
num3 /= num1;
QVERIFY(num3 == "58758414362055909808086078831411583704925762083687648");
2019-07-10 17:59:54 +03:00
num3 /= num2;
2019-07-10 17:59:54 +03:00
QVERIFY(num3 == "-4077797765921675738706461");
num3 /= num2 / num1;
QVERIFY(num3 == 479745944);
num3 /= num1;
QVERIFY(num3 == 0);
num3 = "15241578762383784111263526900";
num3 /= -1234567890;
QVERIFY(num3 == "-12345678909876543210");
num3 /= "-12345678909876543210";
QVERIFY(num3 == 1);
}
2019-07-09 15:35:24 +03:00
void arithmetictests::arithmeticAssignmentModuloTest() {
BigInt num1, num2, num3;
num1 = "82548281880706855287";
num2 = "-3093004007127403784763865131496495744552";
num3 = "28759936859007420850030703143893813386234625466713870488148000919";
num3 %= num2;
QVERIFY(num3 == "2998899812449910677529571999817489505831");
2019-07-10 17:59:54 +03:00
num2 %= num1;
QVERIFY(num2 == "-23415035301048583249");
num3 %= num1;
QVERIFY(num3 == "66666005575090474406");
num1 %= num3;
QVERIFY(num1 == "15882276305616380881");
num2 %= num1;
QVERIFY(num2 == "-7532758995432202368");
num3 = "459084894176556768517930341954189452458611284176831884451259";
num3 %= -1032535817;
QVERIFY(num3 == 192792682);
num3 = "459084894176556768517930341954189452458611284176831884451259";
num3 %= "7930435512290528311470664857140269665";
QVERIFY(num3 == "4828359958287405771596693425686847994");
2019-07-09 15:35:24 +03:00
}
2019-07-09 13:59:03 +03:00
QTEST_APPLESS_MAIN(arithmetictests)
#include "tst_arithmetictests.moc"