From 103534c8966b12fcb2f415487bd3b30d569ba09f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 24 Jun 2023 19:33:03 +0100 Subject: Split up binary format writing code to match spec --- .../wasm/structure/Leb128EncodingTests.java | 82 --------------------- .../wasm/structure/binary/Leb128EncodingTests.java | 83 ++++++++++++++++++++++ 2 files changed, 83 insertions(+), 82 deletions(-) delete mode 100644 src/test/java/org/shedlang/compiler/backends/wasm/structure/Leb128EncodingTests.java create mode 100644 src/test/java/org/shedlang/compiler/backends/wasm/structure/binary/Leb128EncodingTests.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/structure/Leb128EncodingTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/structure/Leb128EncodingTests.java deleted file mode 100644 index de7f39e9..00000000 --- a/src/test/java/org/shedlang/compiler/backends/wasm/structure/Leb128EncodingTests.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.shedlang.compiler.backends.wasm.structure; - -import org.junit.jupiter.api.Test; - -import java.util.HexFormat; - -import static org.zwobble.precisely.AssertThat.assertThat; -import static org.zwobble.precisely.Matchers.equalTo; - -public class Leb128EncodingTests { - @Test - public void unsignedEncoding() { - assertUnsignedInt32Encoding(0x0, "00"); - assertUnsignedInt32Encoding(0x1, "01"); - assertUnsignedInt32Encoding(0x7F, "7f"); - assertUnsignedInt32Encoding(0x80, "8001"); - assertUnsignedInt32Encoding(0xffffffff, "ffffffff0f"); - } - - private void assertUnsignedInt32Encoding(int value, String expectedHex) { - var writer = new BinaryWriter(); - Leb128Encoding.encodeUnsignedInt32(value, writer); - assertByteArray(writer.toBytes(), expectedHex); - } - - @Test - public void paddedUnsignedEncoding() { - assertPaddedUnsignedInt32Encoding(0x0, "8080808000"); - assertPaddedUnsignedInt32Encoding(0x1, "8180808000"); - assertPaddedUnsignedInt32Encoding(0x7F, "ff80808000"); - assertPaddedUnsignedInt32Encoding(0x80, "8081808000"); - assertPaddedUnsignedInt32Encoding(0xffffffff, "ffffffff0f"); - } - - private void assertPaddedUnsignedInt32Encoding(int value, String expectedHex) { - var writer = new BinaryWriter(); - Leb128Encoding.encodePaddedUnsignedInt32(value, writer); - assertByteArray(writer.toBytes(), expectedHex); - } - - @Test - public void signedEncoding() { - assertSignedInt32Encoding(0x0, "00"); - assertSignedInt32Encoding(0x1, "01"); - assertSignedInt32Encoding(0x3F, "3f"); - assertSignedInt32Encoding(0x40, "c000"); - assertSignedInt32Encoding(0x7F, "ff00"); - assertSignedInt32Encoding(0x80, "8001"); - assertSignedInt32Encoding(-0x1, "7f"); - assertSignedInt32Encoding(-0x40, "40"); - assertSignedInt32Encoding(-0x41, "bf7f"); - } - - private void assertSignedInt32Encoding(int value, String expectedHex) { - var writer = new BinaryWriter(); - Leb128Encoding.encodeSignedInt32(value, writer); - assertByteArray(writer.toBytes(), expectedHex); - } - - @Test - public void paddedSignedEncoding() { - assertPaddedSignedInt32Encoding(0x0, "8080808000"); - assertPaddedSignedInt32Encoding(0x1, "8180808000"); - assertPaddedSignedInt32Encoding(0x3F, "bf80808000"); - assertPaddedSignedInt32Encoding(0x40, "c080808000"); - assertPaddedSignedInt32Encoding(0x7F, "ff80808000"); - assertPaddedSignedInt32Encoding(0x80, "8081808000"); - assertPaddedSignedInt32Encoding(-0x1, "ffffffff7f"); - assertPaddedSignedInt32Encoding(-0x40, "c0ffffff7f"); - assertPaddedSignedInt32Encoding(-0x41, "bfffffff7f"); - } - - private void assertPaddedSignedInt32Encoding(int value, String expectedHex) { - var writer = new BinaryWriter(); - Leb128Encoding.encodePaddedSignedInt32(value, writer); - assertByteArray(writer.toBytes(), expectedHex); - } - - private void assertByteArray(byte[] actual, String expectedHex) { - assertThat(HexFormat.of().formatHex(actual), equalTo(expectedHex)); - } -} 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 new file mode 100644 index 00000000..acb5ab9f --- /dev/null +++ b/src/test/java/org/shedlang/compiler/backends/wasm/structure/binary/Leb128EncodingTests.java @@ -0,0 +1,83 @@ +package org.shedlang.compiler.backends.wasm.structure.binary; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.backends.wasm.structure.BinaryWriter; + +import java.util.HexFormat; + +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class Leb128EncodingTests { + @Test + public void unsignedEncoding() { + assertUnsignedInt32Encoding(0x0, "00"); + assertUnsignedInt32Encoding(0x1, "01"); + assertUnsignedInt32Encoding(0x7F, "7f"); + assertUnsignedInt32Encoding(0x80, "8001"); + assertUnsignedInt32Encoding(0xffffffff, "ffffffff0f"); + } + + private void assertUnsignedInt32Encoding(int value, String expectedHex) { + var writer = new BinaryWriter(); + Leb128Encoding.encodeUnsignedInt32(value, writer); + assertByteArray(writer.toBytes(), expectedHex); + } + + @Test + public void paddedUnsignedEncoding() { + assertPaddedUnsignedInt32Encoding(0x0, "8080808000"); + assertPaddedUnsignedInt32Encoding(0x1, "8180808000"); + assertPaddedUnsignedInt32Encoding(0x7F, "ff80808000"); + assertPaddedUnsignedInt32Encoding(0x80, "8081808000"); + assertPaddedUnsignedInt32Encoding(0xffffffff, "ffffffff0f"); + } + + private void assertPaddedUnsignedInt32Encoding(int value, String expectedHex) { + var writer = new BinaryWriter(); + Leb128Encoding.encodePaddedUnsignedInt32(value, writer); + assertByteArray(writer.toBytes(), expectedHex); + } + + @Test + public void signedEncoding() { + assertSignedInt32Encoding(0x0, "00"); + assertSignedInt32Encoding(0x1, "01"); + assertSignedInt32Encoding(0x3F, "3f"); + assertSignedInt32Encoding(0x40, "c000"); + assertSignedInt32Encoding(0x7F, "ff00"); + assertSignedInt32Encoding(0x80, "8001"); + assertSignedInt32Encoding(-0x1, "7f"); + assertSignedInt32Encoding(-0x40, "40"); + assertSignedInt32Encoding(-0x41, "bf7f"); + } + + private void assertSignedInt32Encoding(int value, String expectedHex) { + var writer = new BinaryWriter(); + Leb128Encoding.encodeSignedInt32(value, writer); + assertByteArray(writer.toBytes(), expectedHex); + } + + @Test + public void paddedSignedEncoding() { + assertPaddedSignedInt32Encoding(0x0, "8080808000"); + assertPaddedSignedInt32Encoding(0x1, "8180808000"); + assertPaddedSignedInt32Encoding(0x3F, "bf80808000"); + assertPaddedSignedInt32Encoding(0x40, "c080808000"); + assertPaddedSignedInt32Encoding(0x7F, "ff80808000"); + assertPaddedSignedInt32Encoding(0x80, "8081808000"); + assertPaddedSignedInt32Encoding(-0x1, "ffffffff7f"); + assertPaddedSignedInt32Encoding(-0x40, "c0ffffff7f"); + assertPaddedSignedInt32Encoding(-0x41, "bfffffff7f"); + } + + private void assertPaddedSignedInt32Encoding(int value, String expectedHex) { + var writer = new BinaryWriter(); + Leb128Encoding.encodePaddedSignedInt32(value, writer); + assertByteArray(writer.toBytes(), expectedHex); + } + + private void assertByteArray(byte[] actual, String expectedHex) { + assertThat(HexFormat.of().formatHex(actual), equalTo(expectedHex)); + } +} -- cgit v1.2.3