@Test
public void testDecode() throws Exception {

    LongCodec codec = new LongCodec();
    // 11111110
    Assert.assertEquals(-2, codec.decode(new byte[] { (byte) 0xfe }, 8), 0);
    // 1111111_ => 11111111
    Assert.assertEquals(-1, codec.decode(new byte[] { (byte) 0xfe }, 7), 0);
    // 11111111 11111110
    Assert.assertEquals(-2, codec.decode(new byte[] { (byte) 0xff, (byte) 0xfe }, 16), 0);
    // 11111111 1111110_ >> 11111111 11111110
    Assert.assertEquals(-2, codec.decode(new byte[] { (byte) 0xff, (byte) 0xfd }, 15), 0);
    Assert.assertEquals(-4, codec.decode(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xfc }, 24), 0);
    Assert.assertEquals(-1024, codec.decode(new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xfc, (byte) 0x00 }, 32), 0);
}