blob: bfe8ac335dd53e2b943ead9dba2ff3c47377299a [file] [log] [blame]
/*
* 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;
}
}