|  | // © 2016 and later: Unicode, Inc. and others. | 
|  | // License & terms of use: http://www.unicode.org/copyright.html | 
|  | /******************************************************************** | 
|  | * COPYRIGHT: | 
|  | * Copyright (c) 1997-2009, International Business Machines Corporation and | 
|  | * others. All Rights Reserved. | 
|  | ********************************************************************/ | 
|  |  | 
|  | #include "unicode/utypes.h" | 
|  |  | 
|  | #if !UCONFIG_NO_COLLATION | 
|  |  | 
|  | #include "decoll.h" | 
|  |  | 
|  | #ifndef _COLL | 
|  | #include "unicode/coll.h" | 
|  | #endif | 
|  |  | 
|  | #ifndef _TBLCOLL | 
|  | #include "unicode/tblcoll.h" | 
|  | #endif | 
|  |  | 
|  | #ifndef _UNISTR | 
|  | #include "unicode/unistr.h" | 
|  | #endif | 
|  |  | 
|  | #ifndef _SORTKEY | 
|  | #include "unicode/sortkey.h" | 
|  | #endif | 
|  |  | 
|  | #ifndef _DECOLL | 
|  | #include "decoll.h" | 
|  | #endif | 
|  |  | 
|  | #include "sfwdchit.h" | 
|  |  | 
|  | CollationGermanTest::CollationGermanTest() | 
|  | : myCollation(0) | 
|  | { | 
|  | UErrorCode status = U_ZERO_ERROR; | 
|  | myCollation = Collator::createInstance(Locale::getGermany(), status); | 
|  | if(!myCollation || U_FAILURE(status)) { | 
|  | errcheckln(status, __FILE__ "failed to create! err " + UnicodeString(u_errorName(status))); | 
|  | /* if it wasn't already: */ | 
|  | delete myCollation; | 
|  | myCollation = NULL; | 
|  | } | 
|  | } | 
|  |  | 
|  | CollationGermanTest::~CollationGermanTest() | 
|  | { | 
|  | delete myCollation; | 
|  | } | 
|  |  | 
|  | const UChar CollationGermanTest::testSourceCases[][CollationGermanTest::MAX_TOKEN_LEN] = | 
|  | { | 
|  | {0x47, 0x72, 0x00F6, 0x00DF, 0x65, 0}, | 
|  | {0x61, 0x62, 0x63, 0}, | 
|  | {0x54, 0x00F6, 0x6e, 0x65, 0}, | 
|  | {0x54, 0x00F6, 0x6e, 0x65, 0}, | 
|  | {0x54, 0x00F6, 0x6e, 0x65, 0}, | 
|  | {0x61, 0x0308, 0x62, 0x63, 0}, | 
|  | {0x00E4, 0x62, 0x63, 0}, | 
|  | {0x00E4, 0x62, 0x63, 0}, | 
|  | {0x53, 0x74, 0x72, 0x61, 0x00DF, 0x65, 0}, | 
|  | {0x65, 0x66, 0x67, 0}, | 
|  | {0x00E4, 0x62, 0x63, 0}, | 
|  | {0x53, 0x74, 0x72, 0x61, 0x00DF, 0x65, 0} | 
|  | }; | 
|  |  | 
|  | const UChar CollationGermanTest::testTargetCases[][CollationGermanTest::MAX_TOKEN_LEN] = | 
|  | { | 
|  | {0x47, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x73, 0x74, 0}, | 
|  | {0x61, 0x0308, 0x62, 0x63, 0}, | 
|  | {0x54, 0x6f, 0x6e, 0}, | 
|  | {0x54, 0x6f, 0x64, 0}, | 
|  | {0x54, 0x6f, 0x66, 0x75, 0}, | 
|  | {0x41, 0x0308, 0x62, 0x63, 0}, | 
|  | {0x61, 0x0308, 0x62, 0x63, 0}, | 
|  | {0x61, 0x65, 0x62, 0x63, 0}, | 
|  | {0x53, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0}, | 
|  | {0x65, 0x66, 0x67, 0}, | 
|  | {0x61, 0x65, 0x62, 0x63, 0}, | 
|  | {0x53, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0} | 
|  | }; | 
|  |  | 
|  | const Collator::EComparisonResult CollationGermanTest::results[][2] = | 
|  | { | 
|  | //  Primary                Tertiary | 
|  | { Collator::LESS,        Collator::LESS }, | 
|  | { Collator::EQUAL,        Collator::LESS }, | 
|  | { Collator::GREATER,    Collator::GREATER }, | 
|  | { Collator::GREATER,    Collator::GREATER }, | 
|  | { Collator::GREATER,    Collator::GREATER }, | 
|  | { Collator::EQUAL,        Collator::LESS }, | 
|  | { Collator::EQUAL,        Collator::EQUAL }, | 
|  | { Collator::LESS,        Collator::LESS }, | 
|  | { Collator::EQUAL,        Collator::GREATER }, | 
|  | { Collator::EQUAL,        Collator::EQUAL }, | 
|  | { Collator::LESS,        Collator::LESS }, | 
|  | { Collator::EQUAL,        Collator::GREATER } | 
|  | }; | 
|  |  | 
|  |  | 
|  | void CollationGermanTest::TestTertiary(/* char* par */) | 
|  | { | 
|  | if(myCollation == NULL ) { | 
|  | dataerrln("decoll: cannot start test, collator is null\n"); | 
|  | return; | 
|  | } | 
|  |  | 
|  | int32_t i = 0; | 
|  | UErrorCode status = U_ZERO_ERROR; | 
|  | myCollation->setStrength(Collator::TERTIARY); | 
|  | myCollation->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); | 
|  | for (i = 0; i < 12 ; i++) | 
|  | { | 
|  | doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i][1]); | 
|  | } | 
|  | } | 
|  | void CollationGermanTest::TestPrimary(/* char* par */) | 
|  | { | 
|  | if(myCollation == NULL ) { | 
|  | dataerrln("decoll: cannot start test, collator is null\n"); | 
|  | return; | 
|  | } | 
|  | int32_t i; | 
|  | UErrorCode status = U_ZERO_ERROR; | 
|  | myCollation->setStrength(Collator::PRIMARY); | 
|  | myCollation->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); | 
|  | for (i = 0; i < 12 ; i++) | 
|  | { | 
|  | doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i][0]); | 
|  | } | 
|  | } | 
|  |  | 
|  | void CollationGermanTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) | 
|  | { | 
|  | if (exec) logln("TestSuite CollationGermanTest: "); | 
|  | switch (index) | 
|  | { | 
|  | case 0: name = "TestPrimary";   if (exec)   TestPrimary(/* par */); break; | 
|  | case 1: name = "TestTertiary";  if (exec)   TestTertiary(/* par */); break; | 
|  | default: name = ""; break; | 
|  | } | 
|  | } | 
|  |  | 
|  | #endif /* #if !UCONFIG_NO_COLLATION */ |