diff --git a/AlgebraicDataflowArchitectureModel/src/tests/NumberUtilTest.java b/AlgebraicDataflowArchitectureModel/src/tests/NumberUtilTest.java new file mode 100644 index 0000000..31c7f7e --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/tests/NumberUtilTest.java @@ -0,0 +1,48 @@ +package tests; + +import code.ast.NumberUtil; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class NumberUtilTest { + @Test + public void testIsHexNumber() { + // --- Valid format numbers --- + assertTrue("Standard hex", NumberUtil.isHexNumber("0x123456789ABCDEF")); + assertTrue("Mixed case prefix", NumberUtil.isHexNumber("0Xabcdef")); + assertTrue("Hex with underscores", NumberUtil.isHexNumber("0x123_456")); + assertTrue("Hex with long suffix (L)", NumberUtil.isHexNumber("0x123L")); + assertTrue("Hex with long suffix (l)", NumberUtil.isHexNumber("0x123l")); + assertTrue("Minimum valid hex", NumberUtil.isHexNumber("0x0")); + + // --- Invalid format numbers --- + // Null and empty + assertFalse("Null string", NumberUtil.isHexNumber(null)); + assertFalse("Empty string", NumberUtil.isHexNumber("")); + assertFalse("Prefix only", NumberUtil.isHexNumber("0x")); + + // Incorrect prefix + assertFalse("Missing prefix", NumberUtil.isHexNumber("123")); + assertFalse("Invalid prefix (0y)", NumberUtil.isHexNumber("0y123")); + assertFalse("Leading space", NumberUtil.isHexNumber(" 0x123")); + + // Invalid characters + assertFalse("Invalid character (g)", NumberUtil.isHexNumber("0x12g")); + assertFalse("Decimal point", NumberUtil.isHexNumber("0x1.2")); + + // Underscore placement rules + assertFalse("Underscore immediately after prefix", NumberUtil.isHexNumber("0x_123")); + assertFalse("Trailing underscore", NumberUtil.isHexNumber("0x123_")); + assertFalse("Trailing underscore with L", NumberUtil.isHexNumber("0x123_L")); + + // Long suffix rules + assertFalse("L in middle", NumberUtil.isHexNumber("0x1L2")); + assertFalse("Multiple L", NumberUtil.isHexNumber("0x1LL")); + assertFalse("L with invalid char", NumberUtil.isHexNumber("0x1GL")); + + // No digits + assertFalse("No hex digits (0xL)", NumberUtil.isHexNumber("0xL")); + } +}