Example #1
0
        public void WriteInvalidateTest()
        {
            BitStreamer bs  = new BitStreamer(false);
            IntPtr      ptr = Memory.Alloc(8);

            Assert.IsFalse(bs.ThrowsOnExceededBuffer);
            Assert.IsFalse(bs.IsValid);

            bs.ResetWrite(ptr, 8);

            Assert.IsTrue(bs.IsValid);

            bs.WriteULong(123);
            Assert.IsTrue(bs.IsValid);

            bs.WriteInt32(321);
            Assert.IsFalse(bs.IsValid);

            // Confirm offset hasn't increased.
            Assert.AreEqual(8, bs.ByteOffset);

            bs.ResetWrite();
            Assert.IsTrue(bs.IsValid);

            Memory.Free(ptr);
        }
Example #2
0
        public void NonAlignBufferTest()
        {
            IntPtr ptr = Memory.Alloc(12);

            BitStreamer bs = new BitStreamer();

            bs.ResetWrite(ptr, 12);

            Assert.AreEqual(8, bs.ByteLength);

            bs.ResetRead();
            Assert.AreEqual(12, bs.ByteLength);

            bs.ResetWrite();
            Assert.AreEqual(8, bs.ByteLength);

            bs.WriteULong(123);

            // The write buffer should be rounded down to 8. So this must fail.
            Assert.Throws <InvalidOperationException>(() =>
            {
                bs.WriteByte(1);
            });

            Memory.Free(ptr);
        }
Example #3
0
        public void ReadInvalidateTest()
        {
            BitStreamer bs  = new BitStreamer(false);
            IntPtr      ptr = Memory.Alloc(4);

            Assert.IsFalse(bs.ThrowsOnExceededBuffer);
            Assert.IsFalse(bs.IsValid);

            bs.ResetRead(ptr, 4);

            Assert.IsTrue(bs.IsValid);

            bs.ReadInt32();
            Assert.IsTrue(bs.IsValid);

            bs.ReadInt32();
            Assert.IsFalse(bs.IsValid);

            // Confirm offset hasn't increased.
            Assert.AreEqual(4, bs.ByteOffset);

            bs.ResetRead();
            Assert.IsTrue(bs.IsValid);

            Memory.Free(ptr);
        }
Example #4
0
        static void convertBitmap(string inputFile, string outputFile)
        {
            Image im = Bitmap.FromFile(inputFile);
            Bitmap b = new Bitmap(im);

            using (FileStream of = new FileStream(outputFile, FileMode.Create))
            using (BinaryWriter bw = new BinaryWriter(of))
            {
                bw.Write(MagicCodeBitmap);
                bw.Write(b.Width);
                bw.Write(b.Height);

                UInt32[] bitmapData = new UInt32[(b.Width * b.Height + 31) / 32];
                BitStreamer bs = new BitStreamer(bitmapData);

                for (int y = 0; y != b.Height; ++y)
                {
                    for (int x = 0; x != b.Width; ++x)
                    {
                        if (b.GetPixel(x, y).B < 200)
                            bs.PutBits(1, 1);
                        else
                            bs.PutBits(0, 1);
                    }
                }
                foreach (var word in bitmapData)
                    bw.Write(word);
            }

        }
Example #5
0
        public void WriteResizeTest()
        {
            BitStreamer bs = new BitStreamer(false);

            Assert.IsFalse(bs.ThrowsOnExceededBuffer);
            Assert.IsFalse(bs.IsValid);

            bs.ResetWrite(8);

            Assert.IsTrue(bs.IsValid);

            bs.WriteULong(123);
            Assert.IsTrue(bs.IsValid);

            Assert.AreEqual(8, bs.ByteLength);

            bs.WriteInt32(321);
            Assert.IsTrue(bs.IsValid);

            Assert.AreEqual(16, bs.ByteLength);

            // Confirm offset has increased.
            Assert.AreEqual(12, bs.ByteOffset);

            bs.ResetRead();

            Assert.AreEqual(123, bs.ReadULong());
            Assert.AreEqual(321, bs.ReadInt32());

            Assert.IsTrue(bs.IsValid);
        }
Example #6
0
        static void convertBitmap(string inputFile, string outputFile)
        {
            Image  im = Bitmap.FromFile(inputFile);
            Bitmap b  = new Bitmap(im);

            using (FileStream of = new FileStream(outputFile, FileMode.Create))
                using (BinaryWriter bw = new BinaryWriter(of))
                {
                    bw.Write(MagicCodeBitmap);
                    bw.Write(b.Width);
                    bw.Write(b.Height);

                    UInt32[]    bitmapData = new UInt32[(b.Width * b.Height + 31) / 32];
                    BitStreamer bs         = new BitStreamer(bitmapData);

                    for (int y = 0; y != b.Height; ++y)
                    {
                        for (int x = 0; x != b.Width; ++x)
                        {
                            if (b.GetPixel(x, y).B < 200)
                            {
                                bs.PutBits(1, 1);
                            }
                            else
                            {
                                bs.PutBits(0, 1);
                            }
                        }
                    }
                    foreach (var word in bitmapData)
                    {
                        bw.Write(word);
                    }
                }
        }
 public static Vector3 ReadVector3(this BitStreamer stream)
 {
     return(new Vector3(
                stream.ReadHalf(),
                stream.ReadHalf(),
                stream.ReadHalf()
                ));
 }
Example #8
0
        public void ResetWithoutBufferTest()
        {
            BitStreamer bs = new BitStreamer();

            Assert.Throws <InvalidOperationException>(() =>
            {
                bs.ResetRead();
            });
        }
 public static void Serialize(this BitStreamer stream, ref Vector3 value)
 {
     if (stream.IsWriting)
     {
         WriteVector3(stream, value);
     }
     else
     {
         value = ReadVector3(stream);
     }
 }
Example #10
0
        public void CTorTest()
        {
            BitStreamer bs = new BitStreamer();

            Assert.AreEqual(0, bs.BitLength);
            Assert.AreEqual(0, bs.BitOffset);
            Assert.AreEqual(false, bs.IsWriting);
            Assert.AreEqual(false, bs.IsReading);
            Assert.AreEqual(SerializationMode.None, bs.Mode);
            Assert.AreEqual(IntPtr.Zero, bs.Buffer);
        }
Example #11
0
        public void ZeroLargeTest()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetWrite(8);

            Assert.AreEqual(8, bs.ByteLength);

            bs.Skip(20 << 3);

            Assert.AreEqual(24, bs.ByteLength);
        }
Example #12
0
        public void ResetReadTest1()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetRead(new byte[10]);

            Assert.AreEqual(16, bs.ByteLength);
            Assert.AreEqual(16 << 3, bs.BitLength);
            Assert.AreEqual(0, bs.BitOffset);
            Assert.IsTrue(bs.OwnsBuffer);
            bs.Dispose();
        }
Example #13
0
        public void ExpandTest()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetWrite(7);
            Assert.AreEqual(8, bs.ByteLength);

            bs.WriteLong(1);
            bs.WriteLong(2);

            Assert.AreEqual(16, bs.ByteLength);
        }
Example #14
0
        public void ResetReadTest2()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetRead(new byte[22], 2, 20);

            Assert.Throws <ArgumentOutOfRangeException>(() => bs.ResetRead(new byte[22], 2, 21));

            Assert.AreEqual(24, bs.ByteLength);
            Assert.AreEqual(24 << 3, bs.BitLength);
            Assert.AreEqual(0, bs.BitOffset);
            bs.Dispose();
        }
Example #15
0
        public void ResetReadTest3()
        {
            BitStreamer bs = new BitStreamer();

            Assert.Throws <ArgumentNullException>(() => bs.ResetRead((IntPtr)null, 10));

            IntPtr ptr = Marshal.AllocHGlobal(30);

            bs.ResetRead(ptr, 30, true);

            Assert.AreEqual(32 << 3, bs.BitLength);
            Assert.AreEqual(0, bs.BitOffset);
            bs.Dispose();
        }
Example #16
0
        public void ResetWriteTest1()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetWrite();

            Assert.AreEqual(BitStreamer.DefaultSize, bs.ByteLength);
            IntPtr ptr = bs.Buffer;

            bs.ResetWrite();

            Assert.AreEqual(ptr, bs.Buffer);
            bs.Dispose();
        }
Example #17
0
        public void CopyWithResize()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetWrite(8);

            Assert.AreEqual(8, bs.ByteLength);

            bs.ResetRead(new byte[16]);
            Assert.AreEqual(16, bs.ByteLength);
            Assert.IsTrue(bs.OwnsBuffer);

            bs.Dispose();
        }
Example #18
0
        public void ResetWriteInvalid()
        {
            BitStreamer bs = new BitStreamer();

            IntPtr buff = Memory.Alloc(16);

            *(byte *)buff = 212;

            bs.ResetWrite(8);

            Assert.Throws <InvalidOperationException>(() =>
            {
                bs.ResetWrite(buff, 16);
            });
        }
Example #19
0
        public void ResetReadOffsetTest()
        {
            var arr = new byte[16];

            arr[5] = 123;

            BitStreamer bs = new BitStreamer();

            bs.ResetRead(arr, 5, 10);

            Assert.AreEqual(16, bs.ByteLength);
            Assert.AreEqual(0, bs.ByteOffset);

            Assert.AreEqual(123, bs.ReadByte());
        }
        public void ReadWriteIntTest()
        {
            int         val = 123456789;
            BitStreamer bs  = new BitStreamer();

            bs.ResetWrite(64);

            bs.WriteInt32(val);

            Assert.AreEqual(32, bs.BitOffset);

            bs.ResetRead();

            Assert.AreEqual(val, bs.ReadInt32());
        }
Example #21
0
        public void SizeTest()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetWrite(60);

            // Rounded to next multiple of 8 = 64;
            Assert.AreEqual(64, bs.ByteLength);
            Assert.AreEqual(64 * 8, bs.BitLength);

            bs.WriteInt32(1, 28);
            Assert.AreEqual(28, bs.BitOffset);
            Assert.AreEqual(28 / (double)8, bs.ByteOffset);

            Assert.AreEqual(4, bs.BytesUsed);
        }
Example #22
0
        public unsafe void ReadBufferCopyTest()
        {
            ulong  value = 85830981411525;
            IntPtr buf   = Marshal.AllocHGlobal(8);

            *(ulong *)buf = value;

            BitStreamer reader = new BitStreamer();

            reader.ResetRead(buf, 8, false);

            Assert.AreEqual(64, reader.BitLength);
            Assert.AreEqual(0, reader.BitOffset);

            Assert.AreEqual(value, reader.ReadULong());
        }
Example #23
0
        public void ExpandFailTest()
        {
            BitStreamer bs  = new BitStreamer();
            IntPtr      ptr = Marshal.AllocHGlobal(9);

            bs.ResetWrite(ptr, 9, false);
            Assert.AreEqual(8, bs.ByteLength);

            bs.WriteLong(1);

            Assert.Throws <InvalidOperationException>(() =>
            {
                bs.WriteLong(2);
            });

            Assert.AreEqual(8, bs.ByteLength);
        }
Example #24
0
        public unsafe void WriteBufferCopyTest()
        {
            ulong  value = 666;
            IntPtr buf   = Marshal.AllocHGlobal(8);

            BitStreamer reader = new BitStreamer();

            reader.ResetWrite(buf, 8, false);
            reader.WriteULong(value, 64);

            Assert.AreEqual(64, reader.BitLength);
            Assert.AreEqual(64, reader.BitOffset);

            Assert.AreEqual(value, *(ulong *)reader.Buffer);

            reader.Dispose();
        }
Example #25
0
        public void ResetWriteCopyBufferNull()
        {
            BitStreamer bs = new BitStreamer();

            IntPtr buff = Memory.Alloc(16);

            *(byte *)buff = 212;

            bs.ResetWrite(buff, 16, true);
            Assert.AreEqual(16, bs.ByteLength);
            Assert.AreEqual(16, bs.ByteOffset);

            bs.ResetRead();
            Assert.AreEqual(212, bs.ReadByte());
            Assert.IsTrue(bs.OwnsBuffer);

            Memory.Free(buff);
        }
Example #26
0
        public void BitStream()
        {
            BitStreamer stream = new BitStreamer();

            stream.ResetWrite(m_ptrBuf, SIZE, false);

            for (int i = 0; i < AMOUNT / 2; i++)
            {
                stream.WriteBool(i % 2 == 0);
                stream.WriteInt32(i);
            }

            stream.ResetRead();
            for (int i = 0; i < AMOUNT / 2; i++)
            {
                bool b   = stream.ReadBool();
                int  num = stream.ReadInt32();
            }
        }
Example #27
0
        public void ResetWriteTest2()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetWrite(10);
            IntPtr ptr = bs.Buffer;

            Assert.AreEqual(16, bs.ByteLength);

            bs.ResetWrite(12);
            Assert.AreEqual(16, bs.ByteLength);
            Assert.AreEqual(ptr, bs.Buffer);
            bs.ResetWrite(17);

            Assert.AreEqual(24, bs.ByteLength);

            bs.Dispose();
            Assert.AreEqual(IntPtr.Zero, bs.Buffer);
        }
Example #28
0
        public void DisposeWriterTest()
        {
            BitStreamer bs = new BitStreamer();

            bs.Dispose();

            bs.ResetWrite(16);
            bs.Dispose();
            Assert.AreEqual(IntPtr.Zero, bs.Buffer);

            bs.ResetWrite(18);
            Assert.AreEqual(24, bs.ByteLength);

            bs.Dispose();
            Assert.AreEqual(IntPtr.Zero, bs.Buffer);
            Assert.AreEqual(0, bs.BitLength);
            Assert.AreEqual(0, bs.BitOffset);
            Assert.AreEqual(SerializationMode.None, bs.Mode);
        }
Example #29
0
 public override void DrawBitmap(BitStreamer bs, MonoBrickFirmware.Display.Point p, uint xSize, uint ySize, bool color)
 {
     base.DrawBitmap(bs, p, xSize, ySize, color);
     for (int x = 0; x < xSize; x++)
     {
         for (int y = 0; y < ySize; y++)
         {
             bool isSet = base.IsPixelSet(x + p.X, y + p.Y);
             if (isSet)
             {
                 display.SetPixel(x + p.X, y + p.Y);
             }
             else
             {
                 display.ClearPixel(x + p.X, y + p.Y);
             }
         }
     }
 }
Example #30
0
        public void NonAlignBufferSet()
        {
            IntPtr ptr = Memory.Alloc(12);

            BitStreamer bs = new BitStreamer();

            bs.ResetRead(ptr, 4);

            Assert.AreEqual(4, bs.ByteLength);
            bs.ReadFloat();

            // Should fail because we are exceeding the allowed size of 4.
            Assert.Throws <InvalidOperationException>(() =>
            {
                bs.ReadByte(1);
            });

            bs.ResetWrite();
            Assert.AreEqual(0, bs.ByteLength);
        }
Example #31
0
        public unsafe void SizePrefixTest()
        {
            BitStreamer bs = new BitStreamer();

            bs.ResetWrite(64);

            bs.ReserveSizePrefix();

            Assert.AreEqual(4, bs.ByteOffset);

            // Write some random data.
            var bits = 32;

            for (int i = 0; i < 8; i++)
            {
                bs.WriteInt32(i + 1, 7);
                bits += 7;
            }
            Assert.AreEqual(bits, bs.BitOffset);

            int bytesUsed = bs.BytesUsed;

            // Prefix the size and make sure the offset remains unchanged.
            Assert.AreEqual(bytesUsed, bs.PrefixSize());
            Assert.AreEqual(bits, bs.BitOffset);

            var newbs = new BitStreamer();

            newbs.ResetRead(bs.Buffer, bs.ByteLength, false);

            // Read the length of the buffer.
            // Must be read as uint due to Zig/Zagging of int value.
            Assert.AreEqual(bytesUsed, newbs.ReadUInt32());

            for (int i = 0; i < 8; i++)
            {
                Assert.AreEqual(i + 1, newbs.ReadInt32(7));
            }

            Assert.AreEqual(bs.BitOffset, newbs.BitOffset);
        }