ConcurrentMapperHashMap extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable { @Override public Collection<V> values() { if (values == null) { values = new UnwrapValues(); } return values; } protected  ConcurrentMapperHashMap(
		ConcurrentMap<IK, IV> innerConcurrentMap); @Override void clear(); @Override V compute(
		K key,
		BiFunction<? super K, ? super V, ? extends V> remappingFunction); @Override V computeIfAbsent(
		K key, Function<? super K, ? extends V> mappingFunction); @Override V computeIfPresent(
		K key,
		BiFunction<? super K, ? super V, ? extends V> remappingFunction); @Override boolean containsKey(Object key); @Override boolean containsValue(Object value); @Override Set<Entry<K, V>> entrySet(); @Override V get(Object key); @Override boolean isEmpty(); @Override Set<K> keySet(); @Override V put(K key, V value); @Override void putAll(Map<? extends K, ? extends V> map); @Override V putIfAbsent(K key, V value); @Override V remove(Object key); @Override boolean remove(Object key, Object value); @Override V replace(K key, V value); @Override boolean replace(K key, V oldValue, V newValue); @Override int size(); @Override Collection<V> values();  }
@Test public void testValues() { Collection<Value> values = _concurrentMap.values(); Assert.assertSame(values, _concurrentMap.values()); Assert.assertTrue(values.toString(), values.isEmpty()); Assert.assertFalse(values.toString(), values.contains(new Value(""))); _assertEventQueue(Event.MAP_VALUE_FOR_QUERY); Assert.assertFalse(values.remove(new Value(""))); Assert.assertNull(_concurrentMap.put(_testKey, _testValue1)); _assertEventQueue(Event.MAP_KEY, Event.MAP_VALUE); String valuesString = values.toString(); _assertEventQueue(Event.UNMAP_VALUE_FOR_QUERY); Assert.assertEquals(valuesString, 1, values.size()); Assert.assertTrue(valuesString, values.contains(_testValue1)); _assertEventQueue(Event.MAP_VALUE_FOR_QUERY); Assert.assertFalse(valuesString, values.contains(_testValue2)); _assertEventQueue(Event.MAP_VALUE_FOR_QUERY); Assert.assertFalse(values.remove(_testValue2)); _assertEventQueue(Event.UNMAP_VALUE_FOR_QUERY); Assert.assertTrue(values.remove(_testValue1)); _assertEventQueue(Event.UNMAP_VALUE_FOR_QUERY); Assert.assertNull(_concurrentMap.put(_testKey, _testValue1)); _assertEventQueue(Event.MAP_KEY, Event.MAP_VALUE); Iterator<Value> iterator = values.iterator(); Assert.assertTrue(iterator.hasNext()); Value value = iterator.next(); _assertEventQueue(Event.UNMAP_VALUE_FOR_QUERY); valuesString = values.toString(); _assertEventQueue(Event.UNMAP_VALUE_FOR_QUERY); Assert.assertSame(_testValue1, value); Assert.assertFalse(iterator.hasNext()); Assert.assertTrue(valuesString, values.contains(value)); _assertEventQueue(Event.MAP_VALUE_FOR_QUERY); iterator.remove(); Assert.assertTrue(values.toString(), values.isEmpty()); Assert.assertFalse(values.toString(), values.contains(value)); _assertEventQueue(Event.MAP_VALUE_FOR_QUERY); Assert.assertNull(_concurrentMap.put(_testKey, _testValue1)); _assertEventQueue(Event.MAP_KEY, Event.MAP_VALUE); Assert.assertEquals(values.toString(), 1, values.size()); values.clear(); Assert.assertTrue(_concurrentMap.isEmpty()); }