// Implementations are intentionally split to avoid boxing private void TestCodePointForwardEnumerator(string s, Utf8String u8s) { List<UnicodeCodePoint> codePoints = new List<UnicodeCodePoint>(); Utf8String.CodePointEnumerator it = u8s.CodePoints.GetEnumerator(); while (it.MoveNext()) { codePoints.Add(it.Current); } Utf16LittleEndianCodePointEnumerable utf16CodePoints = new Utf16LittleEndianCodePointEnumerable(s); Assert.Equal(utf16CodePoints, codePoints); Utf8String u8s2 = new Utf8String(codePoints); Assert.Equal(u8s, u8s2); Assert.Equal(s, u8s2.ToString()); }
public void EnumerateAndEnsureCodePointsOfTheSameUtf8AndUtf16StringsAreTheSame(string utf16String, Utf8String utf8String) { var utf16StringCodePoints = new Utf16LittleEndianCodePointEnumerable(utf16String); var utf16CodePointEnumerator = utf16StringCodePoints.GetEnumerator(); var utf8CodePointEnumerator = utf8String.CodePoints.GetEnumerator(); bool moveNext; while (true) { moveNext = utf16CodePointEnumerator.MoveNext(); Assert.Equal(moveNext, utf8CodePointEnumerator.MoveNext()); if (!moveNext) { break; } Assert.Equal(utf16CodePointEnumerator.Current, utf8CodePointEnumerator.Current); } }
private void TestCodePointReverseEnumerator(string s, Utf8String u8s) { List <uint> codePoints = new List <uint>(); Utf8String.CodePointReverseEnumerator it = u8s.CodePoints.GetReverseEnumerator(); while (it.MoveNext()) { codePoints.Add(it.Current); } codePoints.Reverse(); Utf16LittleEndianCodePointEnumerable utf16CodePoints = new Utf16LittleEndianCodePointEnumerable(s); Assert.Equal(utf16CodePoints, codePoints); Utf8String u8s2 = new Utf8String(codePoints); TestHelper.Validate(u8s, u8s2); Assert.Equal(s, u8s2.ToString()); }
private static string GetStringLiteral(string s) { if (s == null) { return("null"); } Utf16LittleEndianCodePointEnumerable codePoints = new Utf16LittleEndianCodePointEnumerable(s); StringBuilder sb = new StringBuilder(); sb.Append('"'); foreach (uint codePoint in codePoints) { if (codePoint >= 32 && codePoint < 127) { sb.Append(char.ConvertFromUtf32(unchecked ((int)codePoint))); } else if (codePoint == (uint)'\n') { sb.Append("\\n"); } else if (codePoint == (uint)'\r') { sb.Append("\\r"); } else if (codePoint == (uint)'\t') { sb.Append("\\t"); } else { sb.Append(string.Format("\\u{0:X04}", codePoint)); } } sb.Append('"'); return(sb.ToString()); }
private static string GetStringLiteral(string s) { if (s == null) { return "null"; } Utf16LittleEndianCodePointEnumerable codePoints = new Utf16LittleEndianCodePointEnumerable(s); StringBuilder sb = new StringBuilder(); sb.Append('"'); foreach (var codePoint in codePoints) { if (codePoint.Value >= 32 && codePoint.Value < 127) { sb.Append(char.ConvertFromUtf32(unchecked((int)codePoint.Value))); } else if (codePoint.Value == (uint)'\n') { sb.Append("\\n"); } else if (codePoint.Value == (uint)'\r') { sb.Append("\\r"); } else if (codePoint.Value == (uint)'\t') { sb.Append("\\t"); } else { sb.Append(string.Format("\\u{0:X04}", codePoint.Value)); } } sb.Append('"'); return sb.ToString(); }
private void TestCodePointReverseEnumerator(string s, Utf8String u8s) { List<UnicodeCodePoint> codePoints = new List<UnicodeCodePoint>(); Utf8String.CodePointReverseEnumerator it = u8s.CodePoints.GetReverseEnumerator(); while (it.MoveNext()) { codePoints.Add(it.Current); } codePoints.Reverse(); Utf16LittleEndianCodePointEnumerable utf16CodePoints = new Utf16LittleEndianCodePointEnumerable(s); Assert.Equal(utf16CodePoints, codePoints); Utf8String u8s2 = new Utf8String(codePoints); Assert.Equal(u8s, u8s2); Assert.Equal(s, u8s2.ToString()); }