internal void BufferTestReadInternal(ref MessageStream buf, string data, int start, int end, string fullData = null)
        {
            int    bytes = data.Length * 2;
            string dataCheck;

            unsafe
            {
                fixed(MessageStream *bufPtr = &buf)
                {
                    MessageStreamBuilder messageBuilder = new MessageStreamBuilder(bufPtr);

                    fixed(char *d = data)
                    {
                        messageBuilder.WriteRaw((byte *)d, bytes);
                    }
                }

                byte[] arr = buf.ToByteArray(start, end);
                fixed(byte *a = arr)
                {
                    dataCheck = new string((char *)a, 0, arr.Length / 2);
                }
            }

            Assert.AreEqual((fullData ?? data).Substring(start / 2, (end - start) / 2), dataCheck);
        }
 public void BufferTestWriteNullThrows()
 {
     unsafe
     {
         MessageStream        buf            = new MessageStream(16);
         MessageStreamBuilder messageBuilder = new MessageStreamBuilder(&buf);
         Assert.Throws <System.ArgumentNullException>(() => messageBuilder.WriteRaw(null, 4));
     }
 }
 public void BufferTestWriteNull0()
 {
     unsafe
     {
         MessageStream        buf            = new MessageStream(16);
         MessageStreamBuilder messageBuilder = new MessageStreamBuilder(&buf);
         messageBuilder.WriteRaw(null, 0);
         Assert.AreEqual(0, buf.TotalBytes);
     }
 }
        public void BufferTestWrite0()
        {
            unsafe
            {
                MessageStream        buf            = new MessageStream(16);
                MessageStreamBuilder messageBuilder = new MessageStreamBuilder(&buf);
                string data = "abcd";
                fixed(char *d = data)
                {
                    messageBuilder.WriteRaw((byte *)d, 0);
                }

                Assert.AreEqual(0, buf.TotalBytes);
            }
        }
        internal unsafe void BufferTestWriteInternal(ref MessageStream buf, string data)
        {
            int reserve       = buf.m_Reserve;
            int bytes         = data.Length * 2;
            int oldHeadBytes  = buf.BufferRead->Size;
            int oldTotalBytes = buf.TotalBytes;

            unsafe
            {
                fixed(MessageStream *bufPtr = &buf)
                {
                    MessageStreamBuilder messageBuilder = new MessageStreamBuilder(bufPtr);

                    fixed(char *d = data)
                    {
                        messageBuilder.WriteRaw((byte *)d, bytes);
                    }
                }

                Assert.AreEqual(oldTotalBytes + bytes, buf.TotalBytes);

                if (buf.TotalBytes > reserve)
                {
                    // Read buffer should be unchanged (including if size was 0) once it's exceeded
                    Assert.AreEqual(oldHeadBytes, buf.BufferRead->Size);

                    // Write buffer should contain a single data write in a consecutive buffer
                    Assert.AreEqual(bytes, buf.BufferWrite->Size);
                    Assert.AreEqual(data, new string((char *)buf.BufferWrite->Buffer, 0, data.Length));
                }
                else
                {
                    // Read buffer should contain accumulative data writes as long as reserve size is not exceeded
                    Assert.AreEqual(oldHeadBytes + bytes, buf.BufferRead->Size);
                    Assert.AreEqual(data, new string((char *)buf.BufferRead->Buffer, oldTotalBytes / 2, data.Length));

                    // Write buffer should match read buffer as long as we are within reserve size
                    Assert.AreEqual(oldTotalBytes + bytes, buf.BufferWrite->Size);
                    Assert.AreEqual(data, new string((char *)buf.BufferWrite->Buffer, oldTotalBytes / 2, data.Length));

                    Assert.AreEqual(oldHeadBytes, oldTotalBytes);
                }
            }
        }