public void StreamUtils_EncodeDecodeSafeSynchInt() { Random rnd = new Random(DateTime.Now.Millisecond); int ticks = rnd.Next(0, (int)(Math.Floor(Math.Pow(2, 28) / 2) - 1)); // 4-byte synchsafe (28 bits) byte[] encoded = StreamUtils.EncodeSynchSafeInt(ticks, 4); int decoded = StreamUtils.DecodeSynchSafeInt(encoded); Assert.AreEqual(ticks, decoded); ticks = rnd.Next(0, (int)(Math.Floor(Math.Pow(2, 32) / 2) - 1)); // 5-byte synchsafe (32 bits) encoded = StreamUtils.EncodeSynchSafeInt(ticks, 5); decoded = StreamUtils.DecodeSynchSafeInt(encoded); Assert.AreEqual(ticks, decoded); int test = 0x0000FFFF; encoded = StreamUtils.EncodeSynchSafeInt(test, 4); Assert.AreEqual(0x7F, encoded[3]); Assert.AreEqual(0x7F, encoded[2]); Assert.AreEqual(0x03, encoded[1]); Assert.AreEqual(0x00, encoded[0]); Assert.AreEqual(test, StreamUtils.DecodeSynchSafeInt(encoded)); test = 0x04ADD3AC; encoded = StreamUtils.EncodeSynchSafeInt32(test); Assert.AreEqual(0x2C, encoded[3]); Assert.AreEqual(0x27, encoded[2]); Assert.AreEqual(0x37, encoded[1]); Assert.AreEqual(0x25, encoded[0]); Assert.AreEqual(test, StreamUtils.DecodeSynchSafeInt32(encoded)); }