public void InputEndsTooEarlyAndRestartsFromUtf32()
        {
            uint[] codepoints1 = TextEncoderTestHelper.GenerateValidUtf32CodePoints(TextEncoderConstants.DataLength);
            uint[] codepoints2 = TextEncoderTestHelper.GenerateValidUtf32CodePoints(TextEncoderConstants.DataLength);

            uint[] inputAll = new uint[codepoints1.Length + codepoints2.Length];
            Array.Copy(codepoints1, inputAll, codepoints1.Length);
            Array.Copy(codepoints2, 0, inputAll, codepoints1.Length, codepoints2.Length);

            ReadOnlySpan <byte> expected = Text.Encoding.Convert(Text.Encoding.UTF32, Text.Encoding.UTF8, MemoryMarshal.AsBytes(inputAll.AsSpan()).ToArray());
            Span <byte>         output   = new byte[expected.Length];

            ReadOnlySpan <byte> input = MemoryMarshal.AsBytes(inputAll.AsSpan(0, codepoints1.Length));

            input = input.Slice(0, input.Length - 2); // Strip a couple bytes from last good code point
            Assert.Equal(OperationStatus.NeedMoreData, Encodings.Utf32.ToUtf8(input, output, out int consumed, out int written));
            Assert.True(input.Length > consumed, "Consumed too many bytes [first half]");
            Assert.NotEqual(expected.Length, written);
            Assert.True(expected.Slice(0, written).SequenceEqual(output.Slice(0, written)), "Invalid output sequence [first half]");

            input    = MemoryMarshal.AsBytes(inputAll.AsSpan()).Slice(consumed);
            expected = expected.Slice(written);
            Assert.Equal(OperationStatus.Done, Encodings.Utf32.ToUtf8(input, output, out consumed, out written));
            Assert.Equal(input.Length, consumed);
            Assert.Equal(expected.Length, written);
            Assert.True(expected.SequenceEqual(output.Slice(0, written)), "Invalid output sequence [second half]");
        }