1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#include <cxxtest/TestSuite.h>
#include "common/rational.h"
class RationalTestSuite : public CxxTest::TestSuite {
public:
void test_operators() {
Common::Rational r0(6, 3);
Common::Rational r1(1, 2);
Common::Rational r2(62, 2);
Common::Rational r3(34, 4);
Common::Rational r4 = (r0 + r1) * 3;
Common::Rational r5 = (r2 - r3) / 3;
Common::Rational r6 = r5 - 1;
TS_ASSERT(r4 == r5);
TS_ASSERT(!(r4 != r5));
TS_ASSERT(r4 != r6);
TS_ASSERT(!(r4 == r6));
TS_ASSERT(-r4 == -r5);
TS_ASSERT(r0 == 2);
TS_ASSERT(!(r0 != 2));
TS_ASSERT(!(r3 == 2));
TS_ASSERT(r3 != 2);
TS_ASSERT( r4 > r6);
TS_ASSERT( r4 >= r6);
TS_ASSERT(!(r4 < r6));
TS_ASSERT(!(r4 <= r6));
TS_ASSERT( r4 > 7);
TS_ASSERT( r4 >= 7);
TS_ASSERT(!(r4 < 7));
TS_ASSERT(!(r4 <= 7));
TS_ASSERT( 7 < r4);
TS_ASSERT( 7 <= r4);
TS_ASSERT(!(7 > r4));
TS_ASSERT(!(7 >= r4));
}
void test_assign() {
Common::Rational r0(6, 3);
Common::Rational r1(1, 2);
TS_ASSERT_EQUALS(r0, 2);
TS_ASSERT_EQUALS(r1, Common::Rational(1, 2));
r0 = r1;
TS_ASSERT_EQUALS(r0, r1);
TS_ASSERT_EQUALS(r0, Common::Rational(1, 2));
}
void test_negative() {
Common::Rational r0(6, 3);
Common::Rational r1(1, 2);
r0 = -r0;
r1 = -r1;
TS_ASSERT_EQUALS(r0, -2);
TS_ASSERT_EQUALS(r1, Common::Rational(-1, 2));
TS_ASSERT_EQUALS(r1, Common::Rational(1, -2));
TS_ASSERT_EQUALS(r1, Common::Rational(-25, 50));
TS_ASSERT_EQUALS(r1, Common::Rational(25, -50));
}
void test_add_sub() {
const Common::Rational r0(6, 3);
const Common::Rational r1(1, 2);
TS_ASSERT_EQUALS(r0 + r1, Common::Rational(5, 2));
TS_ASSERT_EQUALS(r1 + r0, Common::Rational(5, 2));
TS_ASSERT_EQUALS(r0 - r1, Common::Rational(3, 2));
TS_ASSERT_EQUALS(r1 - r0, Common::Rational(-3, 2));
TS_ASSERT_EQUALS(1 + r1, Common::Rational(3, 2));
TS_ASSERT_EQUALS(r1 + 1, Common::Rational(3, 2));
TS_ASSERT_EQUALS(1 - r1, Common::Rational(1, 2));
TS_ASSERT_EQUALS(r1 - 1, Common::Rational(-1, 2));
}
void test_add_sub2() {
// Make sure cancelation works correctly
const Common::Rational r0(4, 15); // = 8 / 30
const Common::Rational r1(1, 6); // = 5 / 30
TS_ASSERT_EQUALS(r0 + r1, Common::Rational(13, 30));
TS_ASSERT_EQUALS(r1 + r0, Common::Rational(13, 30));
TS_ASSERT_EQUALS(r0 - r1, Common::Rational(1, 10));
TS_ASSERT_EQUALS(r1 - r0, Common::Rational(-1, 10));
TS_ASSERT_EQUALS(1 + r1, Common::Rational(7, 6));
TS_ASSERT_EQUALS(r1 + 1, Common::Rational(7, 6));
TS_ASSERT_EQUALS(1 - r1, Common::Rational(5, 6));
TS_ASSERT_EQUALS(r1 - 1, Common::Rational(-5, 6));
}
void test_mul() {
const Common::Rational r0(6, 3);
const Common::Rational r1(1, 2);
const Common::Rational r2(15, 14);
const Common::Rational r3(7,3);
const Common::Rational r4(5,2);
TS_ASSERT_EQUALS(r0 * r1, 1);
TS_ASSERT_EQUALS(r2 * r3, r4);
TS_ASSERT_EQUALS((-r2) * r3, -r4);
TS_ASSERT_EQUALS(r2 * (-r3), -r4);
TS_ASSERT_EQUALS((-r2) * (-r3), r4);
TS_ASSERT_EQUALS(r1 * 2, 1);
TS_ASSERT_EQUALS(2 * r1, 1);
}
void test_div() {
Common::Rational r0(6, 3);
Common::Rational r1(1, 2);
TS_ASSERT_EQUALS(r0 / r1, 4);
TS_ASSERT_EQUALS(r1 / 2, Common::Rational(1, 4));
TS_ASSERT_EQUALS(2 / r1, Common::Rational(4, 1));
}
void test_isOne() {
Common::Rational r0(5, 5);
Common::Rational r1(1, 2);
Common::Rational r2(2, 1);
Common::Rational r3(1, 1);
TS_ASSERT(r0.isOne());
TS_ASSERT(!r1.isOne());
TS_ASSERT(!r2.isOne());
TS_ASSERT(r3.isOne());
}
};
|