/********************************************************************
 * COPYRIGHT: 
 * Copyright (c) 1997-2001, International Business Machines Corporation and
 * others. All Rights Reserved.
 ********************************************************************/

/**
 * CollationISOTest is a third level test class.  This tests the ISO 14651
 * test entries with the French locale.
 */

#ifndef _ISOCOLL
#define _ISOCOLL

#ifndef _UTYPES
#include "unicode/utypes.h"
#endif

#ifndef _COLL
#include "unicode/coll.h"
#endif

#ifndef _TBLCOLL
#include "unicode/tblcoll.h"
#endif

#ifndef _INTLTEST
#include "intltest.h"
#endif

class CollationISOTest: public IntlTest {
public:
    // static constants
    enum EToken_Len { MAX_TOKEN_LEN = 5 };

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

    // test proper comparing for 3774 entries of ISO 14651 characters
    void TestAll(/* char* par */);

private:
    void quickSort(CollationKey** keyArray, int *indexes, int lo0, int hi0);

    static const UChar testCases[][MAX_TOKEN_LEN];

    Collator *myCollation;
};
#endif
