public async Task TestPipeDecompress()
        {
            var ms     = new MemoryStream(_compressedData, false);
            var reader = PipeReader.Create(ms);
            var fse    = new FsePipeDecompressor(_writer);

            while (true)
            {
                ReadResult readResult = await reader.ReadAsync().ConfigureAwait(false);

                if (readResult.IsCompleted || readResult.IsCanceled)
                {
                    return;
                }

                fse.Process(readResult.Buffer, out SequencePosition consumed, out SequencePosition examined);
                reader.AdvanceTo(consumed, examined);

                switch (fse.State)
                {
                case FseDecompressorState.WriteOutput:
                    fse.NotifyFlushCompleted();
                    break;

                case FseDecompressorState.InvalidData:
                    throw new InvalidDataException();

                case FseDecompressorState.InvalidChecksum:
                    throw new InvalidDataException();

                case FseDecompressorState.Completed:
                    return;
                }
            }
        }
        public static async Task DecompressAsync(PipeReader reader, PipeWriter writer, CancellationToken cancellationToken = default)
        {
            var fse = new FsePipeDecompressor(writer);

            while (true)
            {
                ReadResult readResult = await reader.ReadAsync(cancellationToken).ConfigureAwait(false);

                if (readResult.IsCompleted || readResult.IsCanceled)
                {
                    await writer.CompleteAsync().ConfigureAwait(false);

                    return;
                }

                fse.Process(readResult.Buffer, out SequencePosition consumed, out SequencePosition examined);
                reader.AdvanceTo(consumed, examined);

                switch (fse.State)
                {
                case FseDecompressorState.WriteOutput:
                    await writer.FlushAsync().ConfigureAwait(false);

                    fse.NotifyFlushCompleted();
                    break;

                case FseDecompressorState.InvalidData:
                    throw new InvalidDataException();

                case FseDecompressorState.InvalidChecksum:
                    throw new InvalidDataException();

                case FseDecompressorState.Completed:
                    await writer.CompleteAsync().ConfigureAwait(false);

                    return;
                }
            }
        }