You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2015/05/31 20:35:18 UTC

svn commit: r1682768 - in /commons/proper/collections/trunk/src: main/java/org/apache/commons/collections4/ main/java/org/apache/commons/collections4/set/ test/java/org/apache/commons/collections4/set/ test/resources/data/test/

Author: tn
Date: Sun May 31 18:35:18 2015
New Revision: 1682768

URL: http://svn.apache.org/r1682768
Log:
[COLLECTIONS-565] Add decorators for NavigableSet interface.

Added:
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java   (with props)
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java   (with props)
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java   (with props)
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java   (with props)
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java   (with props)
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java   (with props)
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java   (with props)
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java   (with props)
    commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.emptyCollection.version4.1.obj   (with props)
    commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.fullCollection.version4.1.obj   (with props)
    commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.emptyCollection.version4.1.obj   (with props)
    commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.fullCollection.version4.1.obj   (with props)
    commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.emptyCollection.version4.1.obj   (with props)
    commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.fullCollection.version4.1.obj   (with props)
Modified:
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/SetUtils.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedSortedSet.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableSortedSet.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/package-info.java
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractSortedSetTest.java

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/SetUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/SetUtils.java?rev=1682768&r1=1682767&r2=1682768&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/SetUtils.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/SetUtils.java Sun May 31 18:35:18 2015
@@ -19,15 +19,19 @@ package org.apache.commons.collections4;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.IdentityHashMap;
+import java.util.NavigableSet;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
 import org.apache.commons.collections4.set.ListOrderedSet;
+import org.apache.commons.collections4.set.PredicatedNavigableSet;
 import org.apache.commons.collections4.set.PredicatedSet;
 import org.apache.commons.collections4.set.PredicatedSortedSet;
+import org.apache.commons.collections4.set.TransformedNavigableSet;
 import org.apache.commons.collections4.set.TransformedSet;
 import org.apache.commons.collections4.set.TransformedSortedSet;
+import org.apache.commons.collections4.set.UnmodifiableNavigableSet;
 import org.apache.commons.collections4.set.UnmodifiableSet;
 import org.apache.commons.collections4.set.UnmodifiableSortedSet;
 
@@ -252,7 +256,8 @@ public class SetUtils {
      * @return a transformed set backed by the given set
      * @throws IllegalArgumentException  if the Set or Transformer is null
      */
-    public static <E> Set<E> transformedSet(final Set<E> set, final Transformer<? super E, ? extends E> transformer) {
+    public static <E> Set<E> transformedSet(final Set<E> set,
+                                            final Transformer<? super E, ? extends E> transformer) {
         return TransformedSet.transformingSet(set, transformer);
     }
 
@@ -329,7 +334,8 @@ public class SetUtils {
      * @return a predicated sorted set backed by the given sorted set
      * @throws IllegalArgumentException  if the Set or Predicate is null
      */
-    public static <E> SortedSet<E> predicatedSortedSet(final SortedSet<E> set, final Predicate<? super E> predicate) {
+    public static <E> SortedSet<E> predicatedSortedSet(final SortedSet<E> set,
+                                                       final Predicate<? super E> predicate) {
         return PredicatedSortedSet.predicatedSortedSet(set, predicate);
     }
 
@@ -354,4 +360,63 @@ public class SetUtils {
         return TransformedSortedSet.transformingSortedSet(set, transformer);
     }
 
+    // NavigableSet
+    //-----------------------------------------------------------------------
+    /**
+     * Returns an unmodifiable navigable set backed by the given navigable set.
+     * <p>
+     * This method uses the implementation in the decorators subpackage.
+     *
+     * @param <E> the element type
+     * @param set  the navigable set to make unmodifiable, must not be null
+     * @return an unmodifiable set backed by the given set
+     * @throws IllegalArgumentException  if the set is null
+     * @since 4.1
+     */
+    public static <E> SortedSet<E> unmodifiableNavigableSet(final NavigableSet<E> set) {
+        return UnmodifiableNavigableSet.unmodifiableNavigableSet(set);
+    }
+
+    /**
+     * Returns a predicated (validating) navigable set backed by the given navigable set.
+     * <p>
+     * Only objects that pass the test in the given predicate can be added to the set.
+     * Trying to add an invalid object results in an IllegalArgumentException.
+     * It is important not to use the original set after invoking this method,
+     * as it is a backdoor for adding invalid objects.
+     *
+     * @param <E> the element type
+     * @param set  the navigable set to predicate, must not be null
+     * @param predicate  the predicate for the navigable set, must not be null
+     * @return a predicated navigable set backed by the given navigable set
+     * @throws IllegalArgumentException  if the Set or Predicate is null
+     * @since 4.1
+     */
+    public static <E> SortedSet<E> predicatedNavigableSet(final NavigableSet<E> set,
+                                                          final Predicate<? super E> predicate) {
+        return PredicatedNavigableSet.predicatedNavigableSet(set, predicate);
+    }
+
+    /**
+     * Returns a transformed navigable set backed by the given navigable set.
+     * <p>
+     * Each object is passed through the transformer as it is added to the
+     * Set. It is important not to use the original set after invoking this
+     * method, as it is a backdoor for adding untransformed objects.
+     * <p>
+     * Existing entries in the specified set will not be transformed.
+     * If you want that behaviour, see {@link TransformedNavigableSet#transformedNavigableSet}.
+     *
+     * @param <E> the element type
+     * @param set  the navigable set to transform, must not be null
+     * @param transformer  the transformer for the set, must not be null
+     * @return a transformed set backed by the given set
+     * @throws IllegalArgumentException  if the Set or Transformer is null
+     * @since 4.1
+     */
+    public static <E> SortedSet<E> transformedNavigableSet(final NavigableSet<E> set,
+                                                           final Transformer<? super E, ? extends E> transformer) {
+        return TransformedNavigableSet.transformingNavigableSet(set, transformer);
+    }
+
 }

Added: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java (added)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java Sun May 31 18:35:18 2015
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.util.Iterator;
+import java.util.NavigableSet;
+
+/**
+ * Decorates another <code>NavigableSet</code> to provide additional behaviour.
+ * <p>
+ * Methods are forwarded directly to the decorated set.
+ *
+ * @param <E> the type of the elements in the navigable set
+ * @since 4.1
+ * @version $Id$
+ */
+public abstract class AbstractNavigableSetDecorator<E>
+        extends AbstractSortedSetDecorator<E>
+        implements NavigableSet<E> {
+
+    /** Serialization version */
+    private static final long serialVersionUID = 20150528L;
+
+    /**
+     * Constructor only used in deserialization, do not use otherwise.
+     */
+    protected AbstractNavigableSetDecorator() {
+        super();
+    }
+
+    /**
+     * Constructor that wraps (not copies).
+     *
+     * @param set  the set to decorate, must not be null
+     * @throws IllegalArgumentException if set is null
+     */
+    protected AbstractNavigableSetDecorator(final NavigableSet<E> set) {
+        super(set);
+    }
+
+    /**
+     * Gets the set being decorated.
+     *
+     * @return the decorated set
+     */
+    @Override
+    protected NavigableSet<E> decorated() {
+        return (NavigableSet<E>) super.decorated();
+    }
+
+    //-----------------------------------------------------------------------
+
+    @Override
+    public E lower(E e) {
+        return decorated().lower(e);
+    }
+
+    @Override
+    public E floor(E e) {
+        return decorated().floor(e);
+    }
+
+    @Override
+    public E ceiling(E e) {
+        return decorated().ceiling(e);
+    }
+
+    @Override
+    public E higher(E e) {
+        return decorated().higher(e);
+    }
+
+    @Override
+    public E pollFirst() {
+        return decorated().pollFirst();
+    }
+
+    @Override
+    public E pollLast() {
+        return decorated().pollLast();
+    }
+
+    @Override
+    public NavigableSet<E> descendingSet() {
+        return decorated().descendingSet();
+    }
+
+    @Override
+    public Iterator<E> descendingIterator() {
+        return decorated().descendingIterator();
+    }
+
+    @Override
+    public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+        return decorated().subSet(fromElement, fromInclusive, toElement, toInclusive);
+    }
+
+    @Override
+    public NavigableSet<E> headSet(E toElement, boolean inclusive) {
+        return decorated().headSet(toElement, inclusive);
+    }
+
+    @Override
+    public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
+        return decorated().tailSet(fromElement, inclusive);
+    }
+
+}

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/AbstractNavigableSetDecorator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java (added)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java Sun May 31 18:35:18 2015
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.util.Iterator;
+import java.util.NavigableSet;
+
+import org.apache.commons.collections4.Predicate;
+
+/**
+ * Decorates another <code>NavigableSet</code> to validate that all additions
+ * match a specified predicate.
+ * <p>
+ * This set exists to provide validation for the decorated set.
+ * It is normally created to decorate an empty set.
+ * If an object cannot be added to the set, an IllegalArgumentException is thrown.
+ * <p>
+ * One usage would be to ensure that no null entries are added to the set.
+ * <pre>
+ * NavigableSet set =
+ *   PredicatedSortedSet.predicatedNavigableSet(new TreeSet(),
+ *                                              NotNullPredicate.notNullPredicate());
+ * </pre>
+ *
+ * @since 4.1
+ * @version $Id$
+ */
+public class PredicatedNavigableSet<E> extends PredicatedSortedSet<E> implements NavigableSet<E> {
+
+    /** Serialization version */
+    private static final long serialVersionUID = 20150528L;
+
+    /**
+     * Factory method to create a predicated (validating) navigable set.
+     * <p>
+     * If there are any elements already in the set being decorated, they
+     * are validated.
+     *
+     * @param <E> the element type
+     * @param set  the set to decorate, must not be null
+     * @param predicate  the predicate to use for validation, must not be null
+     * @return a new predicated navigable set.
+     * @throws IllegalArgumentException if set or predicate is null
+     * @throws IllegalArgumentException if the set contains invalid elements
+     * @since 4.0
+     */
+    public static <E> PredicatedNavigableSet<E> predicatedNavigableSet(final NavigableSet<E> set,
+                                                                       final Predicate<? super E> predicate) {
+        return new PredicatedNavigableSet<E>(set, predicate);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Constructor that wraps (not copies).
+     * <p>
+     * If there are any elements already in the set being decorated, they
+     * are validated.
+     *
+     * @param set  the set to decorate, must not be null
+     * @param predicate  the predicate to use for validation, must not be null
+     * @throws IllegalArgumentException if set or predicate is null
+     * @throws IllegalArgumentException if the set contains invalid elements
+     */
+    protected PredicatedNavigableSet(final NavigableSet<E> set, final Predicate<? super E> predicate) {
+        super(set, predicate);
+    }
+
+    /**
+     * Gets the navigable set being decorated.
+     *
+     * @return the decorated navigable set
+     */
+    @Override
+    protected NavigableSet<E> decorated() {
+        return (NavigableSet<E>) super.decorated();
+    }
+
+    //-----------------------------------------------------------------------
+
+    @Override
+    public E lower(E e) {
+        return decorated().lower(e);
+    }
+
+    @Override
+    public E floor(E e) {
+        return decorated().floor(e);
+    }
+
+    @Override
+    public E ceiling(E e) {
+        return decorated().ceiling(e);
+    }
+
+    @Override
+    public E higher(E e) {
+        return decorated().higher(e);
+    }
+
+    @Override
+    public E pollFirst() {
+        return decorated().pollFirst();
+    }
+
+    @Override
+    public E pollLast() {
+        return decorated().pollLast();
+    }
+
+    @Override
+    public NavigableSet<E> descendingSet() {
+        return predicatedNavigableSet(decorated().descendingSet(), predicate);
+    }
+
+    @Override
+    public Iterator<E> descendingIterator() {
+        return decorated().descendingIterator();
+    }
+
+    @Override
+    public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+        final NavigableSet<E> sub = decorated().subSet(fromElement, fromInclusive, toElement, toInclusive);
+        return predicatedNavigableSet(sub, predicate);
+    }
+
+    @Override
+    public NavigableSet<E> headSet(E toElement, boolean inclusive) {
+        final NavigableSet<E> head = decorated().headSet(toElement, inclusive);
+        return predicatedNavigableSet(head, predicate);
+    }
+
+    @Override
+    public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
+        final NavigableSet<E> tail = decorated().tailSet(fromElement, inclusive);
+        return predicatedNavigableSet(tail, predicate);
+    }
+
+}

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedNavigableSet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedSortedSet.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedSortedSet.java?rev=1682768&r1=1682767&r2=1682768&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedSortedSet.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/PredicatedSortedSet.java Sun May 31 18:35:18 2015
@@ -30,7 +30,11 @@ import org.apache.commons.collections4.P
  * If an object cannot be added to the set, an IllegalArgumentException is thrown.
  * <p>
  * One usage would be to ensure that no null entries are added to the set.
- * <pre>SortedSet set = PredicatedSortedSet.decorate(new TreeSet(), NotNullPredicate.INSTANCE);</pre>
+ * <pre>
+ * SortedSet set =
+ *   PredicatedSortedSet.predicatedSortedSet(new TreeSet(),
+ *                                           NotNullPredicate.notNullPredicate());
+ * </pre>
  * <p>
  * This class is Serializable from Commons Collections 3.1.
  *
@@ -106,13 +110,13 @@ public class PredicatedSortedSet<E> exte
     }
 
     public SortedSet<E> headSet(final E toElement) {
-        final SortedSet<E> sub = decorated().headSet(toElement);
-        return new PredicatedSortedSet<E>(sub, predicate);
+        final SortedSet<E> head = decorated().headSet(toElement);
+        return new PredicatedSortedSet<E>(head, predicate);
     }
 
     public SortedSet<E> tailSet(final E fromElement) {
-        final SortedSet<E> sub = decorated().tailSet(fromElement);
-        return new PredicatedSortedSet<E>(sub, predicate);
+        final SortedSet<E> tail = decorated().tailSet(fromElement);
+        return new PredicatedSortedSet<E>(tail, predicate);
     }
 
 }

Added: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java (added)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java Sun May 31 18:35:18 2015
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.util.Iterator;
+import java.util.NavigableSet;
+
+import org.apache.commons.collections4.Transformer;
+
+/**
+ * Decorates another <code>NavigableSet</code> to transform objects that are added.
+ * <p>
+ * The add methods are affected by this class.
+ * Thus objects must be removed or searched for using their transformed form.
+ * For example, if the transformation converts Strings to Integers, you must
+ * use the Integer form to remove objects.
+ *
+ * @since 4.1
+ * @version $Id$
+ */
+public class TransformedNavigableSet<E> extends TransformedSortedSet<E> implements NavigableSet<E> {
+
+    /** Serialization version */
+    private static final long serialVersionUID = 20150528L;
+
+    /**
+     * Factory method to create a transforming navigable set.
+     * <p>
+     * If there are any elements already in the set being decorated, they
+     * are NOT transformed.
+     * Contrast this with {@link #transformedNavigableSet(NavigableSet, Transformer)}.
+     *
+     * @param <E> the element type
+     * @param set  the set to decorate, must not be null
+     * @param transformer  the transformer to use for conversion, must not be null
+     * @return a new transformed {@link NavigableSet}
+     * @throws IllegalArgumentException if set or transformer is null
+     */
+    public static <E> TransformedNavigableSet<E> transformingNavigableSet(final NavigableSet<E> set,
+            final Transformer<? super E, ? extends E> transformer) {
+        return new TransformedNavigableSet<E>(set, transformer);
+    }
+
+    /**
+     * Factory method to create a transforming navigable set that will transform
+     * existing contents of the specified navigable set.
+     * <p>
+     * If there are any elements already in the set being decorated, they
+     * will be transformed by this method.
+     * Contrast this with {@link #transformingNavigableSet(NavigableSet, Transformer)}.
+     *
+     * @param <E> the element type
+     * @param set  the set to decorate, must not be null
+     * @param transformer  the transformer to use for conversion, must not be null
+     * @return a new transformed {@link NavigableSet}
+     * @throws IllegalArgumentException if set or transformer is null
+     */
+    public static <E> TransformedNavigableSet<E> transformedNavigableSet(final NavigableSet<E> set,
+            final Transformer<? super E, ? extends E> transformer) {
+
+        final TransformedNavigableSet<E> decorated = new TransformedNavigableSet<E>(set, transformer);
+        if (transformer != null && set != null && set.size() > 0) {
+            @SuppressWarnings("unchecked") // set is type E
+            final E[] values = (E[]) set.toArray(); // NOPMD - false positive for generics
+            set.clear();
+            for (final E value : values) {
+                decorated.decorated().add(transformer.transform(value));
+            }
+        }
+        return decorated;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Constructor that wraps (not copies).
+     * <p>
+     * If there are any elements already in the set being decorated, they
+     * are NOT transformed.
+     *
+     * @param set  the set to decorate, must not be null
+     * @param transformer  the transformer to use for conversion, must not be null
+     * @throws IllegalArgumentException if set or transformer is null
+     */
+    protected TransformedNavigableSet(final NavigableSet<E> set,
+                                      final Transformer<? super E, ? extends E> transformer) {
+        super(set, transformer);
+    }
+
+    /**
+     * Gets the decorated navigable set.
+     *
+     * @return the decorated navigable set
+     */
+    @Override
+    protected NavigableSet<E> decorated() {
+        return (NavigableSet<E>) super.decorated();
+    }
+
+    //-----------------------------------------------------------------------
+
+    @Override
+    public E lower(E e) {
+        return decorated().lower(e);
+    }
+
+    @Override
+    public E floor(E e) {
+        return decorated().floor(e);
+    }
+
+    @Override
+    public E ceiling(E e) {
+        return decorated().ceiling(e);
+    }
+
+    @Override
+    public E higher(E e) {
+        return decorated().higher(e);
+    }
+
+    @Override
+    public E pollFirst() {
+        return decorated().pollFirst();
+    }
+
+    @Override
+    public E pollLast() {
+        return decorated().pollLast();
+    }
+
+    @Override
+    public NavigableSet<E> descendingSet() {
+        return transformingNavigableSet(decorated().descendingSet(), transformer);
+    }
+
+    @Override
+    public Iterator<E> descendingIterator() {
+        return decorated().descendingIterator();
+    }
+
+    @Override
+    public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+        final NavigableSet<E> sub = decorated().subSet(fromElement, fromInclusive, toElement, toInclusive);
+        return transformingNavigableSet(sub, transformer);
+    }
+
+    @Override
+    public NavigableSet<E> headSet(E toElement, boolean inclusive) {
+        final NavigableSet<E> head = decorated().headSet(toElement, inclusive);
+        return transformingNavigableSet(head, transformer);
+    }
+
+    @Override
+    public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
+        final NavigableSet<E> tail = decorated().tailSet(fromElement, inclusive);
+        return transformingNavigableSet(tail, transformer);
+    }
+
+}

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/TransformedNavigableSet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java (added)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java Sun May 31 18:35:18 2015
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NavigableSet;
+import java.util.SortedSet;
+
+import org.apache.commons.collections4.Unmodifiable;
+import org.apache.commons.collections4.iterators.UnmodifiableIterator;
+
+/**
+ * Decorates another <code>NavigableSet</code> to ensure it can't be altered.
+ * <p>
+ * Attempts to modify it will result in an UnsupportedOperationException.
+ *
+ * @since 4.1
+ * @version $Id$
+ */
+public final class UnmodifiableNavigableSet<E>
+        extends AbstractNavigableSetDecorator<E>
+        implements Unmodifiable {
+
+    /** Serialization version */
+    private static final long serialVersionUID = 20150528L;
+
+    /**
+     * Factory method to create an unmodifiable set.
+     *
+     * @param <E> the element type
+     * @param set  the set to decorate, must not be null
+     * @return a new unmodifiable {@link NavigableSet}
+     * @throws IllegalArgumentException if set is null
+     */
+    public static <E> NavigableSet<E> unmodifiableNavigableSet(final NavigableSet<E> set) {
+        if (set instanceof Unmodifiable) {
+            return set;
+        }
+        return new UnmodifiableNavigableSet<E>(set);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Constructor that wraps (not copies).
+     *
+     * @param set  the set to decorate, must not be null
+     * @throws IllegalArgumentException if set is null
+     */
+    private UnmodifiableNavigableSet(final NavigableSet<E> set) {
+        super(set);
+    }
+
+    //-----------------------------------------------------------------------
+    @Override
+    public Iterator<E> iterator() {
+        return UnmodifiableIterator.unmodifiableIterator(decorated().iterator());
+    }
+
+    @Override
+    public boolean add(final E object) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean addAll(final Collection<? extends E> coll) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void clear() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean remove(final Object object) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean removeAll(final Collection<?> coll) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean retainAll(final Collection<?> coll) {
+        throw new UnsupportedOperationException();
+    }
+
+    // SortedSet
+    //-----------------------------------------------------------------------
+    @Override
+    public SortedSet<E> subSet(final E fromElement, final E toElement) {
+        final SortedSet<E> sub = decorated().subSet(fromElement, toElement);
+        return UnmodifiableSortedSet.unmodifiableSortedSet(sub);
+    }
+
+    @Override
+    public SortedSet<E> headSet(final E toElement) {
+        final SortedSet<E> head = decorated().headSet(toElement);
+        return UnmodifiableSortedSet.unmodifiableSortedSet(head);
+    }
+
+    @Override
+    public SortedSet<E> tailSet(final E fromElement) {
+        final SortedSet<E> tail = decorated().tailSet(fromElement);
+        return UnmodifiableSortedSet.unmodifiableSortedSet(tail);
+    }
+
+    // NavigableSet
+    //-----------------------------------------------------------------------
+    @Override
+    public NavigableSet<E> descendingSet() {
+        return unmodifiableNavigableSet(decorated().descendingSet());
+    }
+
+    @Override
+    public Iterator<E> descendingIterator() {
+        return UnmodifiableIterator.unmodifiableIterator(decorated().descendingIterator());
+    }
+
+    @Override
+    public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+        final NavigableSet<E> sub = decorated().subSet(fromElement, fromInclusive, toElement, toInclusive);
+        return unmodifiableNavigableSet(sub);
+    }
+
+    @Override
+    public NavigableSet<E> headSet(E toElement, boolean inclusive) {
+        final NavigableSet<E> head = decorated().headSet(toElement, inclusive);
+        return unmodifiableNavigableSet(head);
+    }
+
+    @Override
+    public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
+        final NavigableSet<E> tail = decorated().tailSet(fromElement, inclusive);
+        return unmodifiableNavigableSet(tail);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Write the collection out using a custom routine.
+     *
+     * @param out  the output stream
+     * @throws IOException
+     */
+    private void writeObject(final ObjectOutputStream out) throws IOException {
+        out.defaultWriteObject();
+        out.writeObject(decorated());
+    }
+
+    /**
+     * Read the collection in using a custom routine.
+     *
+     * @param in  the input stream
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    @SuppressWarnings("unchecked") // (1) should only fail if input stream is incorrect
+    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
+        in.defaultReadObject();
+        setCollection((Collection<E>) in.readObject()); // (1)
+    }
+
+}

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableSortedSet.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableSortedSet.java?rev=1682768&r1=1682767&r2=1682768&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableSortedSet.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/UnmodifiableSortedSet.java Sun May 31 18:35:18 2015
@@ -61,31 +61,6 @@ public final class UnmodifiableSortedSet
 
     //-----------------------------------------------------------------------
     /**
-     * Write the collection out using a custom routine.
-     *
-     * @param out  the output stream
-     * @throws IOException
-     */
-    private void writeObject(final ObjectOutputStream out) throws IOException {
-        out.defaultWriteObject();
-        out.writeObject(decorated());
-    }
-
-    /**
-     * Read the collection in using a custom routine.
-     *
-     * @param in  the input stream
-     * @throws IOException
-     * @throws ClassNotFoundException
-     */
-    @SuppressWarnings("unchecked") // (1) should only fail if input stream is incorrect
-    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
-        in.defaultReadObject();
-        setCollection((Collection<E>) in.readObject()); // (1)
-    }
-
-    //-----------------------------------------------------------------------
-    /**
      * Constructor that wraps (not copies).
      *
      * @param set  the set to decorate, must not be null
@@ -135,19 +110,44 @@ public final class UnmodifiableSortedSet
     @Override
     public SortedSet<E> subSet(final E fromElement, final E toElement) {
         final SortedSet<E> sub = decorated().subSet(fromElement, toElement);
-        return new UnmodifiableSortedSet<E>(sub);
+        return unmodifiableSortedSet(sub);
     }
 
     @Override
     public SortedSet<E> headSet(final E toElement) {
-        final SortedSet<E> sub = decorated().headSet(toElement);
-        return new UnmodifiableSortedSet<E>(sub);
+        final SortedSet<E> head = decorated().headSet(toElement);
+        return unmodifiableSortedSet(head);
     }
 
     @Override
     public SortedSet<E> tailSet(final E fromElement) {
-        final SortedSet<E> sub = decorated().tailSet(fromElement);
-        return new UnmodifiableSortedSet<E>(sub);
+        final SortedSet<E> tail = decorated().tailSet(fromElement);
+        return unmodifiableSortedSet(tail);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Write the collection out using a custom routine.
+     *
+     * @param out  the output stream
+     * @throws IOException
+     */
+    private void writeObject(final ObjectOutputStream out) throws IOException {
+        out.defaultWriteObject();
+        out.writeObject(decorated());
+    }
+
+    /**
+     * Read the collection in using a custom routine.
+     *
+     * @param in  the input stream
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    @SuppressWarnings("unchecked") // (1) should only fail if input stream is incorrect
+    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
+        in.defaultReadObject();
+        setCollection((Collection<E>) in.readObject()); // (1)
     }
 
 }

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/package-info.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/package-info.java?rev=1682768&r1=1682767&r2=1682768&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/package-info.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/set/package-info.java Sun May 31 18:35:18 2015
@@ -15,8 +15,9 @@
  * limitations under the License.
  */
 /**
- * This package contains implementations of the {@link java.util.Set Set} and
- * {@link java.util.SortedSet SortedSet} interfaces.
+ * This package contains implementations of the {@link java.util.Set Set},
+ * {@link java.util.SortedSet SortedSet} and
+ * {@link java.util.NavigableSet NavigableSet} interfaces.
  * <p>
  * The implementations are in the form of direct implementations and decorators.
  * A decorator wraps another implementation of the interface to add some

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java Sun May 31 18:35:18 2015
@@ -0,0 +1,339 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.util.Iterator;
+import java.util.NavigableSet;
+import java.util.TreeSet;
+
+import org.apache.commons.collections4.BulkTest;
+
+/**
+ * Abstract test class for {@link NavigableSet} methods and contracts.
+ * <p>
+ * To use, subclass and override the {@link #makeObject()}
+ * method.  You may have to override other protected methods if your
+ * set is not modifiable, or if your set restricts what kinds of
+ * elements may be added; see {@link AbstractSetTest} for more details.
+ *
+ * @since 4.1
+ * @version $Id$
+ */
+public abstract class AbstractNavigableSetTest<E> extends AbstractSortedSetTest<E> {
+
+    /**
+     * JUnit constructor.
+     *
+     * @param name  name for test
+     */
+    public AbstractNavigableSetTest(final String name) {
+        super(name);
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public abstract NavigableSet<E> makeObject();
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public NavigableSet<E> makeFullCollection() {
+        return (NavigableSet<E>) super.makeFullCollection();
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Returns an empty {@link TreeSet} for use in modification testing.
+     *
+     * @return a confirmed empty collection
+     */
+    @Override
+    public NavigableSet<E> makeConfirmedCollection() {
+        return new TreeSet<E>();
+    }
+
+    //-----------------------------------------------------------------------
+
+    /**
+     * Verification extension, will check the order of elements,
+     * the sets should already be verified equal.
+     */
+    @Override
+    public void verify() {
+        super.verify();
+
+        // Check that descending iterator returns elements in order and higher(), lower(),
+        // floor() and ceiling() are consistent
+        final Iterator<E> colliter = getCollection().descendingIterator();
+        final Iterator<E> confiter = getConfirmed().descendingIterator();
+        while (colliter.hasNext()) {
+            final E element = colliter.next();
+            final E confelement = confiter.next();
+            assertEquals("Element appears to be out of order.", confelement, element);
+
+            assertEquals("Incorrect element returned by higher().", getConfirmed().higher(element),
+                                                                    getCollection().higher(element));
+
+            assertEquals("Incorrect element returned by lower().", getConfirmed().lower(element),
+                                                                   getCollection().lower(element));
+
+            assertEquals("Incorrect element returned by floor().", getConfirmed().floor(element),
+                                                                   getCollection().floor(element));
+
+            assertEquals("Incorrect element returned by ceiling().", getConfirmed().ceiling(element),
+                                                                     getCollection().ceiling(element));
+        }
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Override to return comparable objects.
+     */
+    @Override
+    @SuppressWarnings("unchecked")
+    public E[] getFullNonNullElements() {
+        final Object[] elements = new Object[30];
+
+        for (int i = 0; i < 30; i++) {
+            elements[i] = Integer.valueOf(i + i + 1);
+        }
+        return (E[]) elements;
+    }
+
+    /**
+     * Override to return comparable objects.
+     */
+    @Override
+    @SuppressWarnings("unchecked")
+    public E[] getOtherNonNullElements() {
+        final Object[] elements = new Object[30];
+        for (int i = 0; i < 30; i++) {
+            elements[i] = Integer.valueOf(i + i + 2);
+        }
+        return (E[]) elements;
+    }
+
+    //-----------------------------------------------------------------------
+    /**
+     * Bulk test {@link NavigableSet#subSet(Object, boolean, Object, boolean)}.
+     * This method runs through all of the tests in {@link AbstractNavigableSetTest}.
+     * After modification operations, {@link #verify()} is invoked to ensure
+     * that the set and the other collection views are still valid.
+     *
+     * @return a {@link AbstractNavigableSetTest} instance for testing a subset.
+     */
+    public BulkTest bulkTestNavigableSetSubSet() {
+        final int length = getFullElements().length;
+
+        final int lobound = length / 3;
+        final int hibound = lobound * 2;
+        return new TestNavigableSetSubSet(lobound, hibound, false);
+    }
+
+    /**
+     * Bulk test {@link NavigableSet#headSet(Object, boolean)}.
+     * This method runs through all of the tests in {@link AbstractNavigableSetTest}.
+     * After modification operations, {@link #verify()} is invoked to ensure
+     * that the set and the other collection views are still valid.
+     *
+     * @return a {@link AbstractNavigableSetTest} instance for testing a headset.
+     */
+    public BulkTest bulkTestNavigableSetHeadSet() {
+        final int length = getFullElements().length;
+
+        final int lobound = length / 3;
+        final int hibound = lobound * 2;
+        return new TestNavigableSetSubSet(hibound, true, true);
+    }
+
+    /**
+     * Bulk test {@link NavigableSet#tailSet(Object, boolean)}.
+     * This method runs through all of the tests in {@link AbstractNavigableSetTest}.
+     * After modification operations, {@link #verify()} is invoked to ensure
+     * that the set and the other collection views are still valid.
+     *
+     * @return a {@link AbstractNavigableSetTest} instance for testing a tailset.
+     */
+    public BulkTest bulkTestNavigableSetTailSet() {
+        final int length = getFullElements().length;
+        final int lobound = length / 3;
+        return new TestNavigableSetSubSet(lobound, false, false);
+    }
+
+    public class TestNavigableSetSubSet extends AbstractNavigableSetTest<E> {
+
+        private int m_Type;
+        private int m_LowBound;
+        private int m_HighBound;
+        private E[] m_FullElements;
+        private E[] m_OtherElements;
+        private boolean m_Inclusive;
+
+        @SuppressWarnings("unchecked")
+        public TestNavigableSetSubSet(final int bound, final boolean head, final boolean inclusive) {
+            super("TestNavigableSetSubSet");
+            if (head) {
+                m_Type = TYPE_HEADSET;
+                m_Inclusive = inclusive;
+                m_HighBound = bound;
+
+                final int realBound = inclusive ? bound + 1 : bound;
+                m_FullElements = (E[]) new Object[realBound];
+                System.arraycopy(AbstractNavigableSetTest.this.getFullElements(), 0, m_FullElements, 0, realBound);
+                m_OtherElements = (E[]) new Object[bound - 1];
+                System.arraycopy(//src src_pos dst dst_pos length
+                  AbstractNavigableSetTest.this.getOtherElements(), 0, m_OtherElements, 0, bound - 1);
+            } else {
+                m_Type = TYPE_TAILSET;
+                m_Inclusive = inclusive;
+                m_LowBound = bound;
+                final Object[] allelements = AbstractNavigableSetTest.this.getFullElements();
+                final int realBound = inclusive ? bound : bound + 1;
+                m_FullElements = (E[]) new Object[allelements.length - realBound];
+                System.arraycopy(allelements, realBound, m_FullElements, 0, allelements.length - realBound);
+                m_OtherElements = (E[]) new Object[allelements.length - bound - 1];
+                System.arraycopy(//src src_pos dst dst_pos length
+                  AbstractNavigableSetTest.this.getOtherElements(), bound, m_OtherElements, 0, allelements.length - bound - 1);
+            }
+
+        } //type
+
+        @SuppressWarnings("unchecked")
+        public TestNavigableSetSubSet(final int lobound, final int hibound, final boolean inclusive) {
+            super("TestNavigableSetSubSet");
+            m_Type = TYPE_SUBSET;
+            m_LowBound = lobound;
+            m_HighBound = hibound;
+            m_Inclusive = inclusive;
+
+            final int fullLoBound = inclusive ? lobound : lobound + 1;
+            final int length = hibound - lobound + 1 - (inclusive ? 0 : 2);
+            m_FullElements = (E[]) new Object[length];
+            System.arraycopy(AbstractNavigableSetTest.this.getFullElements(), fullLoBound, m_FullElements, 0, length);
+            final int otherLength = hibound - lobound;
+            m_OtherElements = (E[]) new Object[otherLength - 1];
+            System.arraycopy(//src src_pos dst dst_pos length
+              AbstractNavigableSetTest.this.getOtherElements(), lobound, m_OtherElements, 0, otherLength - 1);
+        }
+
+        @Override
+        public boolean isNullSupported() {
+            return AbstractNavigableSetTest.this.isNullSupported();
+        }
+        @Override
+        public boolean isAddSupported() {
+            return AbstractNavigableSetTest.this.isAddSupported();
+        }
+        @Override
+        public boolean isRemoveSupported() {
+            return AbstractNavigableSetTest.this.isRemoveSupported();
+        }
+        @Override
+        public boolean isFailFastSupported() {
+            return AbstractNavigableSetTest.this.isFailFastSupported();
+        }
+
+        @Override
+        public E[] getFullElements() {
+            return m_FullElements;
+        }
+        @Override
+        public E[] getOtherElements() {
+            return m_OtherElements;
+        }
+
+        private NavigableSet<E> getSubSet(final NavigableSet<E> set) {
+            final E[] elements = AbstractNavigableSetTest.this.getFullElements();
+            switch (m_Type) {
+                case TYPE_SUBSET :
+                    return set.subSet(elements[m_LowBound], m_Inclusive, elements[m_HighBound], m_Inclusive);
+                case TYPE_HEADSET :
+                    return set.headSet(elements[m_HighBound], m_Inclusive);
+                case TYPE_TAILSET :
+                    return set.tailSet(elements[m_LowBound], m_Inclusive);
+                default :
+                    return null;
+            }
+        }
+
+        @Override
+        public NavigableSet<E> makeObject() {
+            return getSubSet(AbstractNavigableSetTest.this.makeObject());
+        }
+
+        @Override
+        public NavigableSet<E> makeFullCollection() {
+            return getSubSet(AbstractNavigableSetTest.this.makeFullCollection());
+        }
+
+        @Override
+        public boolean isTestSerialization() {
+            return false;
+        }
+
+        @Override
+        public BulkTest bulkTestSortedSetSubSet() {
+            return null;  // prevent infinite recursion
+        }
+        @Override
+        public BulkTest bulkTestSortedSetHeadSet() {
+            return null;  // prevent infinite recursion
+        }
+        @Override
+        public BulkTest bulkTestSortedSetTailSet() {
+            return null;  // prevent infinite recursion
+        }
+        @Override
+        public BulkTest bulkTestNavigableSetSubSet() {
+            return null;  // prevent infinite recursion
+        }
+        @Override
+        public BulkTest bulkTestNavigableSetHeadSet() {
+            return null;  // prevent infinite recursion
+        }
+        @Override
+        public BulkTest bulkTestNavigableSetTailSet() {
+            return null;  // prevent infinite recursion
+        }
+
+        static final int TYPE_SUBSET = 0;
+        static final int TYPE_TAILSET = 1;
+        static final int TYPE_HEADSET = 2;
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public NavigableSet<E> getCollection() {
+        return (NavigableSet<E>) super.getCollection();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public NavigableSet<E> getConfirmed() {
+        return (NavigableSet<E>) super.getConfirmed();
+    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractNavigableSetTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractSortedSetTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractSortedSetTest.java?rev=1682768&r1=1682767&r2=1682768&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractSortedSetTest.java (original)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/AbstractSortedSetTest.java Sun May 31 18:35:18 2015
@@ -173,7 +173,6 @@ public abstract class AbstractSortedSetT
         final int lobound = length / 3;
         final int hibound = lobound * 2;
         return new TestSortedSetSubSet(hibound, true);
-
     }
 
     /**

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java Sun May 31 18:35:18 2015
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.NavigableSet;
+import java.util.Set;
+import java.util.TreeSet;
+
+import junit.framework.Test;
+
+import org.apache.commons.collections4.BulkTest;
+import org.apache.commons.collections4.Predicate;
+import org.apache.commons.collections4.functors.TruePredicate;
+
+/**
+ * Extension of {@link AbstractNavigableSetTest} for exercising the
+ * {@link PredicatedNavigableSet} implementation.
+ *
+ * @since 4.1
+ * @version $Id$
+ */
+public class PredicatedNavigableSetTest<E> extends AbstractNavigableSetTest<E> {
+
+    public PredicatedNavigableSetTest(final String testName) {
+        super(testName);
+    }
+
+    public static Test suite() {
+        return BulkTest.makeSuite(PredicatedNavigableSetTest.class);
+    }
+
+    //-------------------------------------------------------------------
+
+    protected Predicate<E> truePredicate = TruePredicate.<E>truePredicate();
+
+    @Override
+    public NavigableSet<E> makeObject() {
+        return PredicatedNavigableSet.predicatedNavigableSet(new TreeSet<E>(), truePredicate);
+    }
+
+    @Override
+    public NavigableSet<E> makeFullCollection() {
+        final TreeSet<E> set = new TreeSet<E>();
+        set.addAll(Arrays.asList(getFullElements()));
+        return PredicatedNavigableSet.predicatedNavigableSet(set, truePredicate);
+    }
+
+//--------------------------------------------------------------------
+    protected Predicate<E> testPredicate =
+        new Predicate<E>() {
+            public boolean evaluate(final E o) {
+                return o instanceof String && ((String) o).startsWith("A");
+            }
+        };
+
+    protected PredicatedNavigableSet<E> makeTestSet() {
+        return PredicatedNavigableSet.predicatedNavigableSet(new TreeSet<E>(), testPredicate);
+    }
+
+    public void testGetSet() {
+        final PredicatedNavigableSet<E> set = makeTestSet();
+        assertTrue("returned set should not be null", set.decorated() != null);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testIllegalAdd() {
+        final NavigableSet<E> set = makeTestSet();
+        final String testString = "B";
+        try {
+            set.add((E) testString);
+            fail("Should fail string predicate.");
+        } catch (final IllegalArgumentException e) {
+            // expected
+        }
+        assertTrue("Collection shouldn't contain illegal element",
+         !set.contains(testString));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void testIllegalAddAll() {
+        final NavigableSet<E> set = makeTestSet();
+        final Set<E> elements = new TreeSet<E>();
+        elements.add((E) "Aone");
+        elements.add((E) "Atwo");
+        elements.add((E) "Bthree");
+        elements.add((E) "Afour");
+        try {
+            set.addAll(elements);
+            fail("Should fail string predicate.");
+        } catch (final IllegalArgumentException e) {
+            // expected
+        }
+        assertTrue("Set shouldn't contain illegal element", !set.contains("Aone"));
+        assertTrue("Set shouldn't contain illegal element", !set.contains("Atwo"));
+        assertTrue("Set shouldn't contain illegal element", !set.contains("Bthree"));
+        assertTrue("Set shouldn't contain illegal element", !set.contains("Afour"));
+    }
+
+    public void testComparator() {
+        final NavigableSet<E> set = makeTestSet();
+        final Comparator<? super E> c = set.comparator();
+        assertTrue("natural order, so comparator should be null", c == null);
+    }
+
+    @Override
+    public String getCompatibilityVersion() {
+        return "4.1";
+    }
+
+//    public void testCreate() throws Exception {
+//        resetEmpty();
+//        writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/PredicatedNavigableSet.emptyCollection.version4.1.obj");
+//        resetFull();
+//        writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/PredicatedNavigableSet.fullCollection.version4.1.obj");
+//    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/PredicatedNavigableSetTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java Sun May 31 18:35:18 2015
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.NavigableSet;
+import java.util.TreeSet;
+import java.util.Set;
+
+import junit.framework.Test;
+
+import org.apache.commons.collections4.BulkTest;
+import org.apache.commons.collections4.Transformer;
+import org.apache.commons.collections4.collection.TransformedCollectionTest;
+
+/**
+ * Extension of {@link AbstractNavigableSetTest} for exercising the
+ * {@link TransformedNavigableSet} implementation.
+ *
+ * @since 4.1
+ * @version $Id$
+ */
+public class TransformedNavigableSetTest<E> extends AbstractNavigableSetTest<E> {
+
+    public TransformedNavigableSetTest(final String testName) {
+        super(testName);
+    }
+
+    public static Test suite() {
+        return BulkTest.makeSuite(TransformedNavigableSetTest.class);
+    }
+
+    //-----------------------------------------------------------------------
+    @Override
+    @SuppressWarnings("unchecked")
+    public NavigableSet<E> makeObject() {
+        return TransformedNavigableSet.transformingNavigableSet(new TreeSet<E>(),
+                (Transformer<E, E>) TransformedCollectionTest.NOOP_TRANSFORMER);
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public NavigableSet<E> makeFullCollection() {
+        final NavigableSet<E> set = new TreeSet<E>();
+        set.addAll(Arrays.asList(getFullElements()));
+        return TransformedNavigableSet.transformingNavigableSet(set,
+                (Transformer<E, E>) TransformedCollectionTest.NOOP_TRANSFORMER);
+    }
+
+    //-----------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
+    public void testTransformedSet() {
+        final NavigableSet<E> set = TransformedNavigableSet.transformingNavigableSet(new TreeSet<E>(),
+                (Transformer<E, E>) TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
+        assertEquals(0, set.size());
+        final E[] els = (E[]) new Object[] { "1", "3", "5", "7", "2", "4", "6" };
+        for (int i = 0; i < els.length; i++) {
+            set.add(els[i]);
+            assertEquals(i + 1, set.size());
+            assertEquals(true, set.contains(Integer.valueOf((String) els[i])));
+        }
+
+        assertEquals(true, set.remove(Integer.valueOf((String) els[0])));
+    }
+
+    public void testTransformedSet_decorateTransform() {
+        final Set<Object> originalSet = new TreeSet<Object>();
+        final Object[] els = new Object[] {"1", "3", "5", "7", "2", "4", "6"};
+        Collections.addAll(originalSet, els);
+        final Set<?> set = TransformedSet.transformedSet(originalSet,
+                TransformedCollectionTest.STRING_TO_INTEGER_TRANSFORMER);
+        assertEquals(els.length, set.size());
+        for (final Object el : els) {
+            assertEquals(true, set.contains(Integer.valueOf((String) el)));
+        }
+
+        assertEquals(true, set.remove(Integer.valueOf((String) els[0])));
+    }
+
+    @Override
+    public String getCompatibilityVersion() {
+        return "4.1";
+    }
+
+//    public void testCreate() throws Exception {
+//        resetEmpty();
+//        writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/TransformedNavigableSet.emptyCollection.version4.1.obj");
+//        resetFull();
+//        writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/TransformedNavigableSet.fullCollection.version4.1.obj");
+//    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/TransformedNavigableSetTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java?rev=1682768&view=auto
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java (added)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java Sun May 31 18:35:18 2015
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.set;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.NavigableSet;
+import java.util.Set;
+import java.util.TreeSet;
+
+import junit.framework.Test;
+
+import org.apache.commons.collections4.BulkTest;
+
+/**
+ * Extension of {@link AbstractNavigableSetTest} for exercising the
+ * {@link UnmodifiableNavigableSet} implementation.
+ *
+ * @since 4.1
+ * @version $Id$
+ */
+public class UnmodifiableNavigableSetTest<E> extends AbstractNavigableSetTest<E> {
+    protected UnmodifiableNavigableSet<E> set = null;
+    protected ArrayList<E> array = null;
+
+    public UnmodifiableNavigableSetTest(final String testName) {
+        super(testName);
+    }
+
+    public static Test suite() {
+        return BulkTest.makeSuite(UnmodifiableNavigableSetTest.class);
+    }
+
+    //-------------------------------------------------------------------
+    @Override
+    public NavigableSet<E> makeObject() {
+        return UnmodifiableNavigableSet.unmodifiableNavigableSet(new TreeSet<E>());
+    }
+
+    @Override
+    public UnmodifiableNavigableSet<E> makeFullCollection() {
+        final TreeSet<E> set = new TreeSet<E>();
+        set.addAll(Arrays.asList(getFullElements()));
+        return (UnmodifiableNavigableSet<E>) UnmodifiableNavigableSet.unmodifiableNavigableSet(set);
+    }
+
+    @Override
+    public boolean isAddSupported() {
+        return false;
+    }
+
+    @Override
+    public boolean isRemoveSupported() {
+        return false;
+    }
+
+    //--------------------------------------------------------------------
+    @SuppressWarnings("unchecked")
+    protected void setupSet() {
+        set = makeFullCollection();
+        array = new ArrayList<E>();
+        array.add((E) Integer.valueOf(1));
+    }
+
+    /**
+     * Verify that base set and subsets are not modifiable
+     */
+    @SuppressWarnings("unchecked")
+    public void testUnmodifiable() {
+        setupSet();
+        verifyUnmodifiable(set);
+        verifyUnmodifiable(set.descendingSet());
+        verifyUnmodifiable(set.headSet((E) Integer.valueOf(1)));
+        verifyUnmodifiable(set.headSet((E) Integer.valueOf(1), true));
+        verifyUnmodifiable(set.tailSet((E) Integer.valueOf(1)));
+        verifyUnmodifiable(set.tailSet((E) Integer.valueOf(1), false));
+        verifyUnmodifiable(set.subSet((E) Integer.valueOf(1), (E) Integer.valueOf(3)));
+        verifyUnmodifiable(set.subSet((E) Integer.valueOf(1), false, (E) Integer.valueOf(3), false));
+        verifyUnmodifiable(set.subSet((E) Integer.valueOf(1), true, (E) Integer.valueOf(3), true));
+    }
+
+    public void testDecorateFactory() {
+        final NavigableSet<E> set = makeFullCollection();
+        assertSame(set, UnmodifiableNavigableSet.unmodifiableNavigableSet(set));
+
+        try {
+            UnmodifiableNavigableSet.unmodifiableNavigableSet(null);
+            fail();
+        } catch (final IllegalArgumentException ex) {}
+    }
+
+    /**
+     * Verifies that a set is not modifiable
+     */
+    @SuppressWarnings("unchecked")
+    public void verifyUnmodifiable(final Set<E> set) {
+        try {
+            set.add((E) "value");
+            fail("Expecting UnsupportedOperationException.");
+        } catch (final UnsupportedOperationException e) {
+            // expected
+        }
+        try {
+            set.addAll(new TreeSet<E>());
+            fail("Expecting UnsupportedOperationException.");
+        } catch (final UnsupportedOperationException e) {
+            // expected
+        }
+        try {
+            set.clear();
+            fail("Expecting UnsupportedOperationException.");
+        } catch (final UnsupportedOperationException e) {
+            // expected
+        }
+        try {
+            set.remove("x");
+            fail("Expecting UnsupportedOperationException.");
+        } catch (final UnsupportedOperationException e) {
+            // expected
+        }
+        try {
+            set.removeAll(array);
+            fail("Expecting UnsupportedOperationException.");
+        } catch (final UnsupportedOperationException e) {
+            // expected
+        }
+        try {
+            set.retainAll(array);
+            fail("Expecting UnsupportedOperationException.");
+        } catch (final UnsupportedOperationException e) {
+            // expected
+        }
+    }
+
+    public void testComparator() {
+        setupSet();
+        final Comparator<? super E> c = set.comparator();
+        assertTrue("natural order, so comparator should be null", c == null);
+    }
+
+    //-----------------------------------------------------------------------
+
+    @Override
+    public String getCompatibilityVersion() {
+        return "4.1";
+    }
+
+//    public void testCreate() throws Exception {
+//        resetEmpty();
+//        writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/UnmodifiableNavigableSet.emptyCollection.version4.1.obj");
+//        resetFull();
+//        writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/UnmodifiableNavigableSet.fullCollection.version4.1.obj");
+//    }
+
+}

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Revision HeadURL

Propchange: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.emptyCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.emptyCollection.version4.1.obj?rev=1682768&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.emptyCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.fullCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.fullCollection.version4.1.obj?rev=1682768&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/PredicatedNavigableSet.fullCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.emptyCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.emptyCollection.version4.1.obj?rev=1682768&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.emptyCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.fullCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.fullCollection.version4.1.obj?rev=1682768&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/TransformedNavigableSet.fullCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.emptyCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.emptyCollection.version4.1.obj?rev=1682768&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.emptyCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.fullCollection.version4.1.obj
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.fullCollection.version4.1.obj?rev=1682768&view=auto
==============================================================================
Binary file - no diff available.

Propchange: commons/proper/collections/trunk/src/test/resources/data/test/UnmodifiableNavigableSet.fullCollection.version4.1.obj
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream