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]

Reply via email to