예제 #1
0
        public void BruteTestingRoundtripEncodeDecodeAllUnicodeCodePoints(bool useUtf8Encoder)
        {
            const int maximumValidCodePoint = 0x10FFFF;

            uint[] expectedCodePoints = new uint[maximumValidCodePoint + 1];
            for (uint i = 0; i <= maximumValidCodePoint; i++)
            {
                if (!EncodingHelper.IsValidScalarValue(i))
                {
                    expectedCodePoints[i] = 0; // skip unsupported code points.
                }
                else
                {
                    expectedCodePoints[i] = i;
                }
            }

            ReadOnlySpan <uint> allCodePoints = expectedCodePoints;
            Span <byte>         buffer        = new byte[4 * (maximumValidCodePoint + 1)];
            int consumed;
            int written;

            if (useUtf8Encoder)
            {
                Assert.Equal(OperationStatus.Done, Encodings.Utf32.ToUtf8(allCodePoints.AsBytes(), buffer, out consumed, out written));
            }
            else
            {
                Assert.Equal(OperationStatus.Done, Encodings.Utf32.ToUtf16(allCodePoints.AsBytes(), buffer, out consumed, out written));
            }

            Assert.Equal(allCodePoints.AsBytes().Length, consumed);
            buffer = buffer.Slice(0, written);

            Span <uint> utf32 = new uint[maximumValidCodePoint + 1];

            if (useUtf8Encoder)
            {
                Assert.Equal(OperationStatus.Done, Encodings.Utf8.ToUtf32(buffer, utf32.AsBytes(), out consumed, out written));
            }
            else
            {
                Assert.Equal(OperationStatus.Done, Encodings.Utf16.ToUtf32(buffer, utf32.AsBytes(), out consumed, out written));
            }

            Assert.Equal(buffer.Length, consumed);
            Assert.Equal((maximumValidCodePoint + 1) * sizeof(uint), written);
            Assert.True(allCodePoints.SequenceEqual(utf32), "Bad output from round-trip");
        }
 /// <summary>
 /// Sets size information to header
 /// </summary>
 /// <param name="length">Image total length</param>
 /// <param name="widthPx">Image width in pixels</param>
 /// <param name="heightPx">Image height in pixels</param>
 public void SetSizeInfo(uint length, int widthPx, int heightPx)
 {
     ImageHeightPx = heightPx;
     ImageWidthPx  = widthPx;
     length.AsBytes().CopyBytesTo(Image, 2);
     widthPx.AsBytes().CopyBytesTo(Image, 18);
     heightPx.AsBytes().CopyBytesTo(Image, 22);
 }