package openmods.calc; import java.math.BigInteger; import openmods.calc.CalcTestUtils.ValueParserHelper; import openmods.calc.types.bigint.BigIntParser; import org.junit.Test; public class BigIntParserTest { public final BigIntParser parser = new BigIntParser(); private final ValueParserHelper<BigInteger> helper = new ValueParserHelper<BigInteger>(parser); @Test public void testBinary() { helper.testBin(BigInteger.ZERO, "0"); helper.testBin(BigInteger.ONE, "1"); helper.testBin(BigInteger.ZERO, "00"); helper.testBin(BigInteger.ZERO, "0_0"); helper.testBin(BigInteger.ZERO, "0__0"); helper.testBin(BigInteger.ONE, "01"); helper.testBin(BigInteger.ONE, "0_1"); helper.testBin(BigInteger.ONE, "0__1"); helper.testBin(BigInteger.valueOf(2), "10"); helper.testBin(BigInteger.valueOf(3), "11"); helper.testBin(BigInteger.valueOf(4), "100"); helper.testBin(BigInteger.valueOf(7), "111"); } @Test public void testOctal() { helper.testOct(BigInteger.ZERO, "0"); helper.testOct(BigInteger.ZERO, "00"); helper.testOct(BigInteger.ZERO, "0_0"); helper.testOct(BigInteger.ZERO, "0__0"); helper.testOct(BigInteger.ONE, "1"); helper.testOct(BigInteger.ONE, "01"); helper.testOct(BigInteger.ONE, "0_1"); helper.testOct(BigInteger.ONE, "0__1"); helper.testOct(BigInteger.valueOf(2), "2"); helper.testOct(BigInteger.valueOf(7), "7"); helper.testOct(BigInteger.valueOf(8), "10"); helper.testOct(BigInteger.valueOf(15), "17"); helper.testOct(BigInteger.valueOf(16), "20"); helper.testOct(BigInteger.valueOf(34), "42"); helper.testOct(BigInteger.valueOf(83), "123"); } @Test public void testDecimal() { helper.testDec(BigInteger.ZERO, "0"); helper.testDec(BigInteger.ZERO, "00"); helper.testDec(BigInteger.ZERO, "0_0"); helper.testDec(BigInteger.ZERO, "0__0"); helper.testDec(BigInteger.ONE, "1"); helper.testDec(BigInteger.ONE, "01"); helper.testDec(BigInteger.ONE, "0_1"); helper.testDec(BigInteger.ONE, "0__1"); helper.testDec(BigInteger.valueOf(2), "2"); helper.testDec(BigInteger.valueOf(9), "9"); helper.testDec(BigInteger.valueOf(10), "10"); helper.testDec(BigInteger.valueOf(19), "19"); helper.testDec(BigInteger.valueOf(20), "20"); helper.testDec(BigInteger.valueOf(42), "42"); helper.testDec(BigInteger.valueOf(123), "123"); } @Test public void testHexadecimal() { helper.testHex(BigInteger.ZERO, "0"); helper.testHex(BigInteger.ZERO, "00"); helper.testHex(BigInteger.ZERO, "0_0"); helper.testHex(BigInteger.ZERO, "0__0"); helper.testHex(BigInteger.ONE, "1"); helper.testHex(BigInteger.ONE, "01"); helper.testHex(BigInteger.ONE, "0_1"); helper.testHex(BigInteger.ONE, "0__1"); helper.testHex(BigInteger.valueOf(2), "2"); helper.testHex(BigInteger.valueOf(10), "A"); helper.testHex(BigInteger.valueOf(15), "F"); helper.testHex(BigInteger.valueOf(16), "10"); helper.testHex(BigInteger.valueOf(31), "1F"); helper.testHex(BigInteger.valueOf(32), "20"); helper.testHex(BigInteger.valueOf(66), "42"); helper.testHex(BigInteger.valueOf(419), "1A3"); } @Test public void testQuotedDecimalZeros() { helper.testQuoted(BigInteger.ZERO, "2#0"); helper.testQuoted(BigInteger.ZERO, "2#00"); helper.testQuoted(BigInteger.ZERO, "3#0"); helper.testQuoted(BigInteger.ZERO, "8#0"); } @Test public void testQuotedDecimalOnes() { helper.testQuoted(BigInteger.ONE, "2#1"); helper.testQuoted(BigInteger.ONE, "2#01"); helper.testQuoted(BigInteger.ONE, "3#1"); helper.testQuoted(BigInteger.ONE, "8#1"); } @Test public void testQuotedDecimalBases() { helper.testQuoted(BigInteger.valueOf(2), "2#10"); helper.testQuoted(BigInteger.valueOf(3), "3#10"); helper.testQuoted(BigInteger.valueOf(4), "4#10"); helper.testQuoted(BigInteger.valueOf(5), "5#10"); helper.testQuoted(BigInteger.valueOf(10), "10#10"); helper.testQuoted(BigInteger.valueOf(16), "16#10"); helper.testQuoted(BigInteger.valueOf(100), "100#10"); } @Test public void testQuotedSeparators() { helper.testQuoted(BigInteger.valueOf(2), "2#1_0"); helper.testQuoted(BigInteger.valueOf(2), "2#1__0"); helper.testQuoted(BigInteger.valueOf(4), "2#1_0_0"); } @Test public void testQuotedDecimalTens() { helper.testQuoted(BigInteger.valueOf(10), "11#A"); helper.testQuoted(BigInteger.valueOf(10), "12#A"); helper.testQuoted(BigInteger.valueOf(10), "13#A"); helper.testQuoted(BigInteger.valueOf(10), "14#A"); helper.testQuoted(BigInteger.valueOf(10), "15#A"); helper.testQuoted(BigInteger.valueOf(10), "16#A"); } @Test public void testQuotedDecimalSingleLargeDigit() { helper.testQuoted(BigInteger.valueOf(10), "11#'10'"); helper.testQuoted(BigInteger.valueOf(10), "12#'10'"); helper.testQuoted(BigInteger.valueOf(10), "13#'10'"); helper.testQuoted(BigInteger.valueOf(10), "14#'10'"); helper.testQuoted(BigInteger.valueOf(10), "15#'10'"); helper.testQuoted(BigInteger.valueOf(10), "16#'10'"); } @Test public void testQuotedDecimalMultipleLargeDigitsSingleQuotes() { helper.testQuoted(BigInteger.valueOf(9 * 11 + 10), "11#'9''10'"); helper.testQuoted(BigInteger.valueOf((9 * 12 + 10) * 12 + 11), "12#'9''10''11'"); helper.testQuoted(BigInteger.valueOf(((9 * 13 + 10) * 13 + 11) * 13 + 12), "13#'9''10''11''12'"); } @Test public void testQuotedDecimalMultipleLargeDigitsDoubleQuotes() { helper.testQuoted(BigInteger.valueOf(9 * 11 + 10), "11#'9\"10'"); helper.testQuoted(BigInteger.valueOf((9 * 12 + 10) * 12 + 11), "12#'9\"10\"11'"); helper.testQuoted(BigInteger.valueOf(((9 * 13 + 10) * 13 + 11) * 13 + 12), "13#'9\"10\"11\"12'"); } @Test public void testQuotedDecimalMixedDigits() { helper.testQuoted(BigInteger.valueOf(666), "16#29'10'"); helper.testQuoted(BigInteger.valueOf((11 * 16 + 5) * 16 + 10), "16#'11'5'10'"); helper.testQuoted(BigInteger.valueOf(16 * 16 * 16), "16#'1'0'0'0"); helper.testQuoted(BigInteger.valueOf((10 * 16 + 11) * 16 + 12), "16#'10\"11'C"); } }