17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2002-2014, International Business Machines Corporation and
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Port From:   ICU4C v2.1 : Collate/CollationFrenchTest
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Source File: $ICU4CRoot/source/test/intltest/frcoll.cpp
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.collator;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CollationKey;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.Collator;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.RuleBasedCollator;
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class CollationFrenchTest extends TestFmwk{
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String[] args) throws Exception {
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new CollationFrenchTest().run(args);
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static char[][] testSourceCases = {
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0061/*'a'*/, 0x0062/*'b'*/, 0x0063/*'c'*/},
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0043/*'C'*/, 0x004f/*'O'*/, 0x0054/*'T'*/, 0x0045/*'E'*/},
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0063/*'c'*/, 0x006f/*'o'*/, 0x002d/*'-'*/, 0x006f/*'o'*/, 0x0070/*'p'*/},
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/, 0x00EA, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x0065/*'e'*/},
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/, 0x00EA, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x0065/*'e'*/, 0x0072/*'r'*/},
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/, 0x00E9, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x0065/*'e'*/, 0x0072/*'r'*/},
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/, 0x00E9, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x0065/*'e'*/, 0x0072/*'r'*/},
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0048/*'H'*/, 0x0065/*'e'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x006f/*'o'*/},
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x01f1},
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0xfb00},
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x01fa},
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0101}
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static char[][] testTargetCases = {
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0041/*'A'*/, 0x0042/*'B'*/, 0x0043/*'C'*/},
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0063/*'c'*/, 0x00f4, 0x0074/*'t'*/, 0x0065/*'e'*/},
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0043/*'C'*/, 0x004f/*'O'*/, 0x004f/*'O'*/, 0x0050/*'P'*/},
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/, 0x00E9, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x00E9},
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/,  0x00E9, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x00E9},
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/, 0x00EA, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x0065/*'e'*/},
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0070/*'p'*/, 0x00EA, 0x0063/*'c'*/, 0x0068/*'h'*/, 0x0065/*'e'*/, 0x0072/*'r'*/},
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0068/*'h'*/, 0x0065/*'e'*/, 0x006c/*'l'*/, 0x006c/*'l'*/, 0x004f/*'O'*/},
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x01ee},
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x25ca},
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00e0},
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x01df}
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static int[] results = {
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1, /*Collator::GREATER,*/
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        1,
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        1,
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        1,
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert       -1, /*Collator::GREATER,*/
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        1,
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1,
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        -1
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // 0x0300 is grave, 0x0301 is acute
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // the order of elements in this array must be different than the order in CollationEnglishTest
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static char[][] testAcute = {
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*00*/    {0x0065/*'e'*/, 0x0065/*'e'*/},
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*01*/    {0x0065/*'e'*/, 0x0301, 0x0065/*'e'*/},
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*02*/    {0x0065/*'e'*/, 0x0300, 0x0301, 0x0065/*'e'*/},
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*03*/    {0x0065/*'e'*/, 0x0300, 0x0065/*'e'*/},
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*04*/    {0x0065/*'e'*/, 0x0301, 0x0300, 0x0065/*'e'*/},
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*05*/    {0x0065/*'e'*/, 0x0065/*'e'*/, 0x0301},
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*06*/    {0x0065/*'e'*/, 0x0301, 0x0065/*'e'*/, 0x0301},
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*07*/    {0x0065/*'e'*/, 0x0300, 0x0301, 0x0065/*'e'*/, 0x0301},
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*08*/    {0x0065/*'e'*/, 0x0300, 0x0065/*'e'*/, 0x0301},
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*09*/    {0x0065/*'e'*/, 0x0301, 0x0300, 0x0065/*'e'*/, 0x0301},
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*0a*/    {0x0065/*'e'*/, 0x0065/*'e'*/, 0x0300, 0x0301},
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*0b*/    {0x0065/*'e'*/, 0x0301, 0x0065/*'e'*/, 0x0300, 0x0301},
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*0c*/    {0x0065/*'e'*/, 0x0300, 0x0301, 0x0065/*'e'*/, 0x0300, 0x0301},
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*0d*/    {0x0065/*'e'*/, 0x0300, 0x0065/*'e'*/, 0x0300, 0x0301},
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*0e*/    {0x0065/*'e'*/, 0x0301, 0x0300, 0x0065/*'e'*/, 0x0300, 0x0301},
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*0f*/    {0x0065/*'e'*/, 0x0065/*'e'*/, 0x0300},
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*10*/    {0x0065/*'e'*/, 0x0301, 0x0065/*'e'*/, 0x0300},
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*11*/    {0x0065/*'e'*/, 0x0300, 0x0301, 0x0065/*'e'*/, 0x0300},
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*12*/    {0x0065/*'e'*/, 0x0300, 0x0065/*'e'*/, 0x0300},
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*13*/    {0x0065/*'e'*/, 0x0301, 0x0300, 0x0065/*'e'*/, 0x0300},
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*14*/    {0x0065/*'e'*/, 0x0065/*'e'*/, 0x0301, 0x0300},
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*15*/    {0x0065/*'e'*/, 0x0301, 0x0065/*'e'*/, 0x0301, 0x0300},
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*16*/    {0x0065/*'e'*/, 0x0300, 0x0301, 0x0065/*'e'*/, 0x0301, 0x0300},
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*17*/    {0x0065/*'e'*/, 0x0300, 0x0065/*'e'*/, 0x0301, 0x0300},
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*18*/    {0x0065/*'e'*/, 0x0301, 0x0300, 0x0065/*'e'*/, 0x0301, 0x0300}
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static char[][] testBugs = {
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0061/*'a'*/},
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0041/*'A'*/},
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0065/*'e'*/},
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0045/*'E'*/},
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00e9},
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00e8},
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00ea},
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x00eb},
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0065/*'e'*/, 0x0061/*'a'*/},
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {0x0078/*'x'*/}
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private Collator myCollation = null;
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public CollationFrenchTest() {
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected void init()throws Exception{
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        myCollation = Collator.getInstance(Locale.CANADA_FRENCH);
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // perform tests with strength TERTIARY
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestTertiary() {
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int i = 0;
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        myCollation.setStrength(Collator.TERTIARY);
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (i = 0; i < 12 ; i++) {
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            doTest(testSourceCases[i], testTargetCases[i], results[i]);
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // perform tests with strength SECONDARY
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestSecondary() {
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //test acute and grave ordering
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int i = 0;
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int j;
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int expected;
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        myCollation.setStrength(Collator.SECONDARY);
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (i = 0; i < testAcute.length; i++) {
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (j = 0; j < testAcute.length; j++) {
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (i <  j) {
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    expected = -1;
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else if (i == j) {
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    expected = 0;
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else {
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    expected = 1;
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                doTest(testAcute[i], testAcute[j], expected );
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // perform extra tests
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestExtra() {
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int i, j;
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        myCollation.setStrength(Collator.TERTIARY);
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (i = 0; i < 9 ; i++) {
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (j = i + 1; j < 10; j += 1) {
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                doTest(testBugs[i], testBugs[j], -1);
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestContinuationReordering()
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    {
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String rule = "&0x2f00 << 0x2f01";
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            RuleBasedCollator collator = new RuleBasedCollator(rule);
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            collator.setFrenchCollation(true);
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            CollationKey key1
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        = collator.getCollationKey("a\u0325\u2f00\u2f01b\u0325");
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            CollationKey key2
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        = collator.getCollationKey("a\u0325\u2f01\u2f01b\u0325");
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (key1.compareTo(key2) >= 0) {
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("Error comparing continuation strings");
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (Exception e) {
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln(e.toString());
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // main test routine, test rules specific to the french locale
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void doTest(char[] source, char[] target, int result) {
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String s = new String(source);
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String t = new String(target);
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int compareResult = myCollation.compare(s, t);
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        CollationKey sortKey1, sortKey2;
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        sortKey1 = myCollation.getCollationKey(s);
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        sortKey2 = myCollation.getCollationKey(t);
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int keyResult = sortKey1.compareTo(sortKey2);
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        reportCResult(s, t, sortKey1, sortKey2, compareResult, keyResult, compareResult, result);
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void reportCResult( String source, String target, CollationKey sourceKey, CollationKey targetKey,
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                int compareResult, int keyResult, int incResult, int expectedResult ) {
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (expectedResult < -1 || expectedResult > 1) {
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("***** invalid call to reportCResult ****");
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return;
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean ok1 = (compareResult == expectedResult);
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean ok2 = (keyResult == expectedResult);
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean ok3 = (incResult == expectedResult);
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (ok1 && ok2 && ok3 && !isVerbose()) {
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return;
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg1 = ok1? "Ok: compare(\"" : "FAIL: compare(\"";
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg2 = "\", \"";
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg3 = "\") returned ";
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String msg4 = "; expected ";
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String sExpect = new String("");
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            String sResult = new String("");
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sResult = CollationTest.appendCompareResult(compareResult, sResult);
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sExpect = CollationTest.appendCompareResult(expectedResult, sExpect);
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (ok1) {
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(msg1 + source + msg2 + target + msg3 + sResult);
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg1 = ok2 ? "Ok: key(\"" : "FAIL: key(\"";
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg2 = "\").compareTo(key(\"";
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg3 = "\")) returned ";
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sResult = CollationTest.appendCompareResult(keyResult, sResult);
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (ok2) {
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(msg1 + source + msg2 + target + msg3 + sResult);
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                msg1 = "  ";
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                msg2 = " vs. ";
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + CollationTest.prettify(sourceKey) + msg2 + CollationTest.prettify(targetKey));
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg1 = ok3 ? "Ok: incCompare(\"" : "FAIL: incCompare(\"";
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg2 = "\", \"";
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            msg3 = "\") returned ";
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            sResult = CollationTest.appendCompareResult(incResult, sResult);
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (ok3) {
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln(msg1 + source + msg2 + target + msg3 + sResult);
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln(msg1 + source + msg2 + target + msg3 + sResult + msg4 + sExpect);
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
255