private static void EmptySourceTest(int bufSize)
 {
     var data = new byte[0];
     var strm = new MemoryStream (data);
     var src = new StreamBufferedSource (strm, new byte[bufSize]);
     Assert.AreEqual (0, src.FillBuffer ());
     Assert.AreEqual (0, src.TrySkip (1));
     Assert.AreEqual (0, src.FillBuffer ());
     Assert.IsTrue (src.IsExhausted);
     Assert.AreEqual (0, src.Count);
 }
        private static void OneByteSourceTest(int bufSize)
        {
            byte nnn = 123;
            var data = new byte[] { nnn };
            var strm = new MemoryStream (data);

            var src = new StreamBufferedSource (strm, new byte[bufSize]);
            src.EnsureBuffer (1);
            Assert.AreEqual (nnn, src.Buffer[src.Offset]);
            src.SkipBuffer (1);
            Assert.AreEqual (0, src.FillBuffer ());
            Assert.IsTrue (src.IsExhausted);
            Assert.AreEqual (0, src.Count);

            strm.Seek (0, SeekOrigin.Begin);
            src = new StreamBufferedSource (strm, new byte[bufSize]);
            Assert.AreEqual (1, src.FillBuffer ());
            Assert.AreEqual (nnn, src.Buffer[src.Offset]);
            Assert.AreEqual (1, src.TrySkip (bufSize));
            Assert.AreEqual (0, src.FillBuffer ());
            Assert.IsTrue (src.IsExhausted);
            Assert.AreEqual (0, src.Count);
        }
        // проверяем 2 блока по 3 байта перед каждым делаем пропуск
        private static void SkipTest3SkipTest3SkipTest(
			long dataSize,
			bool canSeek,
			int bufSize,
			int skipBuffer1,
			int skipBuffer2,
			long skipOverall1,
			long skipOverall2,
			long skipOverEnd)
        {
            System.Diagnostics.Trace.WriteLine (string.Format ("dataSize = {0}, canSeek = {7}, bufSize = {1}, skipOverall1 = {2}, skipOverall2 = {3}, skipOverEnd = {4}, skipBuffer1 = {5}, skipBuffer2 = {6}", dataSize, bufSize, skipOverall1, skipOverall2, skipOverEnd, skipBuffer1, skipBuffer2, canSeek));
            var strm = new BigStreamMock (dataSize, canSeek, FillFunction);
            var src = new StreamBufferedSource (strm, new byte[bufSize]);
            src.EnsureBuffer (3);
            Assert.AreEqual (FillFunction(0), src.Buffer[src.Offset]);
            Assert.AreEqual (FillFunction(1), src.Buffer[src.Offset + 1]);
            Assert.AreEqual (FillFunction(2), src.Buffer[src.Offset + 2]);
            Assert.AreEqual (skipOverall1, src.TrySkip (skipOverall1));
            src.EnsureBuffer (skipBuffer1);
            src.SkipBuffer (skipBuffer1);
            src.EnsureBuffer (3);
            Assert.AreEqual (FillFunction(skipOverall1 + skipBuffer1), src.Buffer[src.Offset]);
            Assert.AreEqual (FillFunction(skipOverall1 + skipBuffer1 + 1), src.Buffer[src.Offset + 1]);
            Assert.AreEqual (FillFunction(skipOverall1 + skipBuffer1 + 2), src.Buffer[src.Offset + 2]);
            Assert.AreEqual (skipOverall2, src.TrySkip (skipOverall2));
            src.EnsureBuffer (skipBuffer2);
            src.SkipBuffer (skipBuffer2);
            src.EnsureBuffer (3);
            Assert.AreEqual (FillFunction(skipOverall1 + skipOverall2 + skipBuffer1 + skipBuffer2), src.Buffer[src.Offset]);
            Assert.AreEqual (FillFunction(skipOverall1 + skipOverall2 + skipBuffer1 + skipBuffer2 + 1), src.Buffer[src.Offset + 1]);
            Assert.AreEqual (FillFunction(skipOverall1 + skipOverall2 + skipBuffer1 + skipBuffer2 + 2), src.Buffer[src.Offset + 2]);
            Assert.AreEqual (dataSize - skipOverall1 - skipOverall2 - skipBuffer1 - skipBuffer2, src.TrySkip (skipOverEnd));
            Assert.IsTrue (src.IsExhausted);
            Assert.AreEqual (0, src.Count);
        }