Ejemplo n.º 1
0
        public void TestVectorRoundTripSerialization(float x, float y, float z)
        {
            var v = new Vector3D(x, y, z);

            for (var i = 0; i < 2; ++i)
            {
                var bw = new BitWriter(32);
                v.Serialize(bw);
                var br = new BitReader(bw.GetBits(0, bw.Length).ToArray());
                var v2 = Vector3D.Deserialize(br);

                if (i == 0)
                {
                    // We're generating floats even though these are serialized as ints
                    // So the first time around just check to see if we're at the nearest int
                    Assert.IsTrue(Math.Abs(v.X - v2.X) <= 0.5);
                    Assert.IsTrue(Math.Abs(v.Y - v2.Y) <= 0.5);
                    Assert.IsTrue(Math.Abs(v.Z - v2.Z) <= 0.5);
                }
                else
                {
                    Assert.AreEqual(v.X, v2.X);
                    Assert.AreEqual(v.Y, v2.Y);
                    Assert.AreEqual(v.Z, v2.Z);
                }
                Assert.AreEqual(bw.Length, br.Position);
                v = v2;
            }
        }
Ejemplo n.º 2
0
        public void TestRandomFixedFloatRoundTripSerialization()
        {
            var r = new Random();

            for (int n = 0; n < 1000; ++n)
            {
                var f = (float)((r.NextDouble() * 2) - 1);

                for (var i = 0; i < 2; ++i)
                {
                    var bw = new BitWriter(32);
                    bw.WriteFixedCompressedFloat(f, 1, 16);
                    var br = new BitReader(bw.GetBits(0, bw.Length).ToArray());
                    var f2 = br.ReadFixedCompressedFloat(1, 16);

                    if (i == 0)
                    {
                        // We're generating floats that are probably going to lose precision when serialized.
                        // So the first time around just check to see if we're close.
                        Assert.IsTrue(Math.Abs(f - f2) < 0.0001);
                    }
                    else
                    {
                        Assert.AreEqual(f, f2);
                    }
                    Assert.AreEqual(bw.Length, br.Position);
                    f = f2;
                }
            }
        }
Ejemplo n.º 3
0
        public void TestVectorRoundTripSerializationFromBinary(string binary)
        {
            var br = new BitReader(binary);
            var v  = Vector3D.Deserialize(br);

            var bw = new BitWriter(32);

            v.Serialize(bw);
            var writtenBits = bw.GetBits(0, bw.Length).ToBinaryString();

            Assert.AreEqual(binary, writtenBits);
        }
Ejemplo n.º 4
0
 public void TestUIntMaxRoundTripSerialization(UInt32 value, UInt32 max)
 {
     for (var i = 0; i < 2; ++i)
     {
         var bw = new BitWriter(32);
         bw.Write(value, max);
         var br   = new BitReader(bw.GetBits(0, bw.Length).ToArray());
         var val2 = br.ReadUInt32Max((int)max);
         Assert.AreEqual(value, val2);
         Assert.AreEqual(bw.Length, br.Position);
         value = val2;
     }
 }
Ejemplo n.º 5
0
 public void TestUIntFixedRoundTripSerialization(UInt32 value, int numBits)
 {
     for (var i = 0; i < 2; ++i)
     {
         var bw = new BitWriter(32);
         bw.WriteFixedBitCount(value, numBits);
         var br   = new BitReader(bw.GetBits(0, bw.Length).ToArray());
         var val2 = br.ReadUInt32FromBits(numBits);
         Assert.AreEqual(value, val2);
         Assert.AreEqual(bw.Length, br.Position);
         value = val2;
     }
 }
Ejemplo n.º 6
0
        public void BitConverter()
        {
            /*
             * Unsigned, BE, 12bit "A B C" -> 0x0ABC ->  2748
             * Signed  , BE, 12bit "A B C" -> 0xFABC -> -1348
             * Unsigned, LE, 12bit "B C A" -> 0x0ABC ->  2748
             * Signed  , LE, 12bit "B C A" -> 0xFABC -> -1348
             */

            byte[] val = null;

            val = BitWriter <BigEndian> .GetBytes(0xABC, 0);

            Assert.AreEqual(new byte[] { }, val);
            Assert.AreEqual(0, BigBitWriter.GetUInt64(val, 0));
            Assert.AreEqual(0, BigBitWriter.GetInt64(val, 0));

            val = BitWriter <BigEndian> .GetBytes(0xABC, 12);

            Assert.AreEqual(new byte[] { 0xab, 0xc0 }, val);
            Assert.AreEqual(2748, BigBitWriter.GetUInt64(val, 12));
            Assert.AreEqual(-1348, BigBitWriter.GetInt64(val, 12));

            val = BitWriter <LittleEndian> .GetBytes(0xABC, 0);

            Assert.AreEqual(new byte[] { }, val);
            Assert.AreEqual(0, LittleBitWriter.GetUInt64(val, 0));
            Assert.AreEqual(0, LittleBitWriter.GetInt64(val, 0));

            val = BitWriter <LittleEndian> .GetBytes(0xABC, 12);

            Assert.AreEqual(new byte[] { 0xbc, 0xa0 }, val);
            Assert.AreEqual(2748, LittleBitWriter.GetUInt64(val, 12));
            Assert.AreEqual(-1348, LittleBitWriter.GetInt64(val, 12));

            ulong bits = 0;

            bits = BitWriter <BigEndian> .GetBits(0xABC, 12);

            Assert.AreEqual(0xABC, bits);
            Assert.AreEqual(2748, BigBitWriter.GetUInt64(bits, 12));
            Assert.AreEqual(-1348, BigBitWriter.GetInt64(bits, 12));

            bits = BitWriter <LittleEndian> .GetBits(0xABC, 12);

            Assert.AreEqual(0xBCA, bits);
            Assert.AreEqual(2748, LittleBitWriter.GetUInt64(bits, 12));
            Assert.AreEqual(-1348, LittleBitWriter.GetInt64(bits, 12));
        }