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;
                }
            }
        }
        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);
        }
 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;
     }
 }
        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;
            }
        }
 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;
     }
 }