public void TestUtf8EqualsString() { Byte[] testBuffer = new Byte[32]; testBuffer[0] = (Byte)' '; testBuffer[1] = (Byte)'a'; testBuffer[2] = (Byte)'B'; Assert.IsTrue(Utf8.EqualsString(testBuffer, 0, 0, "", false)); Assert.IsTrue(Utf8.EqualsString(testBuffer, 0, 1, " ", false)); Assert.IsTrue(Utf8.EqualsString(testBuffer, 1, 3, "aB", false)); Assert.IsFalse(Utf8.EqualsString(testBuffer, 0, 3, " AB", false)); Assert.IsFalse(Utf8.EqualsString(testBuffer, 0, 3, " ab", false)); Assert.IsTrue(Utf8.EqualsString(testBuffer, 0, 3, " AB", true)); Assert.IsTrue(Utf8.EqualsString(testBuffer, 0, 3, " ab", true)); }
unsafe void TestDecodeUtf8(Byte[] s, UInt32 start, UInt32 limit, params UInt32[] expectedChars) { foreach (var expected in expectedChars) { if (start >= limit) { Assert.Fail("Expected more decoded utf8 chars but input ended"); } UInt32 encodedLength = limit - start; { var saveStart = start; var decoded = Utf8.Decode(s, ref start, limit); if (decoded != expected) { Assert.Fail("decodeUtf8: Expected '{0}' 0x{1} but decoded '{2}' 0x{3}", expected, expected, decoded, decoded); } Console.WriteLine("decodeUtf8('{0}')", decoded); } fixed(byte *sPointer = s) { Utf8Pointer pointer = new Utf8Pointer(sPointer); Utf8Pointer pointerLimit = new Utf8Pointer(sPointer + encodedLength); var decoded = Utf8.Decode(ref pointer, pointerLimit); if (decoded != expected) { Assert.Fail("decodeUtf8: Expected '{0}' 0x{1} but decoded '{2}' 0x{3}", expected, expected, decoded, decoded); } } } if (start != limit) { Assert.Fail("Expected {0} characters but didn't get enough", expectedChars.Length); } }
public void TestGetUtf8ByteCount() { Byte[] encoded = new Byte[16]; //Char[] chars = new Char[] { '"', '\\', 'u', 'x', 'x', 'x', 'x', '"' }; //String hexMap = "0123456789ABCDEF"; for (int i = 0; i < 1; i++) { //chars[3] = hexMap[i]; for (int j = 0; j < 16; j++) { //chars[4] = hexMap[j]; for (int k = 0; k < 16; k++) { //chars[5] = hexMap[k]; for (int l = 0; l < 16; l++) { //chars[6] = hexMap[l]; Char unicodeChar = (Char)( (i << 12) | (j << 8) | (k << 4) | l); Assert.AreEqual(Encoding.UTF8.GetByteCount(new Char[] { unicodeChar }), Utf8.GetCharEncodeLength(unicodeChar)); UInt32 length = Utf8.EncodeChar(unicodeChar, encoded, 0); String decoded = Encoding.UTF8.GetString(encoded, 0, (Int32)length); Assert.AreEqual(unicodeChar, decoded[0]); //Console.WriteLine("Decoded = '{0}'", decoded); //Assert.AreEqual((Byte)((i << 4) | j), encoded } } } } }
// The caller is guaranteeing that every char in str is between 0 and 127 (inclusive) //public void AppendFormatAscii(String format, params Object[] obj) //{ // String.Format( // builder.AppendFormat(format, obj); //} public void AppendUtf8(Char c) { EnsureTotalCapacity(contentLength + Utf8.MaxCharEncodeLength); contentLength = Utf8.EncodeChar(c, bytes, contentLength); }
public void TestPeelUtf8() { Byte[] testBuffer = new Byte[32]; testBuffer[0] = (Byte)' '; testBuffer[1] = (Byte)' '; testBuffer[2] = (Byte)'\t'; testBuffer[3] = (Byte)' '; testBuffer[4] = (Byte)'h'; testBuffer[5] = (Byte)'e'; testBuffer[6] = (Byte)'l'; testBuffer[7] = (Byte)'l'; testBuffer[8] = (Byte)'o'; testBuffer[9] = (Byte)'\t'; testBuffer[10] = (Byte)' '; testBuffer[11] = (Byte)'w'; testBuffer[12] = (Byte)'o'; testBuffer[13] = (Byte)'r'; testBuffer[14] = (Byte)'l'; testBuffer[15] = (Byte)'d'; testBuffer[16] = (Byte)' '; testBuffer[17] = (Byte)'\t'; OffsetLimit peeled; SliceByLimit <Byte> testSegment; testSegment.array = testBuffer; testSegment.offset = 0; testSegment.limit = 0; peeled = Utf8.Peel(ref testSegment); Assert.AreEqual(0U, testSegment.offset); Assert.AreEqual(0U, peeled.limit); testSegment.offset = 0; testSegment.limit = 4; peeled = Utf8.Peel(ref testSegment); Assert.AreEqual(4U, testSegment.offset); Assert.AreEqual(4U, peeled.offset); Assert.AreEqual(4U, peeled.limit); testSegment.offset = 2; testSegment.limit = 4; peeled = Utf8.Peel(ref testSegment); Assert.AreEqual(4U, testSegment.offset); Assert.AreEqual(4U, peeled.offset); Assert.AreEqual(4U, peeled.limit); testSegment.offset = 3; testSegment.limit = 5; peeled = Utf8.Peel(ref testSegment); Assert.AreEqual(5U, testSegment.offset); Assert.AreEqual(4U, peeled.offset); Assert.AreEqual(5U, peeled.limit); testSegment.offset = 1; testSegment.limit = 14; peeled = Utf8.Peel(ref testSegment); Assert.AreEqual(10U, testSegment.offset); Assert.AreEqual(4U, peeled.offset); Assert.AreEqual(9U, peeled.limit); testSegment.offset = 2; testSegment.limit = 18; peeled = Utf8.Peel(ref testSegment); Assert.AreEqual(10U, testSegment.offset); Assert.AreEqual(4U, peeled.offset); Assert.AreEqual(9U, peeled.limit); }