Fixed BinaryOutputStream bug
This commit is contained in:
parent
50ea517cf3
commit
c894ba8a61
7 changed files with 164 additions and 57 deletions
|
|
@ -50,10 +50,18 @@ public class ByteUtilTest {
|
|||
|
||||
@Test
|
||||
public void getBits(){
|
||||
assertEquals(0x01, ByteUtil.getBits((byte)0xFF, 1));
|
||||
assertEquals(0x0F, ByteUtil.getBits((byte)0xFF, 4));
|
||||
assertEquals((byte)0xFF, ByteUtil.getBits((byte)0xFF, 8));
|
||||
assertEquals(0x01, ByteUtil.getBits((byte)0x11, 1));
|
||||
assertEquals(0x03, ByteUtil.getBits((byte)0x13, 4));
|
||||
assertEquals((byte)0x55, ByteUtil.getBits((byte)0x55, 8));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBitsMSB(){
|
||||
assertEquals(0x01, ByteUtil.getBitsMSB((byte)0x80, 1));
|
||||
assertEquals(0x05, ByteUtil.getBitsMSB((byte)0x52, 4));
|
||||
assertEquals((byte)0x55, ByteUtil.getBitsMSB((byte)0x55, 8));
|
||||
assertEquals((byte)0x03, ByteUtil.getBitsMSB((byte)0xFF, 2));
|
||||
assertEquals((byte)0x0F, ByteUtil.getBitsMSB((byte)0xFF, 4));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -77,7 +85,7 @@ public class ByteUtilTest {
|
|||
|
||||
|
||||
@Test
|
||||
public void toFormattedStringTest(){
|
||||
public void toFormattedString(){
|
||||
byte[] data = new byte[1];
|
||||
assertEquals("000 00 '. '",
|
||||
ByteUtil.toFormattedString(data));
|
||||
|
|
@ -118,4 +126,24 @@ public class ByteUtilTest {
|
|||
assertArrayEquals( new byte[]{0b0000_0001,0b0000_0001,0b0000_0001,0b0000_0001},
|
||||
ByteUtil.shiftLeft(new byte[]{0b0001_0000,0b0001_0000,0b0001_0000,0b0001_0000}, 4));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shiftRight(){
|
||||
assertArrayEquals( new byte[]{},
|
||||
ByteUtil.shiftRight(new byte[]{}, 4));
|
||||
assertArrayEquals( new byte[]{0b0000_0001},
|
||||
ByteUtil.shiftRight(new byte[]{0b0000_0001}, 0));
|
||||
assertArrayEquals( new byte[]{(byte)0b0001_0000},
|
||||
ByteUtil.shiftRight(new byte[]{0b0000_0001}, 4));
|
||||
assertArrayEquals( new byte[]{(byte)0b1000_0000},
|
||||
ByteUtil.shiftRight(new byte[]{0b0000_1000}, 4));
|
||||
assertArrayEquals( new byte[]{0b0000_0000},
|
||||
ByteUtil.shiftRight(new byte[]{(byte)0b0001_0000}, 4));
|
||||
assertArrayEquals( new byte[]{0b0001_0000, 0b0001_0000},
|
||||
ByteUtil.shiftRight(new byte[]{0b0000_0001, 0b0000_0001}, 4));
|
||||
assertArrayEquals( new byte[]{(byte)0b1100_0000, (byte)0b1001_1111},
|
||||
ByteUtil.shiftRight(new byte[]{0b0111_1111, 0b0101_0010}, 6));
|
||||
assertArrayEquals( new byte[]{0b0000_0000,0b0000_0001,0b0000_0001,0b0000_0001},
|
||||
ByteUtil.shiftRight(new byte[]{0b0001_0000,0b0001_0000,0b0001_0000,0b0001_0000}, 4));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,48 +204,48 @@ public class BinaryStructInputStreamTest {
|
|||
|
||||
|
||||
@Test
|
||||
public void shiftBy(){
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(0, 1));
|
||||
assertEquals(1, BinaryStructInputStream.shiftBy(1, 1));
|
||||
assertEquals(3, BinaryStructInputStream.shiftBy(3, 1));
|
||||
assertEquals(4, BinaryStructInputStream.shiftBy(4, 1));
|
||||
assertEquals(5, BinaryStructInputStream.shiftBy(5, 1));
|
||||
assertEquals(6, BinaryStructInputStream.shiftBy(6, 1));
|
||||
assertEquals(7, BinaryStructInputStream.shiftBy(7, 1));
|
||||
public void shiftLeftBy(){
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(0, 1));
|
||||
assertEquals(1, BinaryStructInputStream.shiftLeftBy(1, 1));
|
||||
assertEquals(3, BinaryStructInputStream.shiftLeftBy(3, 1));
|
||||
assertEquals(4, BinaryStructInputStream.shiftLeftBy(4, 1));
|
||||
assertEquals(5, BinaryStructInputStream.shiftLeftBy(5, 1));
|
||||
assertEquals(6, BinaryStructInputStream.shiftLeftBy(6, 1));
|
||||
assertEquals(7, BinaryStructInputStream.shiftLeftBy(7, 1));
|
||||
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(1, 2));
|
||||
assertEquals(2, BinaryStructInputStream.shiftBy(3, 2));
|
||||
assertEquals(6, BinaryStructInputStream.shiftBy(7, 2));
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(1, 2));
|
||||
assertEquals(2, BinaryStructInputStream.shiftLeftBy(3, 2));
|
||||
assertEquals(6, BinaryStructInputStream.shiftLeftBy(7, 2));
|
||||
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(7, 8));
|
||||
assertEquals(2, BinaryStructInputStream.shiftBy(7, 6));
|
||||
assertEquals(3, BinaryStructInputStream.shiftBy(7, 5));
|
||||
assertEquals(6, BinaryStructInputStream.shiftBy(7, 2));
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(7, 8));
|
||||
assertEquals(2, BinaryStructInputStream.shiftLeftBy(7, 6));
|
||||
assertEquals(3, BinaryStructInputStream.shiftLeftBy(7, 5));
|
||||
assertEquals(6, BinaryStructInputStream.shiftLeftBy(7, 2));
|
||||
|
||||
// Cross 1 byte border
|
||||
assertEquals(7, BinaryStructInputStream.shiftBy(0, 2));
|
||||
assertEquals(6, BinaryStructInputStream.shiftBy(1, 4));
|
||||
assertEquals(4, BinaryStructInputStream.shiftBy(3, 8));
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(3, 12));
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(7, 16));
|
||||
assertEquals(7, BinaryStructInputStream.shiftLeftBy(0, 2));
|
||||
assertEquals(6, BinaryStructInputStream.shiftLeftBy(1, 4));
|
||||
assertEquals(4, BinaryStructInputStream.shiftLeftBy(3, 8));
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(3, 12));
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(7, 16));
|
||||
|
||||
// Cross 2 byte borders
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(7, 32));
|
||||
assertEquals(7, BinaryStructInputStream.shiftBy(7, 33));
|
||||
assertEquals(6, BinaryStructInputStream.shiftBy(7, 34));
|
||||
assertEquals(5, BinaryStructInputStream.shiftBy(7, 35));
|
||||
assertEquals(4, BinaryStructInputStream.shiftBy(7, 36));
|
||||
assertEquals(3, BinaryStructInputStream.shiftBy(7, 37));
|
||||
assertEquals(2, BinaryStructInputStream.shiftBy(7, 38));
|
||||
assertEquals(1, BinaryStructInputStream.shiftBy(7, 39));
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(7, 40));
|
||||
assertEquals(7, BinaryStructInputStream.shiftBy(7, 41));
|
||||
assertEquals(6, BinaryStructInputStream.shiftBy(6, 41));
|
||||
assertEquals(5, BinaryStructInputStream.shiftBy(5, 41));
|
||||
assertEquals(4, BinaryStructInputStream.shiftBy(4, 41));
|
||||
assertEquals(3, BinaryStructInputStream.shiftBy(3, 41));
|
||||
assertEquals(2, BinaryStructInputStream.shiftBy(2, 41));
|
||||
assertEquals(1, BinaryStructInputStream.shiftBy(1, 41));
|
||||
assertEquals(0, BinaryStructInputStream.shiftBy(7, 64));
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(7, 32));
|
||||
assertEquals(7, BinaryStructInputStream.shiftLeftBy(7, 33));
|
||||
assertEquals(6, BinaryStructInputStream.shiftLeftBy(7, 34));
|
||||
assertEquals(5, BinaryStructInputStream.shiftLeftBy(7, 35));
|
||||
assertEquals(4, BinaryStructInputStream.shiftLeftBy(7, 36));
|
||||
assertEquals(3, BinaryStructInputStream.shiftLeftBy(7, 37));
|
||||
assertEquals(2, BinaryStructInputStream.shiftLeftBy(7, 38));
|
||||
assertEquals(1, BinaryStructInputStream.shiftLeftBy(7, 39));
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(7, 40));
|
||||
assertEquals(7, BinaryStructInputStream.shiftLeftBy(7, 41));
|
||||
assertEquals(6, BinaryStructInputStream.shiftLeftBy(6, 41));
|
||||
assertEquals(5, BinaryStructInputStream.shiftLeftBy(5, 41));
|
||||
assertEquals(4, BinaryStructInputStream.shiftLeftBy(4, 41));
|
||||
assertEquals(3, BinaryStructInputStream.shiftLeftBy(3, 41));
|
||||
assertEquals(2, BinaryStructInputStream.shiftLeftBy(2, 41));
|
||||
assertEquals(1, BinaryStructInputStream.shiftLeftBy(1, 41));
|
||||
assertEquals(0, BinaryStructInputStream.shiftLeftBy(7, 64));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,11 +25,14 @@
|
|||
package zutil.parser.binary;
|
||||
|
||||
import org.junit.Test;
|
||||
import zutil.converter.Converter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static junit.framework.TestCase.assertEquals;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
|
||||
|
||||
|
|
@ -93,6 +96,27 @@ public class BinaryStructOutputStreamTest {
|
|||
assertArrayEquals(expected, data);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mixedTypeTest() throws IOException {
|
||||
BinaryStruct struct = new BinaryStruct() {
|
||||
@BinaryField(index=1, length=26)
|
||||
private int house = 11_772_006;
|
||||
@BinaryField(index=2, length=1)
|
||||
private boolean group = false;
|
||||
@BinaryField(index=3, length=1)
|
||||
private boolean enable = true;
|
||||
@BinaryField(index=4, length=4)
|
||||
private int unit = 0;
|
||||
};
|
||||
|
||||
byte[] expected = new byte[]{
|
||||
(byte) 0b0010_1100,
|
||||
(byte) 0b1110_1000,
|
||||
(byte) 0b0001_1001,
|
||||
(byte) 0b10_0_1_0000};
|
||||
byte[] actual = BinaryStructOutputStream.serialize(struct);
|
||||
assertArrayEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customBinaryFieldTest() throws IOException {
|
||||
|
|
@ -129,4 +153,5 @@ public class BinaryStructOutputStreamTest {
|
|||
byte[] data = BinaryStructOutputStream.serialize(struct);
|
||||
assertArrayEquals(expected, data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue