From f57079390c546757fc36c296499bea13b7ec162f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 27 Dec 2023 15:36:00 +0000 Subject: Add LEB128 encoding for padded 64-bit ints --- .../wasm/structure/binary/Leb128EncodingTests.java | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/structure/binary/Leb128EncodingTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/structure/binary/Leb128EncodingTests.java index f9ef502d..270bcb44 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/structure/binary/Leb128EncodingTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/structure/binary/Leb128EncodingTests.java @@ -77,6 +77,21 @@ public class Leb128EncodingTests { assertByteArray(writer.toBytes(), expectedHex); } + @Test + public void paddedUnsignedInt64Encoding() { + assertPaddedUnsignedInt64Encoding(0x00, "80808080808080808000"); + assertPaddedUnsignedInt64Encoding(0x01, "81808080808080808000"); + assertPaddedUnsignedInt64Encoding(0x7F, "ff808080808080808000"); + assertPaddedUnsignedInt64Encoding(0x80, "80818080808080808000"); + assertPaddedUnsignedInt64Encoding(Long.MAX_VALUE, "ffffffffffffffffff00"); + } + + private void assertPaddedUnsignedInt64Encoding(long value, String expectedHex) { + var writer = new BinaryWriter(); + Leb128Encoding.encodePaddedUnsignedInt64(value, writer); + assertByteArray(writer.toBytes(), expectedHex); + } + @Test public void signedInt64Encoding() { assertSignedInt64Encoding(0x0, "00"); @@ -98,6 +113,27 @@ public class Leb128EncodingTests { assertByteArray(writer.toBytes(), expectedHex); } + @Test + public void paddedSignedInt64Encoding() { + assertPaddedSignedInt64Encoding(0x00, "80808080808080808000"); + assertPaddedSignedInt64Encoding(0x01, "81808080808080808000"); + assertPaddedSignedInt64Encoding(0x3F, "bf808080808080808000"); + assertPaddedSignedInt64Encoding(0x40, "c0808080808080808000"); + assertPaddedSignedInt64Encoding(0x7F, "ff808080808080808000"); + assertPaddedSignedInt64Encoding(0x80, "80818080808080808000"); + assertPaddedSignedInt64Encoding(-0x1, "ffffffffffffffffff7f"); + assertPaddedSignedInt64Encoding(-0x40, "c0ffffffffffffffff7f"); + assertPaddedSignedInt64Encoding(-0x41, "bfffffffffffffffff7f"); + assertPaddedSignedInt64Encoding(Long.MAX_VALUE, "ffffffffffffffffff00"); + assertPaddedSignedInt64Encoding(Long.MIN_VALUE, "8080808080808080807f"); + } + + private void assertPaddedSignedInt64Encoding(long value, String expectedHex) { + var writer = new BinaryWriter(); + Leb128Encoding.encodePaddedSignedInt64(value, writer); + assertByteArray(writer.toBytes(), expectedHex); + } + private void assertByteArray(byte[] actual, String expectedHex) { assertThat(HexFormat.of().formatHex(actual), equalTo(expectedHex)); } -- cgit v1.2.3