< prev index next >

test/jdk/java/util/Map/InPlaceOpsCollisions.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 25,39 **** --- 25,47 ---- * @test * @bug 8005698 * @run testng/othervm -Dtest.map.collisions.shortrun=true InPlaceOpsCollisions * @summary Ensure overrides of in-place operations in Maps behave well with lots of collisions. */ + + import java.util.Arrays; + import java.util.Comparator; + import java.util.HashMap; + import java.util.Iterator; + import java.util.LinkedHashMap; import java.util.Map; + import java.util.TreeMap; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; + import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull;
*** 69,78 **** --- 77,99 ---- } assertEquals(map.size(), keys.length, String.format("map expected size m%d != k%d", map.size(), keys.length)); } + @Test(dataProvider = "nullValueFriendlyMaps") + void testPutIfAbsentOverwriteNull(String desc, Supplier<Map<Object, Object>> ms) { + Map<Object, Object> map = ms.get(); + map.put("key", null); + assertEquals(map.size(), 1, desc + ": size != 1"); + assertTrue(map.containsKey("key"), desc + ": does not have key"); + assertNull(map.get("key"), desc + ": value is not null"); + map.putIfAbsent("key", "value"); // must rewrite + assertEquals(map.size(), 1, desc + ": size != 1"); + assertTrue(map.containsKey("key"), desc + ": does not have key"); + assertEquals(map.get("key"), "value", desc + ": value is not 'value'"); + } + @Test(dataProvider = "mapsWithObjectsAndStrings") void testRemoveMapping(String desc, Supplier<Map<Object, Object>> ms, Object val) { Map<Object, Object> map = ms.get(); Object[] keys = map.keySet().toArray(); boolean removed;
*** 494,499 **** --- 515,529 ---- map.put(keys[i], val); } } } + @DataProvider + public Iterator<Object[]> nullValueFriendlyMaps() { + return Arrays.asList( + new Object[]{"HashMap", (Supplier<Map<?, ?>>) HashMap::new}, + new Object[]{"LinkedHashMap", (Supplier<Map<?, ?>>) LinkedHashMap::new}, + new Object[]{"TreeMap", (Supplier<Map<?, ?>>) TreeMap::new}, + new Object[]{"TreeMap(cmp)", (Supplier<Map<?, ?>>) () -> new TreeMap<>(Comparator.reverseOrder())} + ).iterator(); + } }
< prev index next >