예제 #1
0
        private bool CheckMaps(Bidi bidi, int stringIndex, String src,
                               String dest, String mode, String option, sbyte level, bool forward)
        {
            int[] actualLogicalMap;
            int[] actualVisualMap;
            int[] getIndexMap;
            int   i, srcLen, resLen, index;

            int[] expectedLogicalMap, expectedVisualMap;
            bool  testOK = true;

            if (forward)
            {
                expectedLogicalMap = forwardMap[stringIndex];
                expectedVisualMap  = inverseMap[stringIndex];
            }
            else
            {
                expectedLogicalMap = inverseMap[stringIndex];
                expectedVisualMap  = forwardMap[stringIndex];
            }
            actualLogicalMap = bidi.GetLogicalMap();
            srcLen           = bidi.GetProcessedLength();
            if (!ILOG.J2CsMapping.Collections.Arrays.Equals(expectedLogicalMap, actualLogicalMap))
            {
                Err("Bidi.getLogicalMap returned unexpected map for output "
                    + "string index "
                    + stringIndex
                    + "\n"
                    + "source: "
                    + src
                    + "\n"
                    + "dest  : "
                    + dest
                    + "\n"
                    + "Scale : "
                    + IBM.ICU.Charset.BidiTest.columnString
                    + "\n"
                    + "ExpMap: "
                    + FormatMap(expectedLogicalMap)
                    + "\n"
                    + "Actual: "
                    + FormatMap(actualLogicalMap)
                    + "\n"
                    + "Paragraph level  : "
                    + level
                    + " == "
                    + bidi.GetParaLevel()
                    + "\n"
                    + "Reordering mode  : "
                    + mode
                    + " == "
                    + bidi.GetReorderingMode()
                    + "\n"
                    + "Reordering option: "
                    + option
                    + " == "
                    + bidi.GetReorderingOptions()
                    + "\n"
                    + "Forward flag     : " + forward + "\n");
                testOK = false;
            }
            resLen          = bidi.GetResultLength();
            actualVisualMap = bidi.GetVisualMap();
            if (!ILOG.J2CsMapping.Collections.Arrays.Equals(expectedVisualMap, actualVisualMap))
            {
                Err("Bidi.getVisualMap returned unexpected map for output "
                    + "string index "
                    + stringIndex
                    + "\n"
                    + "source: "
                    + src
                    + "\n"
                    + "dest  : "
                    + dest
                    + "\n"
                    + "Scale : "
                    + IBM.ICU.Charset.BidiTest.columnString
                    + "\n"
                    + "ExpMap: "
                    + FormatMap(expectedVisualMap)
                    + "\n"
                    + "Actual: "
                    + FormatMap(actualVisualMap)
                    + "\n"
                    + "Paragraph level  : "
                    + level
                    + " == "
                    + bidi.GetParaLevel()
                    + "\n"
                    + "Reordering mode  : "
                    + mode
                    + " == "
                    + bidi.GetReorderingMode()
                    + "\n"
                    + "Reordering option: "
                    + option
                    + " == "
                    + bidi.GetReorderingOptions()
                    + "\n"
                    + "Forward flag     : " + forward + "\n");
                testOK = false;
            }
            getIndexMap = new int[srcLen];
            for (i = 0; i < srcLen; i++)
            {
                index          = bidi.GetVisualIndex(i);
                getIndexMap[i] = index;
            }
            if (!ILOG.J2CsMapping.Collections.Arrays.Equals(actualLogicalMap, getIndexMap))
            {
                Err("Mismatch between getLogicalMap and getVisualIndex for output "
                    + "string index "
                    + stringIndex
                    + "\n"
                    + "source: "
                    + src
                    + "\n"
                    + "dest  : "
                    + dest
                    + "\n"
                    + "Scale : "
                    + IBM.ICU.Charset.BidiTest.columnString
                    + "\n"
                    + "ActMap: "
                    + FormatMap(actualLogicalMap)
                    + "\n"
                    + "IdxMap: "
                    + FormatMap(getIndexMap)
                    + "\n"
                    + "Paragraph level  : "
                    + level
                    + " == "
                    + bidi.GetParaLevel()
                    + "\n"
                    + "Reordering mode  : "
                    + mode
                    + " == "
                    + bidi.GetReorderingMode()
                    + "\n"
                    + "Reordering option: "
                    + option
                    + " == "
                    + bidi.GetReorderingOptions()
                    + "\n"
                    + "Forward flag     : " + forward + "\n");
                testOK = false;
            }
            getIndexMap = new int[resLen];
            for (i = 0; i < resLen; i++)
            {
                index          = bidi.GetLogicalIndex(i);
                getIndexMap[i] = index;
            }
            if (!ILOG.J2CsMapping.Collections.Arrays.Equals(actualVisualMap, getIndexMap))
            {
                Err("Mismatch between getVisualMap and getLogicalIndex for output "
                    + "string index "
                    + stringIndex
                    + "\n"
                    + "source: "
                    + src
                    + "\n"
                    + "dest  : "
                    + dest
                    + "\n"
                    + "Scale : "
                    + IBM.ICU.Charset.BidiTest.columnString
                    + "\n"
                    + "ActMap: "
                    + FormatMap(actualVisualMap)
                    + "\n"
                    + "IdxMap: "
                    + FormatMap(getIndexMap)
                    + "\n"
                    + "Paragraph level  : "
                    + level
                    + " == "
                    + bidi.GetParaLevel()
                    + "\n"
                    + "Reordering mode  : "
                    + mode
                    + " == "
                    + bidi.GetReorderingMode()
                    + "\n"
                    + "Reordering option: "
                    + option
                    + " == "
                    + bidi.GetReorderingOptions()
                    + "\n"
                    + "Forward flag     : " + forward + "\n");
                testOK = false;
            }
            return(testOK);
        }
예제 #2
0
        private void _testReordering(Bidi bidi, int testNumber)
        {
            int[]   logicalMap1;
            int[]   logicalMap2;
            int[]   logicalMap3;
            int[]   visualMap1;
            int[]   visualMap2;
            int[]   visualMap3;
            int[]   visualMap4 = new int[MAXLEN];
            sbyte[] levels;
            int     i, length = bidi.GetLength(), destLength = bidi.GetResultLength();
            int     runCount, visualIndex, logicalIndex = -1, logicalStart, runLength;
            bool    odd;

            if (length <= 0)
            {
                return;
            }
            /* get the logical and visual maps from the object */
            logicalMap1 = bidi.GetLogicalMap();
            if (logicalMap1 == null)
            {
                Errln("getLogicalMap in test " + testNumber + " is null");
                logicalMap1 = new int[0];
            }

            visualMap1 = bidi.GetVisualMap();

            if (visualMap1 == null)
            {
                Errln("getVisualMap() in test " + testNumber + " is null");
                visualMap1 = new int[0];
            }

            /* invert them both */
            visualMap2  = IBM.ICU.Text.Bidi.InvertMap(logicalMap1);
            logicalMap2 = IBM.ICU.Text.Bidi.InvertMap(visualMap1);

            /* get them from the levels array, too */
            levels = bidi.GetLevels();

            if (levels == null || levels.Length != length)
            {
                Errln("getLevels() in test " + testNumber + " failed");
            }

            logicalMap3 = IBM.ICU.Text.Bidi.ReorderLogical(levels);
            visualMap3  = IBM.ICU.Text.Bidi.ReorderVisual(levels);

            /* get the visual map from the runs, too */
            try {
                runCount = bidi.CountRuns();
            } catch (InvalidOperationException e) {
                Errln("countRuns() in test " + testNumber + " failed");
                runCount = 0;
            }

            Logln("\n---- " + runCount + " runs");
            visualIndex = 0;
            BidiRun run;

            for (i = 0; i < runCount; ++i)
            {
                run = bidi.GetVisualRun(i);
                if (run == null)
                {
                    Errln("null visual run encountered at index " + i
                          + ", in test " + testNumber);
                    continue;
                }
                odd          = run.IsOddRun();
                logicalStart = run.GetStart();
                runLength    = run.GetLength();
                Log("(" + ((run.IsOddRun()) ? "R" : "L"));
                Log(" @" + run.GetStart() + '[' + run.GetLength() + "])\n");
                if (!odd)
                {
                    do       /* LTR */
                    {
                        visualMap4[visualIndex++] = logicalStart++;
                    } while (--runLength > 0);
                }
                else
                {
                    logicalStart += runLength; /* logicalLimit */
                    do                         /* RTL */
                    {
                        visualMap4[visualIndex++] = --logicalStart;
                    } while (--runLength > 0);
                }
            }
            Log("\n");

            /* print all the maps */
            Logln("logical maps:");
            for (i = 0; i < length; ++i)
            {
                Log(logicalMap1[i] + " ");
            }
            Log("\n");
            for (i = 0; i < length; ++i)
            {
                Log(logicalMap2[i] + " ");
            }
            Log("\n");
            for (i = 0; i < length; ++i)
            {
                Log(logicalMap3[i] + " ");
            }

            Log("\nvisual maps:\n");
            for (i = 0; i < destLength; ++i)
            {
                Log(visualMap1[i] + " ");
            }
            Log("\n");
            for (i = 0; i < destLength; ++i)
            {
                Log(visualMap2[i] + " ");
            }
            Log("\n");
            for (i = 0; i < length; ++i)
            {
                Log(visualMap3[i] + " ");
            }
            Log("\n");
            for (i = 0; i < length; ++i)
            {
                Log(visualMap4[i] + " ");
            }
            Log("\n");

            /*
             * check that the indexes are the same between these and
             * Bidi.getLogical/VisualIndex()
             */
            for (i = 0; i < length; ++i)
            {
                if (logicalMap1[i] != logicalMap2[i])
                {
                    Errln("Error in tests[" + testNumber + "]: (logicalMap1[" + i
                          + "] == " + logicalMap1[i] + ") != (logicalMap2[" + i
                          + "] == " + logicalMap2[i] + ")");
                }
                if (logicalMap1[i] != logicalMap3[i])
                {
                    Errln("Error in tests[" + testNumber + "]: (logicalMap1[" + i
                          + "] == " + logicalMap1[i] + ") != (logicalMap3[" + i
                          + "] == " + logicalMap3[i] + ")");
                }
                if (visualMap1[i] != visualMap2[i])
                {
                    Errln("Error in tests[" + testNumber + "]: (visualMap1[" + i
                          + "] == " + visualMap1[i] + ") != (visualMap2[" + i
                          + "] == " + visualMap2[i] + ")");
                }
                if (visualMap1[i] != visualMap3[i])
                {
                    Errln("Error in tests[" + testNumber + "]: (visualMap1[" + i
                          + "] == " + visualMap1[i] + ") != (visualMap3[" + i
                          + "] == " + visualMap3[i] + ")");
                }
                if (visualMap1[i] != visualMap4[i])
                {
                    Errln("Error in tests[" + testNumber + "]: (visualMap1[" + i
                          + "] == " + visualMap1[i] + ") != (visualMap4[" + i
                          + "] == " + visualMap4[i] + ")");
                }
                try {
                    visualIndex = bidi.GetVisualIndex(i);
                } catch (Exception e_0) {
                    Errln("Bidi.getVisualIndex(" + i + ") failed in tests["
                          + testNumber + "]");
                }
                if (logicalMap1[i] != visualIndex)
                {
                    Errln("Error in tests[" + testNumber + "]: (logicalMap1[" + i
                          + "] == " + logicalMap1[i]
                          + ") != (Bidi.getVisualIndex(" + i + ") == "
                          + visualIndex + ")");
                }
                try {
                    logicalIndex = bidi.GetLogicalIndex(i);
                } catch (Exception e_1) {
                    Errln("Bidi.getLogicalIndex(" + i + ") failed in tests["
                          + testNumber + "]");
                }
                if (visualMap1[i] != logicalIndex)
                {
                    Errln("Error in tests[" + testNumber + "]: (visualMap1[" + i
                          + "] == " + visualMap1[i]
                          + ") != (Bidi.getLogicalIndex(" + i + ") == "
                          + logicalIndex + ")");
                }
            }
        }
예제 #3
0
        private void DoMisc()
        {
            /* Miscellaneous tests to exercize less popular code paths */
            Bidi bidi = new Bidi(120, 66), bidiLine;

            AssertEquals("\nwriteReverse should return an empty string", "",
                         IBM.ICU.Text.Bidi.WriteReverse("", 0));

            bidi.SetPara("", IBM.ICU.Text.Bidi.LTR, null);
            AssertEquals("\nwriteReordered should return an empty string", "",
                         bidi.WriteReordered(0));

            bidi.SetPara("abc", IBM.ICU.Text.Bidi.LTR, null);
            AssertEquals("\ngetRunStart should return 0", 0, bidi.GetRunStart(0));
            AssertEquals("\ngetRunLimit should return 3", 3, bidi.GetRunLimit(0));

            bidi.SetPara("abc          ", IBM.ICU.Text.Bidi.RTL, null);
            bidiLine = bidi.SetLine(0, 6);
            for (int i = 3; i < 6; i++)
            {
                AssertEquals("\nTrailing space at " + i
                             + " should get paragraph level", IBM.ICU.Text.Bidi.RTL,
                             bidiLine.GetLevelAt(i));
            }

            bidi.SetPara("abc       def", IBM.ICU.Text.Bidi.RTL, null);
            bidiLine = bidi.SetLine(0, 6);
            for (int i_0 = 3; i_0 < 6; i_0++)
            {
                AssertEquals("\nTrailing space at " + i_0
                             + " should get paragraph level", IBM.ICU.Text.Bidi.RTL,
                             bidiLine.GetLevelAt(i_0));
            }

            bidi.SetPara("abcdefghi    ", IBM.ICU.Text.Bidi.RTL, null);
            bidiLine = bidi.SetLine(0, 6);
            for (int i_1 = 3; i_1 < 6; i_1++)
            {
                AssertEquals("\nTrailing char at " + i_1 + " should get level 2", 2,
                             bidiLine.GetLevelAt(i_1));
            }

            bidi.SetReorderingOptions(IBM.ICU.Text.Bidi.OPTION_REMOVE_CONTROLS);
            bidi.SetPara("\u200eabc       def", IBM.ICU.Text.Bidi.RTL, null);
            bidiLine = bidi.SetLine(0, 6);
            AssertEquals("\nWrong result length", 5, bidiLine.GetResultLength());

            bidi.SetPara("abcdefghi", IBM.ICU.Text.Bidi.LTR, null);
            bidiLine = bidi.SetLine(0, 6);
            AssertEquals("\nWrong direction #1", IBM.ICU.Text.Bidi.LTR, bidiLine.GetDirection());

            bidi.SetPara("", IBM.ICU.Text.Bidi.LTR, null);
            sbyte[] levels = bidi.GetLevels();
            AssertEquals("\nWrong number of level elements", 0, levels.Length);
            AssertEquals("\nWrong number of runs #1", 0, bidi.CountRuns());

            bidi.SetPara("          ", IBM.ICU.Text.Bidi.RTL, null);
            bidiLine = bidi.SetLine(0, 6);
            AssertEquals("\nWrong number of runs #2", 1, bidiLine.CountRuns());

            bidi.SetPara("a\u05d0        bc", IBM.ICU.Text.Bidi.RTL, null);
            bidiLine = bidi.SetLine(0, 6);
            AssertEquals("\nWrong direction #2", IBM.ICU.Text.Bidi.MIXED, bidi.GetDirection());
            AssertEquals("\nWrong direction #3", IBM.ICU.Text.Bidi.MIXED,
                         bidiLine.GetDirection());
            AssertEquals("\nWrong number of runs #3", 2, bidiLine.CountRuns());

            int[] map = IBM.ICU.Text.Bidi.ReorderLogical(null);
            AssertTrue("\nWe should have got a null map #1", map == null);
            map = IBM.ICU.Text.Bidi.ReorderLogical(new sbyte[] { 0, 99, 99 });
            AssertTrue("\nWe should have got a null map #2", map == null);
            map = IBM.ICU.Text.Bidi.ReorderVisual(null);
            AssertTrue("\nWe should have got a null map #3", map == null);

            map = IBM.ICU.Text.Bidi.InvertMap(null);
            AssertTrue("\nWe should have got a null map #4", map == null);
            map = IBM.ICU.Text.Bidi.InvertMap(new int[] { 0, 1, -1, 5, 4 });
            AssertTrue("\nUnexpected inverted Map",
                       ILOG.J2CsMapping.Collections.Arrays.Equals(map, new int[] { 0, 1, -1, -1, 4, 3 }));

            bidi.SetPara("", IBM.ICU.Text.Bidi.LTR, null);
            map = bidi.GetLogicalMap();
            AssertTrue("\nMap should have length==0 #1", map.Length == 0);
            map = bidi.GetVisualMap();
            AssertTrue("\nMap should have length==0 #2", map.Length == 0);

            /* test BidiRun.toString and allocation of run memory > 1 */
            bidi.SetPara("abc", IBM.ICU.Text.Bidi.LTR, null);
            AssertEquals("\nWrong run display", "BidiRun 0 - 3 @ 0", bidi
                         .GetLogicalRun(0).ToString());

            /* test REMOVE_BIDI_CONTROLS together with DO_MIRRORING */
            bidi.SetPara("abc\u200e", IBM.ICU.Text.Bidi.LTR, null);
            String xout = bidi.WriteReordered(IBM.ICU.Text.Bidi.REMOVE_BIDI_CONTROLS
                                              | IBM.ICU.Text.Bidi.DO_MIRRORING);

            AssertEquals("\nWrong result #1", "abc", xout);

            /* test inverse Bidi with marks and contextual orientation */
            bidi.SetReorderingMode(IBM.ICU.Text.Bidi.REORDER_INVERSE_LIKE_DIRECT);
            bidi.SetReorderingOptions(IBM.ICU.Text.Bidi.OPTION_INSERT_MARKS);
            bidi.SetPara("", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #2", "", xout);
            bidi.SetPara("   ", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #3", "   ", xout);
            bidi.SetPara("abc", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #4", "abc", xout);
            bidi.SetPara("\u05d0\u05d1", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #5", "\u05d1\u05d0", xout);
            bidi.SetPara("abc \u05d0\u05d1", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #6", "\u05d1\u05d0 abc", xout);
            bidi.SetPara("\u05d0\u05d1 abc", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #7", "\u200fabc \u05d1\u05d0", xout);
            bidi.SetPara("\u05d0\u05d1 abc .-=", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #8", "\u200f=-. abc \u05d1\u05d0", xout);
            bidi.OrderParagraphsLTR(true);
            bidi.SetPara("\n\r   \n\rabc\n\u05d0\u05d1\rabc \u05d2\u05d3\n\r"
                         + "\u05d4\u05d5 abc\n\u05d6\u05d7 abc .-=\r\n"
                         + "-* \u05d8\u05d9 abc .-=", IBM.ICU.Text.Bidi.LEVEL_DEFAULT_RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals(
                "\nWrong result #9",
                "\n\r   \n\rabc\n\u05d1\u05d0\r\u05d3\u05d2 abc\n\r"
                + "\u200fabc \u05d5\u05d4\n\u200f=-. abc \u05d7\u05d6\r\n"
                + "\u200f=-. abc \u05d9\u05d8 *-", xout);

            bidi.SetPara("\u05d0 \t", IBM.ICU.Text.Bidi.LTR, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #10", "\u05D0\u200e \t", xout);
            bidi.SetPara("\u05d0 123 \t\u05d1 123 \u05d2", IBM.ICU.Text.Bidi.LTR, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #11",
                         "\u05d0 \u200e123\u200e \t\u05d2 123 \u05d1", xout);
            bidi.SetPara("\u05d0 123 \u0660\u0661 ab", IBM.ICU.Text.Bidi.LTR, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #12",
                         "\u05d0 \u200e123 \u200e\u0660\u0661 ab", xout);
            bidi.SetPara("ab \t", IBM.ICU.Text.Bidi.RTL, null);
            xout = bidi.WriteReordered(0);
            AssertEquals("\nWrong result #13", "\u200f\t ab", xout);

            /* check exceeding para level */
            bidi = new Bidi();
            bidi.SetPara("A\u202a\u05d0\u202aC\u202c\u05d1\u202cE",
                         (sbyte)(IBM.ICU.Text.Bidi.MAX_EXPLICIT_LEVEL - 1), null);
            AssertEquals("\nWrong level at index 2", 61, bidi.GetLevelAt(2));

            /* check 1-char runs with RUNS_ONLY */
            bidi.SetReorderingMode(IBM.ICU.Text.Bidi.REORDER_RUNS_ONLY);
            bidi.SetPara("a \u05d0 b \u05d1 c \u05d2 d ", IBM.ICU.Text.Bidi.LTR, null);
            AssertEquals("\nWrong number of runs #4", 14, bidi.CountRuns());
        }
예제 #4
0
        internal bool CheckWhatYouCan(Bidi bidi, String src, String dst)
        {
            int  i, idx, logLimit, visLimit;
            bool testOK, errMap, errDst;

            char[] srcChars = src.ToCharArray();
            char[] dstChars = dst.ToCharArray();
            int[]  visMap   = bidi.GetVisualMap();
            int[]  logMap   = bidi.GetLogicalMap();

            testOK   = true;
            errMap   = errDst = false;
            logLimit = bidi.GetProcessedLength();
            visLimit = bidi.GetResultLength();
            if (visLimit > dstChars.Length)
            {
                visLimit = dstChars.Length;
            }
            char[] accumSrc = new char[logLimit];
            char[] accumDst = new char[visLimit];
            ILOG.J2CsMapping.Collections.Arrays.Fill(accumSrc, '?');
            ILOG.J2CsMapping.Collections.Arrays.Fill(accumDst, '?');

            if (logMap.Length != logLimit)
            {
                errMap = true;
            }
            for (i = 0; i < logLimit; i++)
            {
                idx = bidi.GetVisualIndex(i);
                if (idx != logMap[i])
                {
                    errMap = true;
                }
                if (idx == IBM.ICU.Text.Bidi.MAP_NOWHERE)
                {
                    continue;
                }
                if (idx >= visLimit)
                {
                    continue;
                }
                accumDst[idx] = srcChars[i];
                if (!MatchingPair(bidi, i, srcChars[i], dstChars[idx]))
                {
                    errDst = true;
                }
            }
            if (errMap)
            {
                if (testOK)
                {
                    PrintCaseInfo(bidi, src, dst);
                    testOK = false;
                }
                Errln("Mismatch between getLogicalMap() and getVisualIndex()");
                Errcont("Map    :" + ValueOf(logMap));
                Errcont("\n");
                Errcont("Indexes:");
                for (i = 0; i < logLimit; i++)
                {
                    Errcont(" " + bidi.GetVisualIndex(i));
                }
                Errcont("\n");
            }
            if (errDst)
            {
                if (testOK)
                {
                    PrintCaseInfo(bidi, src, dst);
                    testOK = false;
                }
                Errln("Source does not map to Result");
                Errcontln("We got: " + ILOG.J2CsMapping.Util.StringUtil.NewString(accumDst));
            }

            errMap = errDst = false;
            if (visMap.Length != visLimit)
            {
                errMap = true;
            }
            for (i = 0; i < visLimit; i++)
            {
                idx = bidi.GetLogicalIndex(i);
                if (idx != visMap[i])
                {
                    errMap = true;
                }
                if (idx == IBM.ICU.Text.Bidi.MAP_NOWHERE)
                {
                    continue;
                }
                if (idx >= logLimit)
                {
                    continue;
                }
                accumSrc[idx] = dstChars[i];
                if (!MatchingPair(bidi, idx, srcChars[idx], dstChars[i]))
                {
                    errDst = true;
                }
            }
            if (errMap)
            {
                if (testOK)
                {
                    PrintCaseInfo(bidi, src, dst);
                    testOK = false;
                }
                Errln("Mismatch between getVisualMap() and getLogicalIndex()");
                Errcont("Map    :" + ValueOf(visMap));
                Errcont("\n");
                Errcont("Indexes:");
                for (i = 0; i < visLimit; i++)
                {
                    Errcont(" " + bidi.GetLogicalIndex(i));
                }
                Errcont("\n");
            }
            if (errDst)
            {
                if (testOK)
                {
                    PrintCaseInfo(bidi, src, dst);
                    testOK = false;
                }
                Errln("Result does not map to Source");
                Errcontln("We got: " + ILOG.J2CsMapping.Util.StringUtil.NewString(accumSrc));
            }
            return(testOK);
        }