public void TestPutGetBitBuffer() { var b = new BitBuffer(new byte[1024]); var r = new Random(0); for (int i = 0; i < b.data.Length / 4; i++) { b.Put(r.Next()); } for (int i = 0; i < 16; i++) { for (int length = 0; length < 32; length++) { for (int offset = 0; offset < 16; offset++) { var c = new BitBuffer(new byte[(int)Math.Ceiling((offset + length) / 8f)], offset); c.Put(b.GetBitsAt(i, length)); c = c.FromStartToPosition(); CollectionAssert.AreEqual(b.GetBitsAt(i, length).ToArray(), c.ToArray(), "i=" + i + ", length=" + length + ", offset=" + offset); Assert.IsTrue(b.GetBitsAt(i, length).BufferEquals(c), "i=" + i + ", length=" + length + ", offset=" + offset); } } } }
public void TestGetBytes() { for (int i = 0; i < 20; i++) { BitBuffer b = new BitBuffer(new byte[256], i); Random r = new Random(0); for (int j = 0; j < 15; j++) { int expected = r.Next(); b.Put(expected); Assert.AreEqual(expected, b.GetIntAt(32 * j)); } for (int k = 0; k < 20; k++) { byte[] clon = new byte[256]; b.GetBitsAt(0, clon, k, 700); BitBuffer b2 = new BitBuffer(clon); r = new Random(0); for (int j = 0; j < 15; j++) { uint expected = ((uint)r.Next()) << k; uint read = b2.GetUInt(32) & (~0u << k); Assert.AreEqual(expected, read, "offset source=" + i + ", ofset destination=" + k + ", number=" + j); } } } }
public void TestBufferInequality() { var b = new BitBuffer(new byte[1024]); var r = new Random(0); for (int i = 0; i < b.data.Length / 4; i++) { b.Put(r.Next()); } for (int offset = 0; offset < 16; offset++) { for (int i = 0; i < 16; i++) { for (int length = 0; length < 16; length++) { var c = new BitBuffer(new byte[(int)Math.Ceiling((offset + length) / 8f)], offset); for (int p = 0; p < length; p++) { var b2 = c; try { var tmp = b.GetBitsAt(i, length); b2.Put(tmp); b2 = b2.FromStartToPosition(); b2.PutAt(p, !b2.GetBoolAt(p)); CollectionAssert.AreNotEqual(b.GetBitsAt(i, length).ToArray(), b2.ToArray()); Assert.IsFalse(b.GetBitsAt(i, length).BufferEquals(b2)); } catch (Exception e) { throw new Exception("i=" + i + ", length=" + length + ", p=" + p + ", offset=" + offset, e); } } } } } }
public void TestBitBufferPut2() { BitBuffer b = new BitBuffer(new byte[1200]); b.Position = 132; BitBuffer bToPut = new BitBuffer(new byte[1200]); bToPut.Put((byte)0); bToPut.Put((byte)1); bToPut.Put((byte)0); bToPut.Length = bToPut.absPosition; CollectionAssert.AreEqual(new byte[3] { 0, 1, 0 }, bToPut.ToArray()); b.PutAt(132, bToPut); CollectionAssert.AreEqual(new byte[3] { 0, 1, 0 }, b.GetBitsAt(132, 24).ToArray()); }