00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "ADH_test.h"
00011 #include "rational.h"
00012 #include "decimal.h"
00013
00014
00015
00016
00017
00018 template <class INT>
00019 class rational_TestFixture : public TestCase {
00020 protected:
00021 rational<INT> m_half, m_quarter, m_one, m_eight, m_five;
00022 public:
00023 virtual void setUp();
00024 };
00025 template <class INT>
00026 void rational_TestFixture<INT>::setUp() {
00027 m_half.set(1,2);
00028 m_quarter.set(1,4);
00029 m_one.set(1);
00030 m_eight.set(1,8);
00031 m_five.set(1,5);
00032 }
00033
00034 template <class INT>
00035 class rational_Test_Add : public rational_TestFixture<INT> {
00036 public:
00037 bool run();
00038 };
00039
00040
00041
00042 template <class INT>
00043 bool rational_Test_Add<INT>::run() {
00044 assertTrue( m_half+m_quarter == rational<INT>(30,40) );
00045 assertTrue( rational<INT>(30,40) == m_quarter+m_half );
00046
00047 assertTrue( m_one+m_quarter == rational<INT>(125,100) );
00048 assertTrue( rational<INT>(125,100) == m_quarter+m_one );
00049
00050 assertTrue( rational<INT>(1,3) != rational<INT>(33,100) );
00051
00052 assertTrue( m_eight+m_five == rational<INT>(13,40) );
00053 assertTrue( rational<INT>(13,40) == m_five+m_eight );
00054
00055
00056 m_half = m_quarter = m_one = m_eight = m_five = 0;
00057 return nError() == 0;
00058 }
00059
00060
00061 template <class INT>
00062 class rational_Test_Substract : public rational_TestFixture<INT> {
00063 public:
00064 bool run();
00065 };
00066
00067
00068
00069 template <class INT>
00070 bool rational_Test_Substract<INT>::run() {
00071 assertTrue( m_half-m_quarter == rational<INT>(10,40) );
00072 assertTrue( rational<INT>(-10,40) == m_quarter-m_half );
00073
00074 assertTrue( m_one-m_quarter == rational<INT>(75,100) );
00075 assertTrue( rational<INT>(-75,100) == m_quarter-m_one );
00076
00077 assertEquals( rational<INT>(-3,4) , m_quarter-m_one );
00078 assertTrue( rational<INT>(75,100) == m_one-m_quarter );
00079
00080 assertTrue( m_eight-m_five == rational<INT>(-3,40) );
00081 assertTrue( rational<INT>(3,40) == m_five-m_eight );
00082
00083
00084 m_half = m_quarter = m_one = m_eight = m_five = 0;
00085 return nError() == 0;
00086 }
00087
00088 template <class INT>
00089 class rational_Test_Multiplication : public rational_TestFixture<INT> {
00090 public:
00091 bool run();
00092 };
00093
00094
00095
00096 template <class INT>
00097 bool rational_Test_Multiplication<INT>::run() {
00098 assertTrue( m_half * m_quarter == rational<INT>(10,80) );
00099 assertTrue( rational<INT>(10,80) == m_quarter * m_half );
00100
00101 assertTrue( m_one * m_quarter == rational<INT>(10,40) );
00102 assertTrue( rational<INT>(10,40) == m_quarter * m_one );
00103
00104 assertTrue( rational<INT>(1,3) != rational<INT>(33,100) );
00105
00106 assertTrue( m_eight*m_five == rational<INT>(1,40) );
00107 assertTrue( rational<INT>(1,40) == m_five*m_eight );
00108
00109
00110
00111 {
00112 INT deDOS=1, deTRES=1;
00113 for (int i=0; i<1024; ++i ) {
00114 INT elOTRO = (2 * deDOS);
00115 assertTrue( deDOS < elOTRO );
00116 deDOS = elOTRO;
00117 }
00118 for (int i=0; i<512; ++i ) {
00119 deTRES *= 3;
00120 }
00121 assertTrue( mcd<INT>(deDOS, deTRES) == 1 );
00122 }
00123
00124 m_half = m_quarter = m_one = m_eight = m_five = 0;
00125
00126 return nError() == 0;
00127 }
00128
00129
00130 template <class INT>
00131 class rational_Test_Division : public rational_TestFixture<INT> {
00132 public:
00133 bool run();
00134 };
00135
00136
00137
00138 template <class INT>
00139 bool rational_Test_Division<INT>::run() {
00140 assertTrue( m_half/m_quarter == rational<INT>(4,2) );
00141 assertTrue( ( rational<INT>(1,2) ) == (m_quarter/m_half) );
00142
00143 assertTrue( m_one/m_quarter == rational<INT>(4) );
00144 assertTrue( rational<INT>(1,4) == m_quarter/m_one );
00145
00146 assertTrue( rational<INT>(1,3) != rational<INT>(33,100) );
00147
00148 assertTrue( m_eight/m_five == rational<INT>(5,8) );
00149 assertTrue( rational<INT>(8,5) == m_five/m_eight );
00150
00151
00152 m_half = m_quarter = m_one = m_eight = m_five = 0;
00153 return nError() == 0;
00154 }
00155
00156
00157
00158 int main() {
00159 rational_Test_Add< decimal > rational_Test_Add_Instance;
00160
00161 cout << endl << endl << "1) Prueba directa con \"TestFixture\"" << endl;
00162 rational_Test_Add_Instance.setUp();
00163 rational_Test_Add_Instance.run();
00164 Report(cout, rational_Test_Add_Instance);
00165 if (rational_Test_Add_Instance.nError() != 0 ) {
00166 cout << "El error" << endl << rational_Test_Add_Instance.toString();
00167 }
00168
00169 rational_Test_Substract< decimal > rational_Test_Substract_Instance;
00170 cout << endl << endl << "2) Prueba directa con \"TestFixture\"" << endl;
00171 rational_Test_Substract_Instance.setUp();
00172 rational_Test_Substract_Instance.run();
00173 Report(cout, rational_Test_Substract_Instance);
00174 if (rational_Test_Substract_Instance.nError() != 0 ) {
00175 cout << "El error" << endl << rational_Test_Substract_Instance.toString();
00176 }
00177
00178 rational_Test_Multiplication< decimal > rational_Test_Multiplication_Instance;
00179
00180 cout << endl << endl << "1) Prueba directa con \"TestFixture\"" << endl;
00181 rational_Test_Multiplication_Instance.setUp();
00182 rational_Test_Multiplication_Instance.run();
00183 Report(cout, rational_Test_Multiplication_Instance);
00184 if (rational_Test_Multiplication_Instance.nError() != 0 ) {
00185 cout << "El error" << endl << rational_Test_Multiplication_Instance.toString();
00186 }
00187
00188 rational_Test_Division< decimal > rational_Test_Division_Instance;
00189
00190 cout << endl << endl << "1) Prueba directa con \"TestFixture\"" << endl;
00191 rational_Test_Division_Instance.setUp();
00192 rational_Test_Division_Instance.run();
00193 Report(cout, rational_Test_Division_Instance);
00194 if (rational_Test_Division_Instance.nError() != 0 ) {
00195 cout << "El error" << endl << rational_Test_Division_Instance.toString();
00196 }
00197
00198 cin.get();
00199
00200 return 0;
00201 }
00202
00203