From e38fc4242b06a5c251606776b7f4d4e8659b42fa Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Fri, 27 Jul 2018 08:10:50 +0100 Subject: [PATCH] utility to write unsigned shorts --- .../com/muwire/core/util/DataUtil.groovy | 17 +++++++++++ .../com/muwire/core/util/DataUtilTest.groovy | 29 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 core/src/main/groovy/com/muwire/core/util/DataUtil.groovy create mode 100644 core/src/test/groovy/com/muwire/core/util/DataUtilTest.groovy diff --git a/core/src/main/groovy/com/muwire/core/util/DataUtil.groovy b/core/src/main/groovy/com/muwire/core/util/DataUtil.groovy new file mode 100644 index 00000000..bcbc00ff --- /dev/null +++ b/core/src/main/groovy/com/muwire/core/util/DataUtil.groovy @@ -0,0 +1,17 @@ +package com.muwire.core.util + +class DataUtil { + + private static int MAX_SHORT = (0x1 << 16) - 1 + + static writeUnsignedShort(int value, OutputStream os) { + if (value > MAX_SHORT || value < 0) + throw new IllegalArgumentException("$value invalid") + + byte lsb = (byte) (value & 0xFF) + byte msb = (byte) (value >> 8) + + os.write(msb) + os.write(lsb) + } +} diff --git a/core/src/test/groovy/com/muwire/core/util/DataUtilTest.groovy b/core/src/test/groovy/com/muwire/core/util/DataUtilTest.groovy new file mode 100644 index 00000000..869496fe --- /dev/null +++ b/core/src/test/groovy/com/muwire/core/util/DataUtilTest.groovy @@ -0,0 +1,29 @@ +package com.muwire.core.util + +import static org.junit.Assert.fail + +import org.junit.Test + +class DataUtilTest { + + + private static void usVal(int value) { + ByteArrayOutputStream baos = new ByteArrayOutputStream() + DataUtil.writeUnsignedShort(value, baos) + def is = new DataInputStream(new ByteArrayInputStream(baos.toByteArray())) + assert is.readUnsignedShort() == value + } + @Test + void testUnsignedShort() { + usVal(0) + usVal(20) + usVal(Short.MAX_VALUE) + usVal(Short.MAX_VALUE + 1) + usVal(0xFFFF) + + try { + usVal(0xFFFF + 1) + fail() + } catch (IllegalArgumentException expected) {} + } +}