// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
******************************************************************************
* Copyright (C) 2004, International Business Machines Corporation and        *
* others. All Rights Reserved.                                               *
******************************************************************************
*/

//  file:  uvectest.h


#ifndef UVECTEST_H
#define UVECTEST_H

#include "unicode/utypes.h"

#include "intltest.h"


class UVectorTest: public IntlTest {
public:
  
    UVectorTest();
    virtual ~UVectorTest();

    virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );

    // The following are test functions that are visible from the intltest test framework.
    void UVector_API();
    void UStack_API();
    void Hashtable_API();

};

#endif
