예제 #1
0
        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));
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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
                        }
                    }
                }
            }
        }
예제 #4
0
        // 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);
        }
예제 #5
0
        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);
        }