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 
00016 /// Ambiente de prueba para la clase complicada para probar \c rational.
00017 /// - No es necesario definir el método \c tearDown() pues para este
00018 ///   caso específico \c TestFixture::tearDown() funciona bien.
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(); ///< Establece el ambiente de prueba
00025 }; // rational_TestFixture 
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 }; // rational_TestFixture
00040 
00041 /// Función principal del la prueba
00042 /// - Requiere que recién haya sido ejecutado \c setUp()
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     // Esto está aquí sólo para destrozar los valores de *this
00054     m_half = m_quarter = m_one = 0;
00055     return nError() == 0;
00056 }
00057 
00058 /// Clase para probar la resta de racionales.
00059 template <class INT>
00060 class rational_Test_Substract : public rational_TestFixture<INT> {
00061 public:
00062     bool run();
00063 }; // rational_TestFixture
00064 
00065 /// Función principal del la prueba
00066 /// - Requiere que recién haya sido ejecutado \c setUp()
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     // Esto está aquí sólo para destrozar los valores de *this
00075     m_half = m_quarter = m_one = 0;
00076     return nError() == 0;
00077 }
00078 
00079 /// Clase para probar la divicion de racionales.
00080 template <class INT>
00081 class rational_Test_Divicion : public rational_TestFixture<INT> {
00082 public:
00083     bool run();
00084 }; // rational_TestFixture
00085 
00086 /// Función principal del la prueba
00087 /// - Requiere que recién haya sido ejecutado \c setUp()
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     // Esto está aquí sólo para destrozar los valores de *this
00100     m_half = m_quarter = m_one = 0;
00101     return nError() == 0;
00102 }
00103 
00104 /// Clase para probar la multiplicacion de racionales.
00105 template <class INT>
00106 class rational_Test_Multiplication : public rational_TestFixture<INT> {
00107 public:
00108     bool run();
00109 }; // rational_TestFixture
00110 
00111 /// Función principal del la prueba
00112 /// - Requiere que recién haya sido ejecutado \c setUp()
00113 template <class INT>
00114 bool rational_Test_Multiplication<INT>::run() {
00115    /* assertTrue(  m_half * m_quarter != rational<INT>(10,40) );
00116     assertTrue(  rational<INT>(4,32)  == m_quarter * m_half );
00117 
00118     assertTrue(  m_one/m_quarter   != rational<INT>(75,100) );
00119     assertTrue(  rational<INT>(400,100) != m_quarter * m_one  );
00120 
00121     assertEquals( rational<INT>(1,4) ,  m_quarter * m_one );
00122     assertTrue(   rational<INT>(75,100) != m_one * m_quarter);*/
00123 
00124   {   // 2^1024 * 3 ^ 512;
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     // Esto está aquí sólo para destrozar los valores de *this
00138     m_half = m_quarter = m_one = 0;
00139     return nError() == 0;
00140 }
00141 /// Programa principal desde donse se invocan todas las pruebas
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 // EOF: test_rational.cpp

Generado el Thu Sep 20 17:24:00 2007 para Tarea Programada #4 por  doxygen 1.4.1
Hosted by www.Geocities.ws

1