Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / tests / NumberUtilTest.java
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"));
		assertTrue("Successive underscores", NumberUtil.isHexNumber("0x123__456"));
		
		// --- 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"));
	}
	
	@Test
	public void testIsBinaryNumber() {
		// --- Valid format numbers ---
		assertTrue("Standard binary", NumberUtil.isBinaryNumber("0b10101010"));
		assertTrue("Mixed case prefix", NumberUtil.isBinaryNumber("0B1100"));
		assertTrue("Binary with underscores", NumberUtil.isBinaryNumber("0b1_0_1"));
		assertTrue("Binary with long suffix (L)", NumberUtil.isBinaryNumber("0b101L"));
		assertTrue("Binary with long suffix (l)", NumberUtil.isBinaryNumber("0b110l"));
		assertTrue("Minimum valid binary", NumberUtil.isBinaryNumber("0b0"));
		assertTrue("Successive underscores", NumberUtil.isBinaryNumber("0b101__010"));
		
		// --- Invalid format numbers ---
		// Null and empty
		assertFalse("Null string", NumberUtil.isBinaryNumber(null));
		assertFalse("Empty string", NumberUtil.isBinaryNumber(""));
		assertFalse("Prefix only", NumberUtil.isBinaryNumber("0b"));
		
		// Incorrect prefix
		assertFalse("Missing prefix", NumberUtil.isBinaryNumber("101"));
		assertFalse("Invalid prefix (0x)", NumberUtil.isBinaryNumber("0x101"));
		assertFalse("Leading space", NumberUtil.isBinaryNumber(" 0b101"));
		
		// Invalid characters
		assertFalse("Invalid character (2)", NumberUtil.isBinaryNumber("0b102"));
		assertFalse("Invalid character (a)", NumberUtil.isBinaryNumber("0b10a"));
		assertFalse("Decimal point", NumberUtil.isBinaryNumber("0b1.0"));
		
		// Underscore placement rules
		assertFalse("Underscore immediately after prefix", NumberUtil.isBinaryNumber("0b_101"));
		assertFalse("Trailing underscore", NumberUtil.isBinaryNumber("0b101_"));
		assertFalse("Trailing underscore with L", NumberUtil.isBinaryNumber("0b101_L"));
		
		// Long suffix rules
		assertFalse("L in middle", NumberUtil.isBinaryNumber("0b1L0"));
		assertFalse("Multiple L", NumberUtil.isBinaryNumber("0b1LL"));
		assertFalse("L with invalid char", NumberUtil.isBinaryNumber("0b12L"));
		
		// No digits
		assertFalse("No binary digits (0bL)", NumberUtil.isBinaryNumber("0bL"));
	}
}