/* * Copyright (c) 2008, 2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eike Stepper - initial API and implementation */ package org.eclipse.net4j.util.tests; import org.eclipse.net4j.util.collection.MapEntry; import org.eclipse.net4j.util.collection.MultiMap.ListBased; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * @author Eike Stepper */ public class MultiMapTest extends AbstractOMTest { public void testListBased() throws Exception { ListBased<Integer, String> multiMap = new ListBased<Integer, String>(); assertEquals(true, multiMap.isEmpty()); assertEquals(0, multiMap.size()); assertEquals(false, multiMap.containsKey(1)); assertEquals(false, multiMap.containsValue("value" + 1)); //$NON-NLS-1$ assertEquals(null, multiMap.get(1)); addDelegate(multiMap, 0, 0); assertEquals(true, multiMap.isEmpty()); assertEquals(0, multiMap.size()); assertEquals(false, multiMap.containsKey(1)); assertEquals(false, multiMap.containsValue("value" + 1)); //$NON-NLS-1$ assertEquals(null, multiMap.get(1)); addDelegate(multiMap, 1, 10); addDelegate(multiMap, 11, 10); addDelegate(multiMap, 21, 10); assertEquals(false, multiMap.isEmpty()); assertEquals(30, multiMap.size()); assertEquals(true, multiMap.containsKey(1)); assertEquals(true, multiMap.containsValue("value" + 1)); //$NON-NLS-1$ assertEquals("value" + 1, multiMap.get(1)); //$NON-NLS-1$ assertEquals("value" + 6, multiMap.get(6)); //$NON-NLS-1$ addDelegate(multiMap, 6, 10); assertEquals(false, multiMap.isEmpty()); assertEquals(30, multiMap.size()); assertEquals(true, multiMap.containsKey(1)); assertEquals(true, multiMap.containsValue("value" + 1)); //$NON-NLS-1$ assertEquals("value" + 1, multiMap.get(1)); //$NON-NLS-1$ assertEquals("value" + 6, multiMap.get(6)); //$NON-NLS-1$ assertEquals(null, multiMap.get(35)); addDelegate(multiMap, 26, 10); assertEquals(false, multiMap.isEmpty()); assertEquals(35, multiMap.size()); assertEquals(true, multiMap.containsKey(1)); assertEquals(true, multiMap.containsValue("value" + 1)); //$NON-NLS-1$ assertEquals("value" + 1, multiMap.get(1)); //$NON-NLS-1$ assertEquals("value" + 6, multiMap.get(6)); //$NON-NLS-1$ assertEquals("value" + 35, multiMap.get(35)); //$NON-NLS-1$ } public void testEntrySet() throws Exception { ListBased<Integer, String> multiMap = new ListBased<Integer, String>(); assertEquals(true, multiMap.entrySet().isEmpty()); assertEquals(0, multiMap.entrySet().size()); assertEquals(false, multiMap.entrySet().contains(new MapEntry<Integer, String>(1, "value1"))); //$NON-NLS-1$ addDelegate(multiMap, 0, 0); assertEquals(true, multiMap.entrySet().isEmpty()); assertEquals(0, multiMap.entrySet().size()); assertEquals(false, multiMap.entrySet().contains(new MapEntry<Integer, String>(1, "value1"))); //$NON-NLS-1$ addDelegate(multiMap, 1, 10); addDelegate(multiMap, 11, 10); addDelegate(multiMap, 21, 10); assertEquals(false, multiMap.entrySet().isEmpty()); assertEquals(30, multiMap.entrySet().size()); assertEquals(true, multiMap.entrySet().contains(new MapEntry<Integer, String>(1, "value1"))); //$NON-NLS-1$ addDelegate(multiMap, 6, 10); assertEquals(false, multiMap.entrySet().isEmpty()); assertEquals(30, multiMap.entrySet().size()); assertEquals(true, multiMap.entrySet().contains(new MapEntry<Integer, String>(1, "value1"))); //$NON-NLS-1$ assertEquals(false, multiMap.entrySet().contains(new MapEntry<Integer, String>(35, "value35"))); //$NON-NLS-1$ addDelegate(multiMap, 26, 10); assertEquals(false, multiMap.entrySet().isEmpty()); assertEquals(35, multiMap.entrySet().size()); assertEquals(true, multiMap.entrySet().contains(new MapEntry<Integer, String>(1, "value1"))); //$NON-NLS-1$ assertEquals(true, multiMap.entrySet().contains(new MapEntry<Integer, String>(35, "value35"))); //$NON-NLS-1$ } public void testKeySet() throws Exception { ListBased<Integer, String> multiMap = new ListBased<Integer, String>(); assertEquals(true, multiMap.keySet().isEmpty()); assertEquals(0, multiMap.keySet().size()); assertEquals(false, multiMap.keySet().contains(1)); addDelegate(multiMap, 0, 0); assertEquals(true, multiMap.keySet().isEmpty()); assertEquals(0, multiMap.keySet().size()); assertEquals(false, multiMap.keySet().contains(1)); addDelegate(multiMap, 1, 10); addDelegate(multiMap, 11, 10); addDelegate(multiMap, 21, 10); assertEquals(false, multiMap.keySet().isEmpty()); assertEquals(30, multiMap.keySet().size()); assertEquals(true, multiMap.keySet().contains(1)); addDelegate(multiMap, 6, 10); assertEquals(false, multiMap.keySet().isEmpty()); assertEquals(30, multiMap.keySet().size()); assertEquals(true, multiMap.keySet().contains(1)); assertEquals(false, multiMap.keySet().contains(35)); addDelegate(multiMap, 26, 10); assertEquals(false, multiMap.keySet().isEmpty()); assertEquals(35, multiMap.keySet().size()); assertEquals(true, multiMap.keySet().contains(1)); assertEquals(true, multiMap.keySet().contains(35)); } public void testValues() throws Exception { ListBased<Integer, String> multiMap = new ListBased<Integer, String>(); assertEquals(true, multiMap.values().isEmpty()); assertEquals(0, multiMap.values().size()); assertEquals(false, multiMap.values().contains("value1")); //$NON-NLS-1$ addDelegate(multiMap, 0, 0); assertEquals(true, multiMap.values().isEmpty()); assertEquals(0, multiMap.values().size()); assertEquals(false, multiMap.values().contains("value1")); //$NON-NLS-1$ addDelegate(multiMap, 1, 10); addDelegate(multiMap, 11, 10); addDelegate(multiMap, 21, 10); assertEquals(false, multiMap.values().isEmpty()); assertEquals(30, multiMap.values().size()); assertEquals(true, multiMap.values().contains("value1")); //$NON-NLS-1$ addDelegate(multiMap, 6, 10); assertEquals(false, multiMap.values().isEmpty()); assertEquals(30, multiMap.values().size()); assertEquals(true, multiMap.values().contains("value1")); //$NON-NLS-1$ assertEquals(false, multiMap.values().contains("value35")); //$NON-NLS-1$ addDelegate(multiMap, 26, 10); assertEquals(false, multiMap.values().isEmpty()); assertEquals(35, multiMap.values().size()); assertEquals(true, multiMap.values().contains("value1")); //$NON-NLS-1$ assertEquals(true, multiMap.values().contains("value35")); //$NON-NLS-1$ } public void testEntrySetIterator() throws Exception { ListBased<Integer, String> multiMap = new ListBased<Integer, String>(); assertIterator(new HashSet<Object>(), multiMap.entrySet()); addDelegate(multiMap, 0, 0); assertIterator(new HashSet<Object>(), multiMap.entrySet()); addDelegate(multiMap, 1, 10); addDelegate(multiMap, 11, 10); addDelegate(multiMap, 21, 10); assertIterator(createMapEntries(1, 30), multiMap.entrySet()); addDelegate(multiMap, 6, 10); assertIterator(createMapEntries(1, 30), multiMap.entrySet()); addDelegate(multiMap, 26, 10); assertIterator(createMapEntries(1, 35), multiMap.entrySet()); } public void testKeySetIterator() throws Exception { ListBased<Integer, String> multiMap = new ListBased<Integer, String>(); assertIterator(new HashSet<Object>(), multiMap.keySet()); addDelegate(multiMap, 0, 0); assertIterator(new HashSet<Object>(), multiMap.keySet()); addDelegate(multiMap, 1, 10); addDelegate(multiMap, 11, 10); addDelegate(multiMap, 21, 10); assertIterator(createKeys(1, 30), multiMap.keySet()); addDelegate(multiMap, 6, 10); assertIterator(createKeys(1, 30), multiMap.keySet()); addDelegate(multiMap, 26, 10); assertIterator(createKeys(1, 35), multiMap.keySet()); } public void testValuesIterator() throws Exception { ListBased<Integer, String> multiMap = new ListBased<Integer, String>(); assertIterator(new HashSet<Object>(), multiMap.values()); addDelegate(multiMap, 0, 0); assertIterator(new HashSet<Object>(), multiMap.values()); addDelegate(multiMap, 1, 10); addDelegate(multiMap, 11, 10); addDelegate(multiMap, 21, 10); assertIterator(createValues(1, 30), multiMap.values()); addDelegate(multiMap, 6, 10); assertIterator(createValues(1, 30), multiMap.values()); addDelegate(multiMap, 26, 10); assertIterator(createValues(1, 35), multiMap.values()); } private void addDelegate(ListBased<Integer, String> multiMap, int start, int count) { Map<Integer, String> map = new HashMap<Integer, String>(); for (int i = 0; i < count; i++) { int key = start + i; map.put(key, "value" + key); //$NON-NLS-1$ } multiMap.getDelegates().add(map); } private void assertIterator(Set<?> expectedObjects, Collection<?> actualObjects) { for (Object actualObject : actualObjects) { if (!expectedObjects.remove(actualObject)) { fail("Unexpected object: " + actualObject); //$NON-NLS-1$ } } if (!expectedObjects.isEmpty()) { fail("Missing objects: " + expectedObjects); //$NON-NLS-1$ } } private Set<Object> createMapEntries(int start, int count) { Set<Object> result = new HashSet<Object>(); for (int i = 0; i < count; i++) { int key = start + i; result.add(new MapEntry<Integer, String>(key, "value" + key)); //$NON-NLS-1$ } return result; } private Set<Object> createKeys(int start, int count) { Set<Object> result = new HashSet<Object>(); for (int i = 0; i < count; i++) { int key = start + i; result.add(key); } return result; } private Set<Object> createValues(int start, int count) { Set<Object> result = new HashSet<Object>(); for (int i = 0; i < count; i++) { int key = start + i; result.add("value" + key); //$NON-NLS-1$ } return result; } }