public void CheckForThreadSafe()
        {
            var fs = new FifoStream();
            var actualResult = new List<byte>();
            var running = true;
            var dataToWrite = new byte[]
                                  {
                                      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
                                  };

            var readThread = new Thread(new ParameterizedThreadStart(delegate
            {
                while (running || fs.Length > 0)
                {
                    if (fs.Length <= 0) continue;
                    var dataBuffer = new byte[10];
                    var actualCount = fs.Read(dataBuffer, 0, dataBuffer.Length);

                    for (var i = 0; i < actualCount; i++)
                        actualResult.Add(dataBuffer[i]);
                }
            }));

            readThread.Start();

            var writeThread = new Thread(new ParameterizedThreadStart(delegate
            {
                for (var i = 0; i < 100; i++)
                    fs.Write(dataToWrite, 0, dataToWrite.Length);
            }));

            writeThread.Start();

            Assert.AreEqual(true, writeThread.Join(60000));

            running = false;

            Assert.AreEqual(true, readThread.Join(60000));

            var exceptionFlag = false;
            for (int i = 0, k=0; i < 100; i++)
            {
                foreach (var b in dataToWrite)
                {
                    exceptionFlag = (actualResult[k] != b);
                    k++;
                    if (exceptionFlag == false)
                        break;
                }
            }

            Assert.AreEqual(true, exceptionFlag);
        }
        public void ShouldAbleToAdvanceTheBytes()
        {
            var data = new byte[]
                              {
                                  0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10
                              };

            var fs = new FifoStream();
            fs.Write(data, 0, data.Length);

            fs.Advance(2);

            var finalData = new byte[8];
            fs.Read(finalData, 0, finalData.Length);

            for (var i = 2; i < data.Length; i++)
                if (data[i] != finalData[i - 2])
                    Assert.Fail("Array value is not same");
        }