//
//********************************************************************
//   Copyright (C) 2002-2011, International Business Machines
//   Corporation and others.  All Rights Reserved.
//********************************************************************
//
// File threadtest.h
//
#ifndef ABSTRACTTHREADTEST_H
#define ABSTRACTTHREADTEST_H
//------------------------------------------------------------------------------
//
//   class AbstractThreadTest    Base class for threading tests.
//                         Use of this abstract base isolates the part of the
//                         program that nows how to spin up and control threads
//                         from the specific stuff being tested, and (hopefully)
//                         simplifies adding new threading tests for different parts
//                         of ICU.
//
//     Derived classes:    A running test will have exactly one instance of a
//                         derived class, which will persist for the duration of the
//                         test and be shared among all of the threads involved in
//                         the test.
//
//                         The constructor will be called in a single-threaded environment,
//                         and should set up any data that will need to persist for the
//                         duration.
//
//                         runOnce() will be called repeatedly by the working threads of
//                         the test in the full multi-threaded environment.
//
//                         check() will be called periodically in a single threaded
//                         environment, with the worker threads temporarily suspended between
//                         between calls to runOnce().  Do consistency checks here.
//
//------------------------------------------------------------------------------
class AbstractThreadTest {
public:
                     AbstractThreadTest() {};
    virtual         ~AbstractThreadTest();
    virtual void     check()   = 0;
    virtual void     runOnce() = 0;
};

#endif // ABSTRACTTHREADTEST_H
