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

//  file:  v32test.h


#ifndef V32TEST_H
#define V32TEST_H

#include "unicode/utypes.h"

#include "intltest.h"


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

    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.
    virtual void UVector32_API();

};

#endif
