diff --git a/src/main/java/com/thealgorithms/conversions/EndianConverter.java b/src/main/java/com/thealgorithms/conversions/EndianConverter.java index d20d9d6d63b5..0d69098e8255 100644 --- a/src/main/java/com/thealgorithms/conversions/EndianConverter.java +++ b/src/main/java/com/thealgorithms/conversions/EndianConverter.java @@ -1,11 +1,23 @@ package com.thealgorithms.conversions; /** - * Converts between big-endian and little-endian formats. - * Big-endian is the most significant byte first, while little-endian is the least significant byte first. - * Big-endian to little-endian: 0x12345678 -> 0x78563412 + * Utility class for converting integers between big-endian and little-endian formats. + *
+ * Endianness defines how byte sequences represent multi-byte data types: + *
+ * Example conversion: + *
Note: Both conversions in this utility are equivalent since reversing the bytes is symmetric.
+ * + *This class only supports 32-bit integers.
* * @author Hardvan */ @@ -13,10 +25,22 @@ public final class EndianConverter { private EndianConverter() { } + /** + * Converts a 32-bit integer from big-endian to little-endian. + * + * @param value the integer in big-endian format + * @return the integer in little-endian format + */ public static int bigToLittleEndian(int value) { return Integer.reverseBytes(value); } + /** + * Converts a 32-bit integer from little-endian to big-endian. + * + * @param value the integer in little-endian format + * @return the integer in big-endian format + */ public static int littleToBigEndian(int value) { return Integer.reverseBytes(value); } diff --git a/src/test/java/com/thealgorithms/conversions/EndianConverterTest.java b/src/test/java/com/thealgorithms/conversions/EndianConverterTest.java index 9598dd163146..85ffa2190962 100644 --- a/src/test/java/com/thealgorithms/conversions/EndianConverterTest.java +++ b/src/test/java/com/thealgorithms/conversions/EndianConverterTest.java @@ -2,21 +2,34 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; public class EndianConverterTest { - @Test - public void testBigToLittleEndian() { - assertEquals(0x78563412, EndianConverter.bigToLittleEndian(0x12345678)); - assertEquals(0x00000000, EndianConverter.bigToLittleEndian(0x00000000)); - assertEquals(0x00000001, EndianConverter.bigToLittleEndian(0x01000000)); + @ParameterizedTest + @CsvSource({ + "0x78563412, 0x12345678", "0x00000000, 0x00000000", "0x00000001, 0x01000000", + "0xFFFFFFFF, 0xFFFFFFFF", // -1 in two's complement + "0x0000007F, 0x7F000000" // Positive boundary case + }) + public void + testLittleToBigEndian(String inputHex, String expectedHex) { + int input = (int) Long.parseLong(inputHex.substring(2), 16); // Convert hex string to int + int expected = (int) Long.parseLong(expectedHex.substring(2), 16); // Convert hex string to int + assertEquals(expected, EndianConverter.littleToBigEndian(input)); } - @Test - public void testLittleToBigEndian() { - assertEquals(0x12345678, EndianConverter.littleToBigEndian(0x78563412)); - assertEquals(0x00000000, EndianConverter.littleToBigEndian(0x00000000)); - assertEquals(0x01000000, EndianConverter.littleToBigEndian(0x00000001)); + @ParameterizedTest + @CsvSource({ + "0x12345678, 0x78563412", "0x00000000, 0x00000000", "0x01000000, 0x00000001", + "0xFFFFFFFF, 0xFFFFFFFF", // -1 in two's complement + "0x7F000000, 0x0000007F" // Positive boundary case + }) + public void + testBigToLittleEndian(String inputHex, String expectedHex) { + int input = (int) Long.parseLong(inputHex.substring(2), 16); // Convert hex string to int + int expected = (int) Long.parseLong(expectedHex.substring(2), 16); // Convert hex string to int + assertEquals(expected, EndianConverter.bigToLittleEndian(input)); } }