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); }