diff options
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.cpp | 176 |
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(); |
