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