blob: 0f3b76c4eb65bbdb3f493d6601d98df6e28a9267 [file] [log] [blame]
package org.codehaus.jackson.main;
import org.codehaus.jackson.io.NumberInput;
/**
* Set of basic unit tests for verifying that the low-level number
* handling methods work as expected.
*/
public class TestNumberParsing
extends main.BaseTest
{
public void testIntParsing() throws Exception
{
char[] testChars = "123456789".toCharArray();
assertEquals(3, NumberInput.parseInt(testChars, 2, 1));
assertEquals(123, NumberInput.parseInt(testChars, 0, 3));
assertEquals(2345, NumberInput.parseInt(testChars, 1, 4));
assertEquals(9, NumberInput.parseInt(testChars, 8, 1));
assertEquals(456789, NumberInput.parseInt(testChars, 3, 6));
assertEquals(23456, NumberInput.parseInt(testChars, 1, 5));
assertEquals(123456789, NumberInput.parseInt(testChars, 0, 9));
testChars = "32".toCharArray();
assertEquals(32, NumberInput.parseInt(testChars, 0, 2));
testChars = "189".toCharArray();
assertEquals(189, NumberInput.parseInt(testChars, 0, 3));
testChars = "10".toCharArray();
assertEquals(10, NumberInput.parseInt(testChars, 0, 2));
assertEquals(0, NumberInput.parseInt(testChars, 1, 1));
}
public void testIntParsingWithStrings() throws Exception
{
assertEquals(3, NumberInput.parseInt("3"));
assertEquals(0, NumberInput.parseInt("0"));
assertEquals(-3, NumberInput.parseInt("-3"));
assertEquals(27, NumberInput.parseInt("27"));
assertEquals(-31, NumberInput.parseInt("-31"));
assertEquals(271, NumberInput.parseInt("271"));
assertEquals(-131, NumberInput.parseInt("-131"));
assertEquals(2709, NumberInput.parseInt("2709"));
assertEquals(-9999, NumberInput.parseInt("-9999"));
assertEquals(Integer.MIN_VALUE, NumberInput.parseInt(""+Integer.MIN_VALUE));
assertEquals(Integer.MAX_VALUE, NumberInput.parseInt(""+Integer.MAX_VALUE));
}
public void testLongParsing() throws Exception
{
char[] testChars = "123456789012345678".toCharArray();
assertEquals(123456789012345678L, NumberInput.parseLong(testChars, 0, testChars.length));
}
// Unit test for [JACKSON-491]
public void testLongBoundsChecks() throws Exception
{
String minLong = String.valueOf(Long.MIN_VALUE).substring(1);
String maxLong = String.valueOf(Long.MAX_VALUE);
final String VALUE_491 = "1323372036854775807"; // is within range (JACKSON-491)
final String OVERFLOW = "9999999999999999999"; // and this one is clearly out
assertTrue(NumberInput.inLongRange(minLong, true));
assertTrue(NumberInput.inLongRange(maxLong, false));
assertTrue(NumberInput.inLongRange(VALUE_491, true));
assertTrue(NumberInput.inLongRange(VALUE_491, false));
assertFalse(NumberInput.inLongRange(OVERFLOW, false));
assertFalse(NumberInput.inLongRange(OVERFLOW, true));
char[] cbuf = minLong.toCharArray();
assertTrue(NumberInput.inLongRange(cbuf, 0, cbuf.length, true));
cbuf = maxLong.toCharArray();
assertTrue(NumberInput.inLongRange(cbuf, 0, cbuf.length, false));
cbuf = VALUE_491.toCharArray();
assertTrue(NumberInput.inLongRange(cbuf, 0, cbuf.length, true));
assertTrue(NumberInput.inLongRange(cbuf, 0, cbuf.length, false));
cbuf = OVERFLOW.toCharArray();
assertFalse(NumberInput.inLongRange(cbuf, 0, cbuf.length, true));
assertFalse(NumberInput.inLongRange(cbuf, 0, cbuf.length, false));
}
}