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
00019 template <class INT>
00020 class rational_TestFixture : public TestCase {
00021 protected:
00022 rational<INT> m_half, m_quarter, m_one ,m_three, m_eight ;
00023 public:
00024 virtual void setUp();
00025 };
00026 template <class INT>
00027 void rational_TestFixture<INT>::setUp() {
00028 m_half.set(1,2);
00029 m_quarter.set(1,4);
00030 m_one.set(1);
00031 m_three.set(3);
00032 m_eight.set(8);
00033 }
00034
00035 template <class INT>
00036 class rational_Test_Add : public rational_TestFixture<INT> {
00037 public:
00038 bool run();
00039 };
00040
00041
00042
00043 template <class INT>
00044 bool rational_Test_Add<INT>::run() {
00045 assertTrue( m_half+m_quarter == rational<INT>(30,40) );
00046 assertTrue( rational<INT>(30,40) == m_quarter+m_half );
00047
00048 assertTrue( m_one+m_quarter == rational<INT>(125,100) );
00049 assertTrue( rational<INT>(125,100) == m_quarter+m_one );
00050
00051 assertTrue( rational<INT>(1,3) != rational<INT>(33,100) );
00052
00053
00054 m_half = m_quarter = m_one = 0;
00055 return nError() == 0;
00056 }
00057
00058
00059 template <class INT>
00060 class rational_Test_Substract : public rational_TestFixture<INT> {
00061 public:
00062 bool run();
00063 };
00064
00065
00066
00067 template <class INT>
00068 bool rational_Test_Substract<INT>::run() {
00069 assertTrue( m_half-m_quarter == rational<INT>(10,40) );
00070
00071 assertTrue( rational<INT>(-0.75) != m_quarter-m_one );
00072 assertTrue( rational<INT>(75,100) != m_one+m_quarter );
00073
00074
00075 m_half = m_quarter = m_one = 0;
00076 return nError() == 0;
00077 }
00078
00079
00080 template <class INT>
00081 class rational_Test_Divicion : public rational_TestFixture<INT> {
00082 public:
00083 bool run();
00084 };
00085
00086
00087
00088 template <class INT>
00089 bool rational_Test_Divicion<INT>::run() {
00090 assertTrue( m_half/m_quarter != rational<INT>(10,40) );
00091 assertTrue( rational<INT>(10,40) != -m_quarter/m_half );
00092
00093 assertTrue( -m_three/m_quarter != rational<INT>(75,100) );
00094 assertTrue( rational<INT>(160,60) == m_eight/m_three );
00095
00096 assertTrue( rational<INT>(1,4) != m_one/m_quarter );
00097 assertTrue( rational<INT>(75,100) != m_one/m_quarter );
00098
00099
00100 m_half = m_quarter = m_one = 0;
00101 return nError() == 0;
00102 }
00103
00104
00105 template <class INT>
00106 class rational_Test_Multiplication : public rational_TestFixture<INT> {
00107 public:
00108 bool run();
00109 };
00110
00111
00112
00113 template <class INT>
00114 bool rational_Test_Multiplication<INT>::run() {
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 {
00125 INT deDOS=1, deTRES=1;
00126 for (int i=1; i<=1023; ++i ) {
00127 INT elOTRO = (2 * deDOS);
00128 assertTrue( deDOS < elOTRO );
00129 deDOS = elOTRO;
00130 }
00131 for (int i=1; i<512; ++i ) {
00132 deTRES *= 3;
00133 }
00134 assertTrue( mcd<INT>(deDOS, deTRES) == 1 );
00135 }
00136
00137
00138 m_half = m_quarter = m_one = 0;
00139 return nError() == 0;
00140 }
00141
00142
00143 int main() {
00144 rational_Test_Add<long> rational_Test_Add_Instance;
00145
00146 cout << endl << endl << "1) Prueba directa con \"TestFixture\"" << endl;
00147 rational_Test_Add_Instance.setUp();
00148 rational_Test_Add_Instance.run();
00149 Report(cout, rational_Test_Add_Instance);
00150 if (rational_Test_Add_Instance.nError() != 0 ) {
00151 cout << "El error" << endl << rational_Test_Add_Instance.toString();
00152 }
00153
00154 rational_Test_Substract<short> rational_Test_Substract_Instance;
00155 cout << endl << endl << "2) Prueba directa con \"TestFixture\"" << endl;
00156 rational_Test_Substract_Instance.setUp();
00157 rational_Test_Substract_Instance.run();
00158 Report(cout, rational_Test_Substract_Instance);
00159 if (rational_Test_Substract_Instance.nError() != 0 ) {
00160 cout << "El error" << endl << rational_Test_Substract_Instance.toString();
00161 }
00162
00163 rational_Test_Divicion<int> rational_Test_Divicion_Instance;
00164 cout << endl << endl << "3) Prueba directa con \"TestFixture\"" << endl;
00165 rational_Test_Divicion_Instance.setUp();
00166 rational_Test_Divicion_Instance.run();
00167 Report(cout, rational_Test_Divicion_Instance);
00168 if (rational_Test_Divicion_Instance.nError() != 0 ) {
00169 cout << "El error" << endl << rational_Test_Divicion_Instance.toString();
00170 }
00171
00172 rational_Test_Multiplication<decimal> rational_Test_Multiplication_Instance;
00173 cout << endl << endl << "4) Prueba directa con \"TestFixture\"" << endl;
00174 rational_Test_Multiplication_Instance.setUp();
00175 rational_Test_Multiplication_Instance.run();
00176 Report(cout, rational_Test_Multiplication_Instance);
00177 if (rational_Test_Multiplication_Instance.nError() != 0 ) {
00178 cout << "El error" << endl << rational_Test_Multiplication_Instance.toString();
00179 }
00180 cin.get();
00181 return 0;
00182 }
00183
00184