OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [language/] [cxx/] [ustl/] [current/] [tests/] [stdtest.h] - Rev 786

Compare with Previous | Blame | View Log

// This file is part of the ustl library, an STL implementation.
//
// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
// This file is free software, distributed under the MIT License.
//
// \file stdtest.h
// \brief Standard BVT harness.
//
#ifndef CYGONCE_STDTEST_H
#define CYGONCE_STDTEST_H
 
#include <ustl.h>
#include <signal.h>
#include <cyg/infra/testcase.h>
using namespace ustl;
 
typedef void (*stdtestfunc_t)(void);
 
#ifdef CYGVAR_USTL_CIN_COUT_CERR
/// Called when a signal is received.
static void OnSignal (int sig)
{
    cout.flush();
#ifdef HAVE_STRSIGNAL
    cerr.format ("Fatal error: %s received.\n", strsignal(sig));
#else
    cerr.format ("Fatal error: system signal %d received.\n", sig);
#endif
    cerr.flush();
    CYG_TEST_FAIL("Test failed");
    exit (sig);
}
 
/// Installs OnSignal as handler for signals.
static void InstallCleanupHandlers (void)
{
    static const uint8_t c_Signals[] = {
    SIGINT, SIGQUIT, SIGILL,  SIGTRAP, SIGABRT,
    SIGIOT, SIGBUS,  SIGFPE,  SIGSEGV, SIGTERM};
    for (uoff_t i = 0; i < VectorSize(c_Signals); ++i)
    {
        signal (c_Signals[i], OnSignal);
    }
}
 
/// executes the test function
#ifndef __EXCEPTIONS
// if eCos is compiled without exceptions support then we implement and install
// our own low level exception handler
void app_exception_handler(const ustl::exception& ex)
{
    ustl::diag_print_exception(ex);
    CYG_TEST_FAIL("Test failed because of an uSTL exception");
}
 
int StdTestHarness (stdtestfunc_t testFunction)
{
    InstallCleanupHandlers();
    ustl::set_app_exception_handler(app_exception_handler);
    (*testFunction)();
    cout << endl;
    cout.flush(); // if there is anything left to print then print it now
    return (EXIT_SUCCESS);
}
#else
// if eCos is compiled with exceptions support the we use the default 
// StdTestHarness implementation from uSTL library
int StdTestHarness (stdtestfunc_t testFunction)
{
    InstallCleanupHandlers();
    int rv = EXIT_FAILURE;
    try {
    (*testFunction)();
    rv = EXIT_SUCCESS;
    } catch (ustl::exception& e) {
    cout.flush();
    cerr << "Error: " << e << endl;
    } catch (...) {
    cout.flush();
    cerr << "Unexpected error." << endl;
    }
    cout << endl;
    cout.flush(); // if there is anything left to print then print it now
    return (rv);
}
#endif
 
 
#define StdBvtMain(function) int main(int argc, char *argv[])                    \
{                                                                                \
    CYG_TEST_INIT();                                                             \
    CYG_TEST_INFO("Starting tests from uSTL testcase " #function);               \
    StdTestHarness(&function);                                                   \
    CYG_TEST_PASS_FINISH(#function " finished successfully");                    \
    return EXIT_SUCCESS;                                                         \
}
#else
#define StdBvtMain(function) int main(int argc, char *argv[])                    \
{                                                                                \
    CYG_TEST_INIT();                                                             \
    CYG_TEST_NA("cin, cout & cerr support disabled");                            \
}
#endif
 
//---------------------------------------------------------------------------
#endif // CYGONCE_STDTEST_H
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.