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