public async Task Segment_Based_CompressAsync_DecompressAsSegmentAsync_Harmonize(int arrSize, int segSize, bool gzip) { var randm = new Random(); var bytes = new byte[arrSize]; randm.NextBytes(bytes); var segment = new ArraySegment <byte>(bytes, 0, segSize); using (var mem = new MemoryStream()) { await segment.CompressAsync(mem, gzip).ConfigureAwait(false); var compressedData = mem.ToArray(); if (segSize == 0) { #if NETFRAMEWORK Assert.True(compressedData.Length == 0); #else Assert.False(compressedData.Length == 0); #endif } else { var invalidCompress = compressedData.Length == segSize; Assert.NotNull(segment.Array); for (var i = 0; i < Math.Min(segSize, compressedData.Length); i++) { if (invalidCompress) { invalidCompress = segment.Array[i] == compressedData[i]; } } Assert.False(invalidCompress); } mem.Seek(0, SeekOrigin.Begin); var uncompressed = await mem.DecompressAsSegmentAsync(gzip).ConfigureAwait(false); Assert.True(segment.Count == uncompressed.Count); Assert.NotNull(segment.Array); Assert.NotNull(uncompressed.Array); for (var i = 0; i < uncompressed.Count; i++) { Assert.True(segment.Array[i].Equals(uncompressed.Array[i])); } } }