aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/structure/Leb128EncodingTests.java82
1 files changed, 82 insertions, 0 deletions
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
new file mode 100644
index 00000000..de7f39e9
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/wasm/structure/Leb128EncodingTests.java
@@ -0,0 +1,82 @@
+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));
+ }
+}