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);
+ }
}