scolebourne 2003/10/30 17:26:25
Modified: collections/src/test/org/apache/commons/collections/decorators
TestFixedSizeSortedMap.java
TestTransformedSortedMap.java
collections/src/java/org/apache/commons/collections
AbstractDualBidiMap.java
collections/src/test/org/apache/commons/collections
TestAll.java
Added: collections/src/java/org/apache/commons/collections
DualTreeBidiMap.java
collections/src/test/org/apache/commons/collections
AbstractTestSortedBidiMap.java
TestDualTreeBidiMap.java
Log:
Add DualTreeBidiMap implementation and tests
Revision Changes Path
1.6 +4 -4
jakarta-commons/collections/src/test/org/apache/commons/collections/decorators/TestFixedSizeSortedMap.java
Index: TestFixedSizeSortedMap.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/decorators/TestFixedSizeSortedMap.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestFixedSizeSortedMap.java 7 Oct 2003 22:20:58 -0000 1.5
+++ TestFixedSizeSortedMap.java 31 Oct 2003 01:26:25 -0000 1.6
@@ -62,9 +62,9 @@
import java.util.TreeMap;
import junit.framework.Test;
-import junit.framework.TestSuite;
import org.apache.commons.collections.AbstractTestSortedMap;
+import org.apache.commons.collections.BulkTest;
/**
* Extension of [EMAIL PROTECTED] TestSortedMap} for exercising the [EMAIL
PROTECTED] FixedSizeSortedMap}
@@ -82,7 +82,7 @@
}
public static Test suite() {
- return new TestSuite(TestFixedSizeSortedMap.class);
+ return BulkTest.makeSuite(TestFixedSizeSortedMap.class);
}
public static void main(String args[]) {
1.5 +4 -4
jakarta-commons/collections/src/test/org/apache/commons/collections/decorators/TestTransformedSortedMap.java
Index: TestTransformedSortedMap.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/decorators/TestTransformedSortedMap.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TestTransformedSortedMap.java 6 Oct 2003 23:44:23 -0000 1.4
+++ TestTransformedSortedMap.java 31 Oct 2003 01:26:25 -0000 1.5
@@ -62,9 +62,9 @@
import java.util.TreeMap;
import junit.framework.Test;
-import junit.framework.TestSuite;
import org.apache.commons.collections.AbstractTestSortedMap;
+import org.apache.commons.collections.BulkTest;
/**
* Extension of [EMAIL PROTECTED] AbstractTestSortedMap} for exercising the [EMAIL
PROTECTED] TransformedSortedMap}
@@ -82,7 +82,7 @@
}
public static Test suite() {
- return new TestSuite(TestTransformedSortedMap.class);
+ return BulkTest.makeSuite(TestTransformedSortedMap.class);
}
public static void main(String args[]) {
1.5 +82 -10
jakarta-commons/collections/src/java/org/apache/commons/collections/AbstractDualBidiMap.java
Index: AbstractDualBidiMap.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/AbstractDualBidiMap.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- AbstractDualBidiMap.java 29 Oct 2003 00:06:25 -0000 1.4
+++ AbstractDualBidiMap.java 31 Oct 2003 01:26:25 -0000 1.5
@@ -94,6 +94,10 @@
*/
protected transient Set keySet = null;
/**
+ * View of the values.
+ */
+ protected transient Collection values = null;
+ /**
* View of the entries.
*/
protected transient Set entrySet = null;
@@ -248,7 +252,10 @@
}
public Collection values() {
- return inverseBidiMap().keySet();
+ if (values == null) {
+ values = new Values(this);
+ }
+ return values;
}
public Set entrySet() {
@@ -304,12 +311,13 @@
}
return modified;
}
-
+
public void clear() {
map.clear();
}
}
+ //-----------------------------------------------------------------------
/**
* Inner class KeySet.
*/
@@ -323,8 +331,12 @@
return new KeySetIterator(super.iterator(), map);
}
+ public boolean contains(Object key) {
+ return map.maps[0].containsKey(key);
+ }
+
public boolean remove(Object key) {
- if (contains(key)) {
+ if (map.maps[0].containsKey(key)) {
Object value = map.maps[0].remove(key);
map.maps[1].remove(value);
return true;
@@ -339,7 +351,7 @@
protected static class KeySetIterator extends AbstractIteratorDecorator {
private final AbstractDualBidiMap map;
- private Object last = null;
+ private Object lastKey = null;
private boolean canRemove = false;
protected KeySetIterator(Iterator iterator, AbstractDualBidiMap map) {
@@ -348,23 +360,83 @@
}
public Object next() {
- last = super.next();
+ lastKey = super.next();
canRemove = true;
- return last;
+ return lastKey;
}
public void remove() {
if (canRemove == false) {
throw new IllegalStateException("Iterator remove() can only be
called once after next()");
}
- Object value = map.maps[0].get(last);
+ Object value = map.maps[0].get(lastKey);
super.remove();
map.maps[1].remove(value);
- last = null;
+ lastKey = null;
+ canRemove = false;
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Inner class Values.
+ */
+ protected static class Values extends View implements Set {
+
+ protected Values(AbstractDualBidiMap map) {
+ super(map.maps[0].values(), map);
+ }
+
+ public Iterator iterator() {
+ return new ValuesIterator(super.iterator(), map);
+ }
+
+ public boolean contains(Object value) {
+ return map.maps[1].containsKey(value);
+ }
+
+ public boolean remove(Object value) {
+ if (map.maps[1].containsKey(value)) {
+ Object key = map.maps[1].remove(value);
+ map.maps[0].remove(key);
+ return true;
+ }
+ return false;
+ }
+ }
+
+ /**
+ * Inner class ValuesIterator.
+ */
+ protected static class ValuesIterator extends AbstractIteratorDecorator {
+
+ private final AbstractDualBidiMap map;
+ private Object lastValue = null;
+ private boolean canRemove = false;
+
+ protected ValuesIterator(Iterator iterator, AbstractDualBidiMap map) {
+ super(iterator);
+ this.map = map;
+ }
+
+ public Object next() {
+ lastValue = super.next();
+ canRemove = true;
+ return lastValue;
+ }
+
+ public void remove() {
+ if (canRemove == false) {
+ throw new IllegalStateException("Iterator remove() can only be
called once after next()");
+ }
+ super.remove(); // removes from maps[0]
+ map.maps[1].remove(lastValue);
+ lastValue = null;
canRemove = false;
}
}
+ //-----------------------------------------------------------------------
/**
* Inner class EntrySet.
*/
1.1
jakarta-commons/collections/src/java/org/apache/commons/collections/DualTreeBidiMap.java
Index: DualTreeBidiMap.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/DualTreeBidiMap.java,v
1.1 2003/10/31 01:26:25 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
import java.util.Comparator;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.commons.collections.decorators.AbstractSortedMapDecorator;
/**
* Implementation of <code>BidiMap</code> that uses two <code>TreeMap</code>
instances.
*
* @since Commons Collections 3.0
* @version $Id: DualTreeBidiMap.java,v 1.1 2003/10/31 01:26:25 scolebourne Exp $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
*/
public class DualTreeBidiMap extends AbstractDualBidiMap implements SortedBidiMap {
/**
* Creates an empty <code>DualTreeBidiMap</code>
*/
public DualTreeBidiMap() {
super();
}
/**
* Constructs a <code>DualTreeBidiMap</code> and copies the mappings from
* specified <code>Map</code>.
*
* @param map the map whose mappings are to be placed in this map
*/
public DualTreeBidiMap(Map map) {
super();
putAll(map);
}
/**
* Constructs a <code>HashBidiMap</code> that decorates the specified maps.
*
* @param normalMap the normal direction map
* @param reverseMap the reverse direction map
* @param inverseBidiMap the inverse BidiMap
*/
protected DualTreeBidiMap(Map normalMap, Map reverseMap, BidiMap inverseBidiMap)
{
super(normalMap, reverseMap, inverseBidiMap);
}
/**
* Creates a new instance of the map used by the subclass to store data.
*
* @return the map to be used for internal storage
*/
protected Map createMap() {
return new TreeMap();
}
/**
* Creates a new instance of this object.
*
* @param normalMap the normal direction map
* @param reverseMap the reverse direction map
* @param inverseBidiMap the inverse BidiMap
* @return new bidi map
*/
protected BidiMap createBidiMap(Map normalMap, Map reverseMap, BidiMap
inverseMap) {
return new DualTreeBidiMap(normalMap, reverseMap, inverseMap);
}
// SortedBidiMap
//-----------------------------------------------------------------------
public SortedBidiMap inverseSortedBidiMap() {
return (SortedBidiMap) inverseBidiMap();
}
// SortedMap
//-----------------------------------------------------------------------
public Comparator comparator() {
return ((SortedMap) maps[0]).comparator();
}
public Object firstKey() {
return ((SortedMap) maps[0]).firstKey();
}
public Object lastKey() {
return ((SortedMap) maps[0]).lastKey();
}
//-----------------------------------------------------------------------
public SortedMap headMap(Object toKey) {
SortedMap sub = ((SortedMap) maps[0]).headMap(toKey);
return new ViewMap(this, sub);
}
public SortedMap tailMap(Object fromKey) {
SortedMap sub = ((SortedMap) maps[0]).tailMap(fromKey);
return new ViewMap(this, sub);
}
public SortedMap subMap(Object fromKey, Object toKey) {
SortedMap sub = ((SortedMap) maps[0]).subMap(fromKey, toKey);
return new ViewMap(this, sub);
}
protected static class ViewMap extends AbstractSortedMapDecorator {
final DualTreeBidiMap bidi;
protected ViewMap(DualTreeBidiMap bidi, SortedMap sm) {
super((SortedMap) bidi.createBidiMap(sm, bidi.maps[1],
bidi.inverseBidiMap));
this.bidi = (DualTreeBidiMap) map;
}
public boolean containsValue(Object value) {
// override as default implementation jumps to [1]
return bidi.maps[0].containsValue(value);
}
public SortedMap headMap(Object toKey) {
return new ViewMap(bidi, super.headMap(toKey));
}
public SortedMap tailMap(Object fromKey) {
return new ViewMap(bidi, super.tailMap(fromKey));
}
public SortedMap subMap(Object fromKey, Object toKey) {
return new ViewMap(bidi, super.subMap(fromKey, toKey));
}
}
}
1.52 +4 -3
jakarta-commons/collections/src/test/org/apache/commons/collections/TestAll.java
Index: TestAll.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestAll.java,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- TestAll.java 28 Oct 2003 18:56:12 -0000 1.51
+++ TestAll.java 31 Oct 2003 01:26:25 -0000 1.52
@@ -96,6 +96,8 @@
suite.addTest(TestCommonsLinkedList.suite());
suite.addTest(TestCursorableLinkedList.suite());
suite.addTest(TestDoubleOrderedMap.suite());
+ suite.addTest(TestDualHashBidiMap.suite());
+ suite.addTest(TestDualTreeBidiMap.suite());
suite.addTest(TestExtendedProperties.suite());
suite.addTest(TestFastArrayList.suite());
suite.addTest(TestFastArrayList1.suite());
@@ -104,7 +106,6 @@
suite.addTest(TestFastTreeMap.suite());
suite.addTest(TestFastTreeMap1.suite());
suite.addTest(TestHashBag.suite());
- suite.addTest(TestDualHashBidiMap.suite());
suite.addTest(TestIteratorUtils.suite());
suite.addTest(TestLRUMap.suite());
suite.addTest(TestMultiHashMap.suite());
1.1
jakarta-commons/collections/src/test/org/apache/commons/collections/AbstractTestSortedBidiMap.java
Index: AbstractTestSortedBidiMap.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/AbstractTestSortedBidiMap.java,v
1.1 2003/10/31 01:26:25 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import org.apache.commons.collections.pairs.DefaultMapEntry;
/**
* Abstract test class for [EMAIL PROTECTED] BidiMap} methods and contracts.
*
* @version $Revision: 1.1 $ $Date: 2003/10/31 01:26:25 $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
*/
public abstract class AbstractTestSortedBidiMap extends AbstractTestBidiMap {
protected List sortedKeys = new ArrayList();
protected List sortedValues = new ArrayList();
protected SortedSet sortedNewValues = new TreeSet();
public AbstractTestSortedBidiMap(String testName) {
super(testName);
sortedKeys.addAll(Arrays.asList(getSampleKeys()));
Collections.sort(sortedKeys);
sortedKeys = Collections.unmodifiableList(sortedKeys);
Map map = new TreeMap();
for (int i = 0; i < getSampleKeys().length; i++) {
map.put(getSampleKeys()[i], getSampleValues()[i]);
}
sortedValues.addAll(map.values());
sortedValues = Collections.unmodifiableList(sortedValues);
sortedNewValues.addAll(Arrays.asList(getNewSampleValues()));
}
public AbstractTestSortedBidiMap() {
super();
sortedKeys.addAll(Arrays.asList(getSampleValues()));
Collections.sort(sortedKeys);
sortedKeys = Collections.unmodifiableList(sortedKeys);
Map map = new TreeMap();
for (int i = 0; i < getSampleKeys().length; i++) {
map.put(getSampleValues()[i], getSampleKeys()[i]);
}
sortedValues.addAll(map.values());
sortedValues = Collections.unmodifiableList(sortedValues);
sortedNewValues.addAll(Arrays.asList(getNewSampleValues()));
}
//-----------------------------------------------------------------------
protected boolean isAllowNullKey() {
return false;
}
protected boolean isAllowNullValue() {
return false;
}
protected Map makeConfirmedMap() {
return new TreeMap();
}
//-----------------------------------------------------------------------
public void testFirstKey() {
SortedMap sm = (SortedMap) makeFullMap();
assertSame(sm.keySet().iterator().next(), sm.firstKey());
}
public void testLastKey() {
SortedMap sm = (SortedMap) makeFullMap();
Object obj = null;
for (Iterator it = sm.keySet().iterator(); it.hasNext();) {
obj = (Object) it.next();
}
assertSame(obj, sm.lastKey());
}
//-----------------------------------------------------------------------
public void testBidiHeadMapContains() {
// extra test as other tests get complex
SortedBidiMap sm = (SortedBidiMap) makeFullMap();
Iterator it = sm.keySet().iterator();
Object first = it.next();
Object toKey = it.next();
Object second = it.next();
Object firstValue = sm.get(first);
Object secondValue = sm.get(second);
SortedMap head = sm.headMap(toKey);
assertEquals(1, head.size());
assertEquals(true, sm.containsKey(first));
assertEquals(true, head.containsKey(first));
assertEquals(true, sm.containsValue(firstValue));
assertEquals(true, head.containsValue(firstValue));
assertEquals(true, sm.containsKey(second));
assertEquals(false, head.containsKey(second));
assertEquals(true, sm.containsValue(secondValue));
assertEquals(false, head.containsValue(secondValue));
}
//-----------------------------------------------------------------------
public void testBidiRemoveByHeadMap() {
// extra test as other tests get complex
SortedBidiMap sm = (SortedBidiMap) makeFullMap();
Iterator it = sm.keySet().iterator();
Object first = it.next();
Object second = it.next();
Object toKey = it.next();
SortedMap head = sm.headMap(toKey);
assertEquals(2, head.size());
assertEquals(true, sm.containsKey(first));
assertEquals(true, head.containsKey(first));
assertEquals(true, sm.containsKey(second));
assertEquals(true, head.containsKey(second));
Object firstValue = head.remove(first);
assertEquals(false, sm.containsKey(first));
assertEquals(false, sm.containsValue(firstValue));
assertEquals(false, sm.inverseBidiMap().containsKey(firstValue));
assertEquals(false, sm.inverseBidiMap().containsValue(first));
assertEquals(false, head.containsKey(first));
assertEquals(false, head.containsValue(firstValue));
assertEquals(1, head.size());
Object secondValue = head.remove(second);
assertEquals(false, sm.containsKey(second));
assertEquals(false, sm.containsValue(secondValue));
assertEquals(false, sm.inverseBidiMap().containsKey(secondValue));
assertEquals(false, sm.inverseBidiMap().containsValue(second));
assertEquals(false, head.containsKey(second));
assertEquals(false, head.containsValue(secondValue));
assertEquals(0, head.size());
}
//-----------------------------------------------------------------------
public void testBidiRemoveByHeadMapEntrySet() {
// extra test as other tests get complex
SortedBidiMap sm = (SortedBidiMap) makeFullMap();
Iterator it = sm.keySet().iterator();
it.next();
it.next();
Object fromKey = it.next();
Object first = it.next();
Object second = it.next();
Object toKey = it.next();
SortedMap head = sm.headMap(toKey);
Set set = head.entrySet();
Iterator it2 = set.iterator();
Object fromEntry = it2.next();
Map.Entry firstEntry = new DefaultMapEntry((Map.Entry) it2.next());
Map.Entry secondEntry = new DefaultMapEntry((Map.Entry) it2.next());
assertEquals(true, sm.containsKey(first));
assertEquals(true, head.containsKey(first));
assertEquals(true, set.contains(firstEntry));
assertEquals(true, sm.containsKey(second));
assertEquals(true, head.containsKey(second));
assertEquals(true, set.contains(secondEntry));
set.remove(firstEntry);
assertEquals(false, sm.containsKey(firstEntry.getKey()));
assertEquals(false, sm.containsValue(firstEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsKey(firstEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsValue(firstEntry.getKey()));
assertEquals(false, head.containsKey(firstEntry.getKey()));
assertEquals(false, head.containsValue(firstEntry.getValue()));
assertEquals(false, set.contains(firstEntry));
set.remove(secondEntry);
assertEquals(false, sm.containsKey(secondEntry.getKey()));
assertEquals(false, sm.containsValue(secondEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsKey(secondEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsValue(secondEntry.getKey()));
assertEquals(false, head.containsKey(secondEntry.getKey()));
assertEquals(false, head.containsValue(secondEntry.getValue()));
assertEquals(false, set.contains(secondEntry));
}
//-----------------------------------------------------------------------
public void testBidiRemoveByTailMap() {
// extra test as other tests get complex
SortedBidiMap sm = (SortedBidiMap) makeFullMap();
Iterator it = sm.keySet().iterator();
it.next();
it.next();
Object fromKey = it.next();
Object first = it.next();
Object second = it.next();
SortedMap tail = sm.tailMap(fromKey);
assertEquals(true, sm.containsKey(first));
assertEquals(true, tail.containsKey(first));
assertEquals(true, sm.containsKey(second));
assertEquals(true, tail.containsKey(second));
Object firstValue = tail.remove(first);
assertEquals(false, sm.containsKey(first));
assertEquals(false, sm.containsValue(firstValue));
assertEquals(false, sm.inverseBidiMap().containsKey(firstValue));
assertEquals(false, sm.inverseBidiMap().containsValue(first));
assertEquals(false, tail.containsKey(first));
assertEquals(false, tail.containsValue(firstValue));
Object secondValue = tail.remove(second);
assertEquals(false, sm.containsKey(second));
assertEquals(false, sm.containsValue(secondValue));
assertEquals(false, sm.inverseBidiMap().containsKey(secondValue));
assertEquals(false, sm.inverseBidiMap().containsValue(second));
assertEquals(false, tail.containsKey(second));
assertEquals(false, tail.containsValue(secondValue));
}
//-----------------------------------------------------------------------
public void testBidiRemoveByTailMapEntrySet() {
// extra test as other tests get complex
SortedBidiMap sm = (SortedBidiMap) makeFullMap();
Iterator it = sm.keySet().iterator();
it.next();
it.next();
Object fromKey = it.next();
Object first = it.next();
Object second = it.next();
Object toKey = it.next();
SortedMap tail = sm.tailMap(fromKey);
Set set = tail.entrySet();
Iterator it2 = set.iterator();
Object fromEntry = it2.next();
Map.Entry firstEntry = new DefaultMapEntry((Map.Entry) it2.next());
Map.Entry secondEntry = new DefaultMapEntry((Map.Entry) it2.next());
assertEquals(true, sm.containsKey(first));
assertEquals(true, tail.containsKey(first));
assertEquals(true, set.contains(firstEntry));
assertEquals(true, sm.containsKey(second));
assertEquals(true, tail.containsKey(second));
assertEquals(true, set.contains(secondEntry));
set.remove(firstEntry);
assertEquals(false, sm.containsKey(firstEntry.getKey()));
assertEquals(false, sm.containsValue(firstEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsKey(firstEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsValue(firstEntry.getKey()));
assertEquals(false, tail.containsKey(firstEntry.getKey()));
assertEquals(false, tail.containsValue(firstEntry.getValue()));
assertEquals(false, set.contains(firstEntry));
set.remove(secondEntry);
assertEquals(false, sm.containsKey(secondEntry.getKey()));
assertEquals(false, sm.containsValue(secondEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsKey(secondEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsValue(secondEntry.getKey()));
assertEquals(false, tail.containsKey(secondEntry.getKey()));
assertEquals(false, tail.containsValue(secondEntry.getValue()));
assertEquals(false, set.contains(secondEntry));
}
//-----------------------------------------------------------------------
public void testBidiRemoveBySubMap() {
// extra test as other tests get complex
SortedBidiMap sm = (SortedBidiMap) makeFullMap();
Iterator it = sm.keySet().iterator();
it.next();
it.next();
Object fromKey = it.next();
Object first = it.next();
Object second = it.next();
Object toKey = it.next();
SortedMap sub = sm.subMap(fromKey, toKey);
assertEquals(true, sm.containsKey(first));
assertEquals(true, sub.containsKey(first));
assertEquals(true, sm.containsKey(second));
assertEquals(true, sub.containsKey(second));
Object firstValue = sub.remove(first);
assertEquals(false, sm.containsKey(first));
assertEquals(false, sm.containsValue(firstValue));
assertEquals(false, sm.inverseBidiMap().containsKey(firstValue));
assertEquals(false, sm.inverseBidiMap().containsValue(first));
assertEquals(false, sub.containsKey(first));
assertEquals(false, sub.containsValue(firstValue));
Object secondValue = sub.remove(second);
assertEquals(false, sm.containsKey(second));
assertEquals(false, sm.containsValue(secondValue));
assertEquals(false, sm.inverseBidiMap().containsKey(secondValue));
assertEquals(false, sm.inverseBidiMap().containsValue(second));
assertEquals(false, sub.containsKey(second));
assertEquals(false, sub.containsValue(secondValue));
}
//-----------------------------------------------------------------------
public void testBidiRemoveBySubMapEntrySet() {
// extra test as other tests get complex
SortedBidiMap sm = (SortedBidiMap) makeFullMap();
Iterator it = sm.keySet().iterator();
it.next();
it.next();
Object fromKey = it.next();
Object first = it.next();
Object second = it.next();
Object toKey = it.next();
SortedMap sub = sm.subMap(fromKey, toKey);
Set set = sub.entrySet();
assertEquals(3, set.size());
Iterator it2 = set.iterator();
Object fromEntry = it2.next();
Map.Entry firstEntry = new DefaultMapEntry((Map.Entry) it2.next());
Map.Entry secondEntry = new DefaultMapEntry((Map.Entry) it2.next());
assertEquals(true, sm.containsKey(first));
assertEquals(true, sub.containsKey(first));
assertEquals(true, set.contains(firstEntry));
assertEquals(true, sm.containsKey(second));
assertEquals(true, sub.containsKey(second));
assertEquals(true, set.contains(secondEntry));
set.remove(firstEntry);
assertEquals(false, sm.containsKey(firstEntry.getKey()));
assertEquals(false, sm.containsValue(firstEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsKey(firstEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsValue(firstEntry.getKey()));
assertEquals(false, sub.containsKey(firstEntry.getKey()));
assertEquals(false, sub.containsValue(firstEntry.getValue()));
assertEquals(false, set.contains(firstEntry));
set.remove(secondEntry);
assertEquals(false, sm.containsKey(secondEntry.getKey()));
assertEquals(false, sm.containsValue(secondEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsKey(secondEntry.getValue()));
assertEquals(false, sm.inverseBidiMap().containsValue(secondEntry.getKey()));
assertEquals(false, sub.containsKey(secondEntry.getKey()));
assertEquals(false, sub.containsValue(secondEntry.getValue()));
assertEquals(false, set.contains(secondEntry));
}
//-----------------------------------------------------------------------
public BulkTest bulkTestHeadMap() {
return new AbstractTestSortedMap.TestHeadMap(this);
}
public BulkTest bulkTestTailMap() {
return new AbstractTestSortedMap.TestTailMap(this);
}
public BulkTest bulkTestSubMap() {
return new AbstractTestSortedMap.TestSubMap(this);
}
}
1.1
jakarta-commons/collections/src/test/org/apache/commons/collections/TestDualTreeBidiMap.java
Index: TestDualTreeBidiMap.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestDualTreeBidiMap.java,v
1.1 2003/10/31 01:26:25 scolebourne Exp $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowledgement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgement may appear in the software itself,
* if and wherever such third-party acknowledgements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.commons.collections;
import junit.framework.Test;
import junit.textui.TestRunner;
/**
* JUnit tests.
*
* @version $Revision: 1.1 $ $Date: 2003/10/31 01:26:25 $
*
* @author Matthew Hawthorne
* @author Stephen Colebourne
*/
public class TestDualTreeBidiMap extends AbstractTestSortedBidiMap {
public static void main(String[] args) {
TestRunner.run(suite());
}
public static Test suite() {
return BulkTest.makeSuite(TestDualTreeBidiMap.class);
}
public TestDualTreeBidiMap(String testName) {
super(testName);
}
protected BidiMap makeEmptyBidiMap() {
return new DualTreeBidiMap();
}
/**
* Override to prevent infinite recursion of tests.
*/
protected String[] ignoredTests() {
return new String[]
{"TestDualTreeBidiMap.bulkTestInverseMap.bulkTestInverseMap"};
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]