private static void SkipTransformChunkTest(
			int inBlockSize,
			int outBlockSize,
			int inputCacheBlocks,
			long dataSize,
			int bufSize,
			bool canTransformMultipleBlocks,
			int transformBufferSize,
			long totalSkip,
			int bufferSkip)
        {
            var src = new BigBufferedSourceMock (dataSize, bufSize, FillFunction);
            var mock = new CryptoTransformMock (inBlockSize, outBlockSize, inputCacheBlocks, canTransformMultipleBlocks);
            var transform = new CryptoTransformingBufferedSource (src, mock, new byte[transformBufferSize]);

            Assert.AreEqual (totalSkip, transform.TrySkip (totalSkip));
            transform.EnsureBuffer (3);
            Assert.AreEqual ((byte)~FillFunction (MapTransformIndexBackToOriginal (totalSkip, mock)), transform.Buffer[transform.Offset]);
            Assert.AreEqual ((byte)~FillFunction (MapTransformIndexBackToOriginal (totalSkip + 1, mock)), transform.Buffer[transform.Offset + 1]);
            Assert.AreEqual ((byte)~FillFunction (MapTransformIndexBackToOriginal (totalSkip + 2, mock)), transform.Buffer[transform.Offset + 2]);
            transform.EnsureBuffer (bufferSkip);
            transform.SkipBuffer (bufferSkip);
            transform.EnsureBuffer (3);
            Assert.AreEqual ((byte)~FillFunction (MapTransformIndexBackToOriginal (totalSkip + bufferSkip, mock)), transform.Buffer[transform.Offset]);
            Assert.AreEqual ((byte)~FillFunction (MapTransformIndexBackToOriginal (totalSkip + bufferSkip + 1, mock)), transform.Buffer[transform.Offset + 1]);
            Assert.AreEqual ((byte)~FillFunction (MapTransformIndexBackToOriginal (totalSkip + bufferSkip + 2, mock)), transform.Buffer[transform.Offset + 2]);
        }