Página principal | Lista de namespace | Jerarquía de la clase | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros

test_rational.cpp

Ir a la documentación de este archivo.
00001 // test_rational.cpp (C) 2006 [email protected]
00002 
00003 /** \file  test_rational.cpp
00004     \brief Programa de prueba para la clase \c rational
00005 
00006     \author Adolfo Di Mare <[email protected]>
00007     \date   2006
00008 */
00009 
00010 #include "ADH_test.h"
00011 #include "rational.h"
00012 #include "decimal.h"
00013 
00014 
00015 /// Ambiente de prueba para la clase complicada para probar \c rational.
00016 /// - No es necesario definir el método \c tearDown() pues para este
00017 ///   caso específico \c TestFixture::tearDown() funciona bien.
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(); ///< Establece el ambiente de prueba
00024 }; // rational_TestFixture 
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 }; // rational_TestFixture
00039 
00040 /// Función principal del la prueba
00041 /// - Requiere que recién haya sido ejecutado \c setUp()
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     // Esto está aquí sólo para destrozar los valores de *this
00056     m_half = m_quarter = m_one = m_eight = m_five = 0;
00057     return nError() == 0;
00058 }
00059 
00060 /// Clase para probar la resta de racionales.
00061 template <class INT>
00062 class rational_Test_Substract : public rational_TestFixture<INT> {
00063 public:
00064     bool run();
00065 }; // rational_TestFixture
00066 
00067 /// Función principal del la prueba
00068 /// - Requiere que recién haya sido ejecutado \c setUp()
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     // Esto está aquí sólo para destrozar los valores de *this
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 }; // rational_TestFixture
00093 
00094 /// Función principal del la prueba
00095 /// - Requiere que recién haya sido ejecutado \c setUp()
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     // Esto está aquí sólo para destrozar los valores de *this
00110 
00111         { // 2^1024 * 3 ^ 512;
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 }; // rational_TestFixture
00135 
00136 /// Función principal del la prueba
00137 /// - Requiere que recién haya sido ejecutado \c setUp()
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     // Esto está aquí sólo para destrozar los valores de *this
00152     m_half = m_quarter = m_one = m_eight = m_five = 0;
00153     return nError() == 0;
00154 }
00155 
00156 /// Programa principal desde donse se invocan todas las pruebas
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 // EOF: test_rational.cpp

Generado el Thu Sep 20 12:33:06 2007 para Clase decimal: por  doxygen 1.4.1
Hosted by www.Geocities.ws

1