public void SlicedSequence(byte b0, byte b1, byte b2, byte b3) { var array = new[] { b0, b1, b2, b3 }; var str = Encoding.UTF8.GetString(array); var encoding = new Utf8TokenEncoding(); for (var i = 1; i < array.Length; ++i) { for (var j = 1; j < array.Length - i; ++j) { var span0 = new Span <byte>(array, 0, i); var span1 = new Span <byte>(array, i, j); var span2 = new Span <byte>(array, i + j, array.Length - i - j); var output = new char[5]; var estimatedLength0 = encoding.EstimateCharCount(span0); var res0Len = encoding.GetString(span0, new Span <char>(output, 0, estimatedLength0)); var res0 = new Span <char>(output, 0, res0Len).ToString(); var estimatedLength1 = encoding.EstimateCharCount(span1); var res1Len = encoding.GetString(span1, new Span <char>(output, res0Len, estimatedLength1)); var res1 = new Span <char>(output, res0Len, res1Len).ToString(); var estimatedLength2 = encoding.EstimateCharCount(span2); var res2Len = encoding.GetString(span2, new Span <char>(output, res0Len + res1Len, estimatedLength2)); var res2 = new Span <char>(output, res0Len + res1Len, res2Len).ToString(); Assert.AreEqual(str, res0 + res1 + res2); } } }
private void TestEncoding(byte[] source) { var encoding = new Utf8TokenEncoding(); var blockSize = 1024; var blockOutput = new char[1024]; for (var i = 0; i < source.Length; i += blockSize) { encoding.GetString(new ReadOnlySpan <byte>(source, i, Math.Min(blockSize, source.Length - i)), new Span <char>(blockOutput)); } }
public void IncompleteUtfSequence_SequenceTerminatedAndNextCharacterParsed() { var array = new byte[] { 0b11110000, 0b10010000, 0b10001101, 0b10000000 }; var str = Encoding.UTF8.GetString(array); array[array.Length - 1] = (byte)';'; var encoding = new Utf8TokenEncoding(); var span0 = new Span <byte>(array); var output = new char[encoding.EstimateCharCount(span0)]; var res0Len = encoding.GetString(span0, new Span <char>(output, 0, output.Length)); Assert.AreEqual(str + ";", new Span <char>(output, 0, res0Len).ToString()); }