< prev index next >
test/java/lang/Character/UnicodeBlock/OptimalMapSize.java
Print this page
rev 12026 : [mq]: 8081027-Create-common-test-to-check-adequacy-of-initial-size
@@ -19,54 +19,39 @@
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
/**
* @test
* @bug 8080535
* @summary Expected size of Character.UnicodeBlock.map is not optimal
+ * @library /lib/testlibrary
+ * @build jdk.testlibrary.OptimalCapacity
+ * @run main OptimalMapSize
*/
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.Map;
-
-public class NonOptimalMapSize {
- public static void main(String[] args) throws Throwable {
- Class<?> ubCls = Character.UnicodeBlock.class;
- Field mapField = ubCls.getDeclaredField("map");
- mapField.setAccessible(true);
- Map<?,?> map = (Map<?,?>)mapField.get(null);
- if (!map.getClass().equals(HashMap.class)) {
- throw new RuntimeException(
- "Character.UnicodeBlock.map is expected to be HashMap");
- }
- int mapSize = map.size();
+import jdk.testlibrary.OptimalCapacity;
- Field sizeField = ubCls.getDeclaredField("INITIAL_CAPACITY");
- sizeField.setAccessible(true);
- int INITIAL_CAPACITY = sizeField.getInt(null);
+// What will be the number of the Unicode blocks in the future.
+//
+// According to http://www.unicode.org/versions/Unicode7.0.0/ ,
+// in Unicode 7 there will be added 32 new blocks (96 with aliases).
+// According to http://www.unicode.org/versions/beta-8.0.0.html ,
+// in Unicode 8 there will be added 10 more blocks (30 with aliases).
+//
+// After implementing support of Unicode 7 and 8 in Java, there will
+// be 510+96+30 = 636 entries in Character.UnicodeBlock.map.
+//
+// Initialization of the map and this test will have to be adjusted
+// accordingly then.
- // Construct a HashMap with specified initial capacity
- HashMap<Object,Object> map1 = new HashMap<>(INITIAL_CAPACITY);
- Class<?> hmCls = HashMap.class;
- Field tableField = hmCls.getDeclaredField("table");
- tableField.setAccessible(true);
- // ... and fill it up
- map1.put(new Object(), new Object());
- final Object initialTable = tableField.get(map1);
- while (map1.size() < map.size() &&
- initialTable == tableField.get(map1)) {
- map1.put(new Object(), new Object());
- }
+public class OptimalMapSize {
+ public static void main(String[] args) throws Throwable {
+ // The initial size of Character.UnicodeBlock.map.
+ // See src/java.base/share/classes/java/lang/Character.java
+ int initialCapacity = (int)(510 / 0.75f + 1.0f);
- // Now check that internal storage didn't change
- if (initialTable != tableField.get(map1)) {
- throw new RuntimeException(
- "Initial capacity " + INITIAL_CAPACITY +
- " was only enough to hold " + (map1.size()-1) +
- " entries, but needed " + map.size());
- }
+ OptimalCapacity.ofHashMap(Character.UnicodeBlock.class,
+ "map", initialCapacity);
}
}
< prev index next >