void TestConstructorsAndCopy() { ScopedPass pass("Rational::[Rational/operator=/Flip]()"); Rational<unsigned int> rat; assert(rat.GetNumerator() == 0); assert(rat.GetDenominator() == 1); Rational<unsigned int> rat1(7); assert(rat1.GetNumerator() == 7); assert(rat1.GetDenominator() == 1); Rational<unsigned int> rat2(7, 2); assert(rat2.GetNumerator() == 7); assert(rat2.GetDenominator() == 2); rat = rat2; assert(rat.GetNumerator() == 7); assert(rat.GetDenominator() == 2); rat2 = rat.Flip(); assert(rat.GetNumerator() == rat2.GetDenominator()); assert(rat.GetDenominator() == rat2.GetNumerator()); assert(rat2.GetNumerator() == 2); assert(rat2.GetDenominator() == 7); }
bool Rational::operator==(Rational& r) { Rational rational(this->GetNumerator(), this->GetDenominator()); int l_GCD = GCD(this->GetNumerator(), this->GetDenominator()); Update(l_GCD, rational); int r_GCD = GCD(r.GetNumerator(), r.GetDenominator()); Update(r_GCD, r); if (rational.GetNumerator() == r.GetNumerator() && rational.GetDenominator() == r.GetDenominator()) return true; else return false; }
bool Rational::operator<(Rational& r) { double _tempLeft = std::round(this->GetNumerator() / this->GetDenominator()); double _tempRight = std::round(r.GetNumerator() / r.GetDenominator()); if (_tempLeft < _tempRight) return true; else return false; }
Rational Rational::operator/(Rational& r) { Rational rational; rational.SetNumerator(this->m_Numerator * r.m_Denominator); rational.SetDenominator(this->m_Denominator * r.m_Numerator); int gcd = GCD(rational.GetNumerator(), rational.GetDenominator()); Update(gcd, rational); return rational; }
Rational Rational::operator-(Rational& r) { Rational rational; //Object to return rational.m_Numerator = this->m_Numerator - r.m_Numerator; rational.SetDenominator(r.GetDenominator()); int gcd = GCD(rational.GetNumerator(), rational.GetDenominator()); Update(gcd, rational); return rational; }