/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.f1x.util.parse; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import java.util.Arrays; import static org.junit.Assert.fail; import static org.junit.Assert.assertEquals; public class Test_NumbersParser { //@Test takes too long public void testAllIntNumbers() { for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) { assertIntParser(i); } } @Test public void testSelectedNumbers() { assertIntParser(Integer.MIN_VALUE); assertIntParser(Integer.MIN_VALUE / 2); assertIntParser(0); assertIntParser(Integer.MAX_VALUE / 2); assertIntParser(Integer.MAX_VALUE); assertLongParser(Long.MIN_VALUE); assertLongParser(Long.MIN_VALUE / 2); assertLongParser(0); assertLongParser(Long.MAX_VALUE / 2); assertLongParser(Long.MAX_VALUE); assertDoubleParser(-0.1); assertDoubleParser(0); assertDoubleParser(0.1); assertDoubleParser(Math.PI); assertDoubleParser(3.14159); } @Test public void badInputs () { assertBadIntNumber(""); assertBadIntNumber(" 123"); assertBadIntNumber("123 "); assertBadIntNumber("1-"); assertBadIntNumber("1-2"); assertBadLongNumber(""); assertBadLongNumber(" 123"); assertBadLongNumber("123 "); assertBadLongNumber("1-"); assertBadLongNumber("1-2"); } @Test public void goodInputs () { assertIntNumber("00001", 1); // leading zeros are allowed assertIntNumber("-00001", -1); // leading zeros are allowed assertIntNumber("-0", 0); assertLongNumber("00001", 1); // leading zeros are allowed assertLongNumber("-00001", -1); // leading zeros are allowed assertLongNumber("-0", 0); } @Test @Ignore //TODO public void tooLargeIntegers () { assertBadIntNumber("1234567890123456789012345678901234567890"); assertBadLongNumber("1234567890123456789012345678901234567890"); } private static void assertBadIntNumber(String value) { byte[] valueBytes = value.getBytes(); try { int parsedValue = NumbersParser.parseInt(wrap(valueBytes), 1, valueBytes.length); fail("Parser was expected to fail on \"" + value + "\" but instead it produced: " + parsedValue); } catch (Exception expected) { } } private static void assertIntNumber (String value, int expectedValue) { byte[] valueBytes = value.getBytes(); int parsedValue = NumbersParser.parseInt(wrap(valueBytes), 1, valueBytes.length); Assert.assertEquals(expectedValue, parsedValue); } private static void assertIntParser(int number) { String value = Integer.toString(number); byte[] valueBytes = value.getBytes(); int parsedValue = NumbersParser.parseInt(wrap(valueBytes), 1, valueBytes.length); assertEquals(number, parsedValue); } private static void assertBadLongNumber(String value) { byte[] valueBytes = value.getBytes(); try { long parsedValue = NumbersParser.parseLong(wrap(valueBytes), 1, valueBytes.length); fail("Parser was expected to fail on \"" + value + "\" but instead it produced: " + parsedValue); } catch (Exception expected) { } } private static void assertLongNumber (String value, long expectedValue) { byte[] valueBytes = value.getBytes(); long parsedValue = NumbersParser.parseLong(wrap(valueBytes), 1, valueBytes.length); Assert.assertEquals(expectedValue, parsedValue); } private static void assertLongParser(long number) { String value = Long.toString(number); byte[] valueBytes = value.getBytes(); long parsedValue = NumbersParser.parseLong(wrap(valueBytes), 1, valueBytes.length); assertEquals(number, parsedValue); } private static void assertDoubleParser(double number) { String value = Double.toString(number); byte[] valueBytes = value.getBytes(); double parsedValue = NumbersParser.parseDouble(wrap(valueBytes), 1, valueBytes.length); assertEquals(number, parsedValue, .00001); } private static byte[] wrap(byte[] valueBytes) { //to make it more interesting byte [] result = new byte[valueBytes.length + 2]; Arrays.fill(result, 0, result.length, (byte)'9'); System.arraycopy(valueBytes, 0, result, 1, valueBytes.length); return result; } }