public void LogicalRuns() { using (var bidi = new BiDi()) { bidi.SetPara(ENGLISH_HEBREW_MIXED, BiDi.DEFAULT_LTR, null); Assert.AreEqual(3, bidi.CountRuns()); var logicalMap = bidi.GetLogicalMap(); Assert.AreEqual(ENGLISH_HEBREW_MIXED.Length, logicalMap.Length); Assert.AreEqual(HEBREW_SHORT.Length, logicalMap.Select((m, i) => (m, i)).Count(mi => mi.Item1 != mi.Item2)); Assert.That(Enumerable.Range(0, ENGLISH_PART_1.Length).All(i => bidi.GetLogicalIndex(i) == i)); Assert.That(Enumerable.Range(ENGLISH_PART_1.Length, HEBREW_SHORT.Length).All(i => bidi.GetLogicalIndex(i) == ENGLISH_PART_1.Length + HEBREW_SHORT.Length - i + ENGLISH_PART_1.Length - 1)); Assert.That(Enumerable.Range(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, ENGLISH_PART_2.Length).All(i => bidi.GetLogicalIndex(i) == i)); var limit = bidi.GetLogicalRun(3, out byte runlevel); Assert.AreEqual(ENGLISH_PART_1.Length, limit); Assert.AreEqual(0, runlevel); limit = bidi.GetLogicalRun(ENGLISH_PART_1.Length + 3, out runlevel); Assert.AreEqual(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, limit); Assert.AreEqual(1, runlevel); limit = bidi.GetLogicalRun(ENGLISH_PART_1.Length + HEBREW_SHORT.Length + 3, out runlevel); Assert.AreEqual(ENGLISH_HEBREW_MIXED.Length, limit); Assert.AreEqual(0, runlevel); bidi.SetPara(ENGLISH_LONG, BiDi.DEFAULT_LTR, null); Assert.AreEqual(1, bidi.CountRuns()); bidi.SetPara(HEBREW_LONG, BiDi.DEFAULT_LTR, null); Assert.AreEqual(1, bidi.CountRuns()); } }
public void VisualRuns() { using (var bidi = new BiDi()) { bidi.SetPara(ENGLISH_HEBREW_MIXED, BiDi.DEFAULT_LTR, null); Assert.AreEqual(3, bidi.CountRuns()); var visualMap = bidi.GetVisualMap(); Assert.AreEqual(ENGLISH_HEBREW_MIXED.Length, visualMap.Length); Assert.AreEqual(HEBREW_SHORT.Length, visualMap.Select((m, i) => (m, i)).Count(mi => mi.Item1 != mi.Item2)); Assert.That(Enumerable.Range(0, ENGLISH_PART_1.Length).All(i => bidi.GetVisualIndex(i) == i)); Assert.That(Enumerable.Range(ENGLISH_PART_1.Length, HEBREW_SHORT.Length).All(i => bidi.GetVisualIndex(i) == ENGLISH_PART_1.Length + HEBREW_SHORT.Length - i + ENGLISH_PART_1.Length - 1)); Assert.That(Enumerable.Range(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, ENGLISH_PART_2.Length).All(i => bidi.GetVisualIndex(i) == i)); var direction = bidi.GetVisualRun(0, out int start, out int len); Assert.AreEqual(0, start); Assert.AreEqual(ENGLISH_PART_1.Length, len); Assert.AreEqual(direction, BiDi.BiDiDirection.LTR); direction = bidi.GetVisualRun(1, out start, out len); Assert.AreEqual(ENGLISH_PART_1.Length, start); Assert.AreEqual(HEBREW_SHORT.Length, len); Assert.AreEqual(direction, BiDi.BiDiDirection.RTL); direction = bidi.GetVisualRun(2, out start, out len); Assert.AreEqual(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, start); Assert.AreEqual(ENGLISH_PART_2.Length, len); Assert.AreEqual(direction, BiDi.BiDiDirection.LTR); } }