Home | History | Annotate | Download | only in intltest
      1 // Copyright (C) 2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /********************************************************************
      4  * COPYRIGHT:
      5  * Copyright (c) 1997-2009, International Business Machines Corporation and
      6  * others. All Rights Reserved.
      7  ********************************************************************/
      8 
      9 #include "unicode/utypes.h"
     10 
     11 #if !UCONFIG_NO_COLLATION
     12 
     13 #include "decoll.h"
     14 
     15 #ifndef _COLL
     16 #include "unicode/coll.h"
     17 #endif
     18 
     19 #ifndef _TBLCOLL
     20 #include "unicode/tblcoll.h"
     21 #endif
     22 
     23 #ifndef _UNISTR
     24 #include "unicode/unistr.h"
     25 #endif
     26 
     27 #ifndef _SORTKEY
     28 #include "unicode/sortkey.h"
     29 #endif
     30 
     31 #ifndef _DECOLL
     32 #include "decoll.h"
     33 #endif
     34 
     35 #include "sfwdchit.h"
     36 
     37 CollationGermanTest::CollationGermanTest()
     38 : myCollation(0)
     39 {
     40     UErrorCode status = U_ZERO_ERROR;
     41     myCollation = Collator::createInstance(Locale::getGermany(), status);
     42     if(!myCollation || U_FAILURE(status)) {
     43         errcheckln(status, __FILE__ "failed to create! err " + UnicodeString(u_errorName(status)));
     44         /* if it wasn't already: */
     45         delete myCollation;
     46         myCollation = NULL;
     47     }
     48 }
     49 
     50 CollationGermanTest::~CollationGermanTest()
     51 {
     52     delete myCollation;
     53 }
     54 
     55 const UChar CollationGermanTest::testSourceCases[][CollationGermanTest::MAX_TOKEN_LEN] =
     56 {
     57     {0x47, 0x72, 0x00F6, 0x00DF, 0x65, 0},
     58     {0x61, 0x62, 0x63, 0},
     59     {0x54, 0x00F6, 0x6e, 0x65, 0},
     60     {0x54, 0x00F6, 0x6e, 0x65, 0},
     61     {0x54, 0x00F6, 0x6e, 0x65, 0},
     62     {0x61, 0x0308, 0x62, 0x63, 0},
     63     {0x00E4, 0x62, 0x63, 0},
     64     {0x00E4, 0x62, 0x63, 0},
     65     {0x53, 0x74, 0x72, 0x61, 0x00DF, 0x65, 0},
     66     {0x65, 0x66, 0x67, 0},
     67     {0x00E4, 0x62, 0x63, 0},
     68     {0x53, 0x74, 0x72, 0x61, 0x00DF, 0x65, 0}
     69 };
     70 
     71 const UChar CollationGermanTest::testTargetCases[][CollationGermanTest::MAX_TOKEN_LEN] =
     72 {
     73     {0x47, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x73, 0x74, 0},
     74     {0x61, 0x0308, 0x62, 0x63, 0},
     75     {0x54, 0x6f, 0x6e, 0},
     76     {0x54, 0x6f, 0x64, 0},
     77     {0x54, 0x6f, 0x66, 0x75, 0},
     78     {0x41, 0x0308, 0x62, 0x63, 0},
     79     {0x61, 0x0308, 0x62, 0x63, 0},
     80     {0x61, 0x65, 0x62, 0x63, 0},
     81     {0x53, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0},
     82     {0x65, 0x66, 0x67, 0},
     83     {0x61, 0x65, 0x62, 0x63, 0},
     84     {0x53, 0x74, 0x72, 0x61, 0x73, 0x73, 0x65, 0}
     85 };
     86 
     87 const Collator::EComparisonResult CollationGermanTest::results[][2] =
     88 {
     89       //  Primary                Tertiary
     90         { Collator::LESS,        Collator::LESS },
     91         { Collator::EQUAL,        Collator::LESS },
     92         { Collator::GREATER,    Collator::GREATER },
     93         { Collator::GREATER,    Collator::GREATER },
     94         { Collator::GREATER,    Collator::GREATER },
     95         { Collator::EQUAL,        Collator::LESS },
     96         { Collator::EQUAL,        Collator::EQUAL },
     97         { Collator::LESS,        Collator::LESS },
     98         { Collator::EQUAL,        Collator::GREATER },
     99         { Collator::EQUAL,        Collator::EQUAL },
    100         { Collator::LESS,        Collator::LESS },
    101         { Collator::EQUAL,        Collator::GREATER }
    102 };
    103 
    104 
    105 void CollationGermanTest::TestTertiary(/* char* par */)
    106 {
    107     if(myCollation == NULL ) {
    108         dataerrln("decoll: cannot start test, collator is null\n");
    109         return;
    110     }
    111 
    112     int32_t i = 0;
    113     UErrorCode status = U_ZERO_ERROR;
    114     myCollation->setStrength(Collator::TERTIARY);
    115     myCollation->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
    116     for (i = 0; i < 12 ; i++)
    117     {
    118         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i][1]);
    119     }
    120 }
    121 void CollationGermanTest::TestPrimary(/* char* par */)
    122 {
    123     if(myCollation == NULL ) {
    124         dataerrln("decoll: cannot start test, collator is null\n");
    125         return;
    126     }
    127     int32_t i;
    128     UErrorCode status = U_ZERO_ERROR;
    129     myCollation->setStrength(Collator::PRIMARY);
    130     myCollation->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
    131     for (i = 0; i < 12 ; i++)
    132     {
    133         doTest(myCollation, testSourceCases[i], testTargetCases[i], results[i][0]);
    134     }
    135 }
    136 
    137 void CollationGermanTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
    138 {
    139     if (exec) logln("TestSuite CollationGermanTest: ");
    140     switch (index)
    141     {
    142         case 0: name = "TestPrimary";   if (exec)   TestPrimary(/* par */); break;
    143         case 1: name = "TestTertiary";  if (exec)   TestTertiary(/* par */); break;
    144         default: name = ""; break;
    145     }
    146 }
    147 
    148 #endif /* #if !UCONFIG_NO_COLLATION */
    149