Changeset fcf17a4 in rtems


Ignore:
Timestamp:
May 14, 1999, 4:25:15 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
9e7d42dd
Parents:
44dd8a61
Message:

Added testing for C++ exceptions from Rosimildo DaSilva?
<rdasilva@…>.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/tests/samples/cdtest/main.cc

    r44dd8a61 rfcf17a4  
    1717 *  http://www.OARcorp.com/rtems/license.html.
    1818 *
     19 *
     20 *  by Rosimildo da Silva:
     21 *  Modified the test a bit to indicate when an instance is
     22 *  global or not, and added code to test C++ exception.
     23 *
     24 *
    1925 *  $Id$
    2026 */
     27// #define RTEMS_TEST_IO_STREAM
    2128
    2229#include <rtems.h>
     
    2734#endif
    2835
    29 extern "C" {
     36extern "C"
     37{
     38#include <tmacros.h>
    3039extern rtems_task main_task(rtems_task_argument);
    3140}
     
    3544class A {
    3645public:
    37     A(void)
     46  A(const char *p = "LOCAL" ) : ptr( p )
    3847    {
    3948        num_inst++;
    4049        printf(
    41           "Hey I'm in base class constructor number %d for %p.\n",
    42           num_inst,
    43           this
     50          "%s: Hey I'm in base class constructor number %d for %p.\n",
     51          p, num_inst, this
    4452        );
    4553
     
    5563    {
    5664        printf(
    57           "Hey I'm in base class destructor number %d for %p.\n",
    58           num_inst,
    59           this
     65          "%s: Hey I'm in base class destructor number %d for %p.\n",
     66          ptr, num_inst, this
    6067        );
    6168        print();
     
    6774protected:
    6875    char  *string;
     76    const char *ptr;
    6977};
    7078
    7179class B : public A {
    7280public:
    73     B(void)
     81  B(const char *p = "LOCAL" ) : A( p )
    7482    {
    7583        num_inst++;
    7684        printf(
    77           "Hey I'm in derived class constructor number %d for %p.\n",
    78           num_inst,
    79           this
     85          "%s: Hey I'm in derived class constructor number %d for %p.\n",
     86          p, num_inst,  this
    8087        );
    8188
     
    9198    {
    9299        printf(
    93           "Hey I'm in derived class destructor number %d for %p.\n",
    94           num_inst,
     100          "%s: Hey I'm in derived class destructor number %d for %p.\n",
     101          ptr, num_inst,
    95102          this
    96103        );
     
    103110
    104111
    105 A foo;
    106 B foobar;
     112class RtemsException
     113{
     114public:
     115   
     116    RtemsException( char *module, int ln, int err = 0 )
     117    : error( err ), line( ln ), file( module )
     118    {
     119      printf( "RtemsException raised=File:%s, Line:%d, Error=%X\n",
     120               file, line, error );
     121    }
     122
     123    void show()
     124    {
     125      printf( "RtemsException ---> File:%s, Line:%d, Error=%X\n",
     126               file, line, error );
     127    }
     128
     129private:
     130   int  error;
     131   int  line;
     132   char *file;
     133
     134};
     135
     136
     137
     138A foo( "GLOBAL" );
     139B foobar( "GLOBAL" );
    107140
    108141void
     
    117150    printf("IO Stream not tested\n");
    118151#endif
    119 
    120152    bar = blech;
     153    rtems_task_wake_after( 5 * get_ticks_per_second() );
    121154}
    122155
     
    128161//
    129162
     163static void foo_function()
     164{
     165    try
     166    {
     167      throw "foo_function() throw this exception"; 
     168    }
     169    catch( const char *e )
     170    {
     171     printf( "foo_function() catch block called:\n   < %s  >\n", e );
     172     throw "foo_function() re-throwing execption..."; 
     173    }
     174}
    130175
    131176rtems_task main_task(
     
    139184    printf( "*** END OF CONSTRUCTOR/DESTRUCTOR TEST ***\n\n\n" );
    140185
     186
     187    printf( "*** TESTING C++ EXCEPTIONS ***\n\n" );
     188
     189    try
     190    {
     191      foo_function();
     192    }
     193    catch( const char *e )
     194    {
     195       printf( "Success catching a char * exception\n%s\n", e );
     196    }
     197    try
     198    {
     199      printf( "throw an instance based exception\n" );
     200                throw RtemsException( __FILE__, __LINE__, 0x55 );
     201    }
     202    catch( RtemsException & ex )
     203    {
     204       printf( "Success catching RtemsException...\n" );
     205       ex.show();
     206    }
     207    catch(...)
     208    {
     209      printf( "Caught another exception.\n" );
     210    }
     211    printf( "Exceptions are working properly.\n" );
     212    rtems_task_wake_after( 5 * get_ticks_per_second() );
     213    printf( "Global Dtors should be called after this line....\n" );
    141214    exit(0);
    142215}
  • testsuites/samples/cdtest/main.cc

    r44dd8a61 rfcf17a4  
    1717 *  http://www.OARcorp.com/rtems/license.html.
    1818 *
     19 *
     20 *  by Rosimildo da Silva:
     21 *  Modified the test a bit to indicate when an instance is
     22 *  global or not, and added code to test C++ exception.
     23 *
     24 *
    1925 *  $Id$
    2026 */
     27// #define RTEMS_TEST_IO_STREAM
    2128
    2229#include <rtems.h>
     
    2734#endif
    2835
    29 extern "C" {
     36extern "C"
     37{
     38#include <tmacros.h>
    3039extern rtems_task main_task(rtems_task_argument);
    3140}
     
    3544class A {
    3645public:
    37     A(void)
     46  A(const char *p = "LOCAL" ) : ptr( p )
    3847    {
    3948        num_inst++;
    4049        printf(
    41           "Hey I'm in base class constructor number %d for %p.\n",
    42           num_inst,
    43           this
     50          "%s: Hey I'm in base class constructor number %d for %p.\n",
     51          p, num_inst, this
    4452        );
    4553
     
    5563    {
    5664        printf(
    57           "Hey I'm in base class destructor number %d for %p.\n",
    58           num_inst,
    59           this
     65          "%s: Hey I'm in base class destructor number %d for %p.\n",
     66          ptr, num_inst, this
    6067        );
    6168        print();
     
    6774protected:
    6875    char  *string;
     76    const char *ptr;
    6977};
    7078
    7179class B : public A {
    7280public:
    73     B(void)
     81  B(const char *p = "LOCAL" ) : A( p )
    7482    {
    7583        num_inst++;
    7684        printf(
    77           "Hey I'm in derived class constructor number %d for %p.\n",
    78           num_inst,
    79           this
     85          "%s: Hey I'm in derived class constructor number %d for %p.\n",
     86          p, num_inst,  this
    8087        );
    8188
     
    9198    {
    9299        printf(
    93           "Hey I'm in derived class destructor number %d for %p.\n",
    94           num_inst,
     100          "%s: Hey I'm in derived class destructor number %d for %p.\n",
     101          ptr, num_inst,
    95102          this
    96103        );
     
    103110
    104111
    105 A foo;
    106 B foobar;
     112class RtemsException
     113{
     114public:
     115   
     116    RtemsException( char *module, int ln, int err = 0 )
     117    : error( err ), line( ln ), file( module )
     118    {
     119      printf( "RtemsException raised=File:%s, Line:%d, Error=%X\n",
     120               file, line, error );
     121    }
     122
     123    void show()
     124    {
     125      printf( "RtemsException ---> File:%s, Line:%d, Error=%X\n",
     126               file, line, error );
     127    }
     128
     129private:
     130   int  error;
     131   int  line;
     132   char *file;
     133
     134};
     135
     136
     137
     138A foo( "GLOBAL" );
     139B foobar( "GLOBAL" );
    107140
    108141void
     
    117150    printf("IO Stream not tested\n");
    118151#endif
    119 
    120152    bar = blech;
     153    rtems_task_wake_after( 5 * get_ticks_per_second() );
    121154}
    122155
     
    128161//
    129162
     163static void foo_function()
     164{
     165    try
     166    {
     167      throw "foo_function() throw this exception"; 
     168    }
     169    catch( const char *e )
     170    {
     171     printf( "foo_function() catch block called:\n   < %s  >\n", e );
     172     throw "foo_function() re-throwing execption..."; 
     173    }
     174}
    130175
    131176rtems_task main_task(
     
    139184    printf( "*** END OF CONSTRUCTOR/DESTRUCTOR TEST ***\n\n\n" );
    140185
     186
     187    printf( "*** TESTING C++ EXCEPTIONS ***\n\n" );
     188
     189    try
     190    {
     191      foo_function();
     192    }
     193    catch( const char *e )
     194    {
     195       printf( "Success catching a char * exception\n%s\n", e );
     196    }
     197    try
     198    {
     199      printf( "throw an instance based exception\n" );
     200                throw RtemsException( __FILE__, __LINE__, 0x55 );
     201    }
     202    catch( RtemsException & ex )
     203    {
     204       printf( "Success catching RtemsException...\n" );
     205       ex.show();
     206    }
     207    catch(...)
     208    {
     209      printf( "Caught another exception.\n" );
     210    }
     211    printf( "Exceptions are working properly.\n" );
     212    rtems_task_wake_after( 5 * get_ticks_per_second() );
     213    printf( "Global Dtors should be called after this line....\n" );
    141214    exit(0);
    142215}
Note: See TracChangeset for help on using the changeset viewer.