Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Object-oriented Programming / 06-Practice-29.03.2022 / ex2 / Tests.cpp
diff options
context:
space:
mode:
Commitef6d8e6de6061015e7dd41e2f74b733515b4a2e2 (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-03-30 15:17:07 +0300
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-03-30 15:17:07 +0300
Files285ccedc5b4296a7022f4de131bbb5ab44bd99bc /Year 1/Object-oriented Programming/06-Practice-29.03.2022/ex2/Tests.cpp
uni-projects-ef6d8e6de6061015e7dd41e2f74b733515b4a2e2.tar
uni-projects-ef6d8e6de6061015e7dd41e2f74b733515b4a2e2.tar.gz
uni-projects-ef6d8e6de6061015e7dd41e2f74b733515b4a2e2.zip
Parent793100813b3c50a1f304904440366a7137ae0992 (diff)
Completed ex2 from yesterdays oop practice
1 files changed, 176 insertions, 0 deletions
-rw-r--r--Year 1/Object-oriented Programming/06-Practice-29.03.2022/ex2/Tests.cpp176
diff --git a/Year 1/Object-oriented Programming/06-Practice-29.03.2022/ex2/Tests.cpp b/Year 1/Object-oriented Programming/06-Practice-29.03.2022/ex2/Tests.cpp
new file mode 100644
index 0000000..1df52f5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/06-Practice-29.03.2022/ex2/Tests.cpp
@@ -0,0 +1,176 @@
+#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+#include "doctest.h"
+#include "Rational.h"
+
+TEST_SUITE_BEGIN("ClassRational");
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("DefaltCtor_HasValueOf1Over1_Always") {
+ Rational r;
+ CHECK_EQ(r.get_numerator(), 1);
+ CHECK_EQ(r.get_denumerator(), 1);
+ }
+ TEST_CASE("Ctor_SavesValues_WhenGivenCorrectInts") {
+ int num, denum;
+ SUBCASE("Positives") { num = 5, denum = 19; }
+ SUBCASE("Negatives") { num = -13, denum = -14; }
+ SUBCASE("0Numerator") { num = 0, denum = 2; }
+
+ Rational r(num, denum);
+ CHECK_EQ(r.get_numerator(), num);
+ CHECK_EQ(r.get_denumerator(), denum);
+ }
+ TEST_CASE("Ctor_SavesDefault_WhereThereIs0s") {
+ int num, denum;
+ SUBCASE("0Denumerator") { num = 38, denum = 0; } // a/0 is undefined for all integer values of a, default must be saved!
+ SUBCASE("0DenumeratorAndEnumerator") { num = denum = 0; } // 0/0 is undefined, default must be saved!
+
+ Rational r(num, denum);
+ CHECK_EQ(r.get_numerator(), 1);
+ CHECK_EQ(r.get_denumerator(), 1);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("NumeratorGetter_ReturnsCorrectValue_WhenCtorGivenCorrectInt") {
+ int num, denum = 2;
+ SUBCASE("Positive") { num = 86; }
+ SUBCASE("Negative") { num = -1653; }
+ SUBCASE("0") { num = 0; }
+
+ Rational r(num, denum);
+ CHECK_EQ(r.get_numerator(), num);
+ }
+ TEST_CASE("NumeratorSetter_SetsValue_WhenGivenCorrectInt") {
+ Rational r(173, 57);
+
+ int newNumerator;
+ SUBCASE("Positive") { newNumerator = 3; }
+ SUBCASE("Negative") { newNumerator = -82; };
+ SUBCASE("0") { newNumerator = 0; }
+
+ r.set_numerator(newNumerator);
+ CHECK_EQ(r.get_numerator(), newNumerator);
+ }
+ TEST_CASE("DenumeratorGetter_ReturnsCorrectValue_WhenCtorGivenCorrectInt") {
+ int num = 2, denum;
+ SUBCASE("Positive") { denum = 35; }
+ SUBCASE("Negative") { denum = -571; }
+
+ Rational r(num, denum);
+ CHECK_EQ(r.get_denumerator(), denum);
+ }
+ TEST_CASE("DenumeratorGetter_ReturnsDefault_WhenCtorGiven0") {
+ Rational r(2, 0);
+ CHECK_EQ(r.get_denumerator(), 1);
+ }
+ TEST_CASE("DenumeratorSetter_SetsValue_WhenGivenCorrectInt") {
+ Rational r(712, 32);
+
+ int newDenumerator;
+ SUBCASE("Positive") { newDenumerator = 33; }
+ SUBCASE("Negative") { newDenumerator = -21; };
+
+ r.set_denumerator(newDenumerator);
+ CHECK_EQ(r.get_denumerator(), newDenumerator);
+ }
+ TEST_CASE("DenumeratorSetter_SetsDefault_WhenGiven0") {
+ Rational r(42, 90);
+ r.set_denumerator(0);
+ CHECK_EQ(r.get_denumerator(), 1);
+ }
+}
+
+TEST_CASE("Canonize_SimplifiesExpression_Always") {
+ int num, denum, sNum, sDenum;
+ SUBCASE("SimplifiedGreaterThan1") { num = sNum = 5, denum = sDenum = 4; };
+ SUBCASE("SimplifiedPositiveLessThan1") { num = sNum = 2, denum = sDenum = 9; };
+ SUBCASE("SimplifiedNegativeMoreThan-1") { num = sNum = -7, denum = sDenum = 8; };
+ SUBCASE("SimplifiedLessThan-1") { num = sNum = -27, denum = sDenum = 13; };
+ SUBCASE("NumeratorDivisibleByDenumerator") { num = 161, denum = 23, sNum = 7, sDenum = 1; }
+ SUBCASE("NegativeNumeratorDivisibleByDenumerator") { num = -161, denum = 23, sNum = -7, sDenum = 1; }
+ SUBCASE("NumeratorDivisibleByNegativeDenumerator") { num = 161, denum = -23, sNum = 7, sDenum = -1; }
+ SUBCASE("DenumeratorDivisbleByNumerator") { num = 19, denum = 171, sNum = 1, sDenum = 9; }
+ SUBCASE("NegativeDenumeratorDivisbleByNumerator") { num = 19, denum = -171, sNum = 1, sDenum = -9; }
+ SUBCASE("DenumeratorDivisbleByNegativeNumerator") { num = -19, denum = 171, sNum = -1, sDenum = 9; }
+ SUBCASE("NumeratorDenumeratorBothMultipliedBySameValue") { num = 6867, denum = 924, sNum = 327, sDenum = 44; }
+
+ Rational r(num, denum);
+ r.canonize();
+ CHECK_EQ(r.get_numerator(), sNum);
+ CHECK_EQ(r.get_denumerator(), sDenum);
+}
+
+TEST_SUITE("Operators") {
+ TEST_CASE("+_SumsRationals_WhenGivenProperValues") {
+ int num1, denum1, num2, denum2, numRes, denumRes;
+ SUBCASE("Positives") { num1 = 73, denum1 = 4, num2 = 14, denum2 = 99, numRes = 7283, denumRes = 396; }
+ SUBCASE("Negatives") { num1 = -73, denum1 = 4, num2 = -14, denum2 = 99, numRes = -7283, denumRes = 396; }
+
+ Rational r1(num1, denum1), r2(num2, denum2), sum = r1 + r2;
+ // sum.canonize();
+ CHECK_EQ(sum.get_numerator(), numRes);
+ CHECK_EQ(sum.get_denumerator(), denumRes);
+ }
+ TEST_CASE("+_ActsLike-_WhenSecondNumIsNegative") {
+ Rational r1(24, 13), r2(-46, 56), sum = r1 + r2;
+ sum.canonize();
+ CHECK_EQ(sum.get_numerator(), 373);
+ CHECK_EQ(sum.get_denumerator(), 364);
+ }
+ TEST_CASE("-_SubtractsRationals_WhenGivenProperValues") {
+ int num1, denum1, num2, denum2, numRes, denumRes;
+ SUBCASE("Positives") { num1 = 47, denum1 = 9, num2 = 13, denum2 = 53, numRes = 2374, denumRes = 477; }
+ SUBCASE("Negatives") { num1 = -47, denum1 = 9, num2 = -13, denum2 = 53, numRes = -2374, denumRes = 477; }
+
+ Rational r1(num1, denum1), r2(num2, denum2), sub = r1 - r2;
+ sub.canonize();
+ CHECK_EQ(sub.get_numerator(), numRes);
+ CHECK_EQ(sub.get_denumerator(), denumRes);
+ }
+ TEST_CASE("-_ActsLike+_WhenSecondNumIsNegative") {
+ Rational r1(913, 31), r2(-53, 2), sub = r1 - r2;
+ sub.canonize();
+ CHECK_EQ(sub.get_numerator(), 3469);
+ CHECK_EQ(sub.get_denumerator(), 62);
+ }
+ TEST_CASE("*_MultipliesRationals_WhenGivenProperValues") {
+ int num1, denum1, num2, denum2, numRes, denumRes;
+ SUBCASE("Positives") { num1 = 92, denum1 = 123, num2 = 13, denum2 = 7, numRes = 1196, denumRes = 861; }
+ SUBCASE("Negatives") { num1 = -92, denum1 = 123, num2 = -13, denum2 = 7, numRes = 1196, denumRes = 861; }
+ SUBCASE("FirstNegative") { num1 = -92, denum1 = 123, num2 = 13, denum2 = 7, numRes = -1196, denumRes = 861; }
+ SUBCASE("SecondNegative") { num1 = 92, denum1 = 123, num2 = -13, denum2 = 7, numRes = -1196, denumRes = 861; }
+ SUBCASE("Reciprocals") { num1 = denum2 = 73184, denum1 = num2 = 28413, numRes = 1, denumRes = 1; }
+
+ Rational r1(num1, denum1), r2(num2, denum2), mult = r1 * r2;
+ mult.canonize();
+ CHECK_EQ(mult.get_numerator(), numRes);
+ CHECK_EQ(mult.get_denumerator(), denumRes);
+ }
+ TEST_CASE("/_DividesRationals_WhenGivenProperValues") {
+ int num1, denum1, num2, denum2, numRes, denumRes;
+ SUBCASE("Positives") { num1 = 92, denum1 = 23, num2 = 13, denum2 = 7, numRes = 28, denumRes = 13; }
+ SUBCASE("Negatives") { num1 = -92, denum1 = 23, num2 = -13, denum2 = 7, numRes = -28, denumRes = -13; }
+ SUBCASE("FirstNegative") { num1 = -92, denum1 = 23, num2 = 13, denum2 = 7, numRes = -28, denumRes = 13; }
+ SUBCASE("SecondNegative") { num1 = 92, denum1 = 23, num2 = -13, denum2 = 7, numRes = 28, denumRes = -13; }
+ SUBCASE("SameValues") { num1 = num2 = 73184, denum1 = denum2 = 28413, numRes = 1, denumRes = 1; }
+
+ Rational r1(num1, denum1), r2(num2, denum2), div = r1 / r2;
+ div.canonize();
+ CHECK_EQ(div.get_numerator(), numRes);
+ CHECK_EQ(div.get_denumerator(), denumRes);
+ }
+}
+
+TEST_CASE("NumCmp_ReturnsProperValues_WhenGivenCorrectValues") {
+ int num1, denum1, num2, denum2, expectedRes;
+ SUBCASE("FirstLargerThanSecond") { num1 = 8364, denum1 = 921, num2 = 6510, denum2 = 947, expectedRes = 1; }
+ SUBCASE("SecondLargerThanFirst") { num1 = 19332, denum1 = 8477, num2 = 9947, denum2 = 2411, expectedRes = -1; }
+ SUBCASE("Equal") { num1 = denum1 = 3231, num2 = denum2 = 461, expectedRes = 0; }
+
+ Rational r1(num1, denum1), r2(num2, denum2);
+ int result = r1.numcmp(r2);
+ CHECK_EQ(result, expectedRes);
+}
+
+TEST_SUITE_END();