示例#1
0
        public void BufferPutBufferTestBounds()
        {
            for (int offset1 = 0; offset1 < 16; offset1++)
            {
                for (int offset2 = 0; offset2 < 16; offset2++)
                {
                    for (int length = 2; length < 14; length++)
                    {
                        byte[] data = new byte[40];
                        for (int i = 0; i < data.Length; i++)
                        {
                            data[i] = 0xff;
                        }

                        var dBitBuffer = new BitBuffer(data, offset2, length);

                        var bWrite = dBitBuffer;
                        bWrite.Put(false);
                        bWrite.Position += length - 2;
                        bWrite.Put(false);

                        var b = new BitBuffer(new byte[60], offset1);
                        b.Put(dBitBuffer);

                        var oldArray = dBitBuffer.ToArray();
                        b = b.FromStartToPosition();
                        var newArr = b.ToArray();
                        CollectionAssert.AreEqual(oldArray, newArr, "offset1=" + offset1 + ", offset2 = " + offset2 + ", length=" + length);
                        Assert.IsTrue(dBitBuffer.BufferEquals(b), "offset1=" + offset1 + ", offset2 = " + offset2 + ", length=" + length);
                    }
                }
            }
        }
示例#2
0
        public void Test()
        {
            // https://www.h-schmidt.net/FloatConverter/IEEE754.html

            byte[] tmp = new byte[400];

            byte[] expectedMessage = new byte[] {
                0x56, 0x47, 0x68, 0x70, 0x63, 0x79, 0x42, 0x70,
                0x63, 0x79, 0x42, 0x68, 0x49, 0x48, 0x52, 0x6c,
                0x63, 0x33, 0x51, 0x67, 0x62, 0x57, 0x56, 0x7a,
                0x63, 0x32, 0x46, 0x6e, 0x5a, 0x53, 0x45, 0x3d
            };

            for (int off = 0; off < 30; off++)
            {
                for (int len = 300; len < 330; len++)
                {
                    BitBuffer b = new BitBuffer(tmp, off, len);
                    {
                        Assert.AreEqual(off, b.absPosition);
                        Assert.AreEqual(0, b.Position);
                        Assert.AreEqual(off + len, b.absLength);
                        Assert.AreEqual(len, b.Length);
                        Assert.AreEqual(off, b.absOffset);
                    }

                    b.Put((ushort)0x4756);
                    b.Put((byte)0x11);
                    b.Put((byte)0x70);
                    b.PutAt(1 * 8, (ushort)0x6847);
                    b.Put(0x70427963);
                    b.Position += 64;
                    b.Put((ulong)0x7a56576267513363);
                    b.Position = 8 * 8;
                    b.Put(3.67351315E+24f);
                    b.Put(1.01686312E+27f);
                    b.Position += 64;
                    b.Put(1.5152749180821361E-13d);

                    Assert.IsTrue(b.FromStartToPosition().BufferEquals(new BitBuffer(expectedMessage)), "off=" + off + ", len=" + len);

                    Assert.AreEqual(off + expectedMessage.Length * 8, b.absPosition);
                    Assert.AreEqual(off, b.absOffset);
                    Assert.AreEqual(expectedMessage.Length * 8, b.Position);
                    Assert.AreEqual(len, b.Length);
                    Assert.AreEqual(off + len, b.absLength);

                    Assert.IsTrue(b.BufferEquals(b));
                }
            }
        }
示例#3
0
        public void CloneBufferWithPoolTest()
        {
            Random r = new Random(0);

            for (int offset = 0; offset < 16; offset++)
            {
                var b = new BitBuffer(new byte[32], offset);
                for (int k = 0; k < (b.data.Length - (int)Math.Ceiling(offset / 8f)) / sizeof(int); k++)
                {
                    b.Put(r.Next());
                }
                var clone = b.CloneUsingPool();

                Assert.IsTrue(b.BufferEquals(clone), "offset=" + offset);

                clone.Recycle();
            }
        }
示例#4
0
        private void TestBothSerializingModes(BitBuffer b)
        {
            BitBuffer example = new BitBuffer(new byte[] { 1, 2, 3 });

            if (b.serializerWriteMode)
            {
                b.Serialize(ref example);
            }
            else
            {
                var buff = new BitBuffer(new byte[3]);
                b.Serialize(ref buff);
                Assert.IsTrue(example.BufferEquals(buff));
            }

            for (int i = 0; i < 2; i++)
            {
                bool bTest = false;
                if (b.serializerWriteMode)
                {
                    bTest = i % 2 == 0;
                    b.Serialize(ref bTest);
                }
                else
                {
                    b.Serialize(ref bTest);
                    Assert.AreEqual(i % 2 == 0, bTest);
                }
            }

            for (int i = 0; i < 10; i++)
            {
                if (b.serializerWriteMode)
                {
                    b.Serialize(ref i);
                }
                else
                {
                    int j = 0;
                    b.Serialize(ref j);
                    Assert.AreEqual(i, j);
                }
            }
        }
示例#5
0
        public void BufferPutBuffer()
        {
            Random r = new Random(0);

            for (int offset1 = 0; offset1 < 16; offset1++)
            {
                byte[] data = new byte[40];
                r.NextBytes(data);
                for (int offset2 = 0; offset2 < 16; offset2++)
                {
                    var dBitBuffer = new BitBuffer(data, offset2, 4 * 8);
                    var b          = new BitBuffer(new byte[60], offset1);
                    b.Put(dBitBuffer);
                    var oldArray = dBitBuffer.ToArray();
                    b = b.FromStartToPosition();
                    var newArr = b.ToArray();
                    CollectionAssert.AreEqual(oldArray, newArr, "offset1=" + offset1 + ", offset2 = " + offset2);
                    Assert.IsTrue(dBitBuffer.BufferEquals(b), "offset1=" + offset1 + ", offset2 = " + offset2);
                }
            }
        }