test/java/lang/Long/ParsingTest.java

Print this page
rev 9925 : 8041972: Add improved parse/format methods for Long/Integer
Contributed-by: redestad

*** 26,35 **** --- 26,37 ---- * @bug 5017980 6576055 * @summary Test parsing methods * @author Joseph D. Darcy */ + import sun.misc.SharedSecrets; + import sun.misc.JavaLangAccess; /** * There are six methods in java.lang.Long which transform strings * into a long or Long value: *
*** 41,53 **** --- 43,62 ---- * public static Long valueOf(String s) * * Besides decode, all the methods and constructor call down into * parseLong(String, int) to do the actual work. Therefore, the * behavior of parseLong(String, int) will be tested here. + * + * Internally, parseLong(String, int, int, int) has been added to + * support parsing subsequences without explicit substrings. These will also + * be tested here */ public class ParsingTest { + + private static JavaLangAccess jla = SharedSecrets.getJavaLangAccess(); + public static void main(String... argv) { check("+100", +100L); check("-100", -100L); check("+0", 0L);
*** 70,85 **** checkFailure("++100"); checkFailure("--100"); checkFailure("+-6"); checkFailure("-+6"); checkFailure("*100"); } private static void check(String val, long expected) { long n = Long.parseLong(val); if (n != expected) ! throw new RuntimeException("Long.parsedLong failed. String:" + val + " Result:" + n); } private static void checkFailure(String val) { long n = 0L; --- 79,105 ---- checkFailure("++100"); checkFailure("--100"); checkFailure("+-6"); checkFailure("-+6"); checkFailure("*100"); + + check("test-00000", 0L, 4, 10); + check("test-12345", -12345L, 4, 10); + check("xx12345yy", 12345L, 2, 7); + check("xx123456789012345yy", 123456789012345L, 2, 17); + + checkFailure("+00000", 0, 7); + checkFailure("-00000", 0, 7); + checkFailure("-00000", 6, 6); + checkFailure("-00000", 6, 0); + checkFailure("+-6", 0, 3); } private static void check(String val, long expected) { long n = Long.parseLong(val); if (n != expected) ! throw new RuntimeException("Long.parseLong failed. String:" + val + " Result:" + n); } private static void checkFailure(String val) { long n = 0L;
*** 89,94 **** --- 109,132 ---- throw new RuntimeException(); } catch (NumberFormatException nfe) { ; // Expected } } + + private static void checkFailure(String val, int start, int end) { + long n = 0L; + try { + n = jla.parseLong(val, 10, start, end); + System.err.println("parseLong(" + val + ") incorrectly returned " + n); + throw new RuntimeException(); + } catch (NumberFormatException nfe) { + ; // Expected + } + } + + private static void check(String val, long expected, int start, int end) { + long n = jla.parseLong(val, 10, start, end); + if (n != expected) + throw new RuntimeException("Long.parseLong failed. String:" + + val + " Result:" + n); + } }