///*
// * 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.Collection;
//import java.util.HashSet;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Set;
//
///**
// * Extension of {@link AbstractSetTest} for exercising the
// * {@link ListOrderedSet} implementation.
// *
// * @version $Id$
// * @since 3.0
// */
//public class ListOrderedSetTest<E> extends AbstractSetTest<E> {
//
// private static final Integer ZERO = Integer.valueOf(0);
//
// private static final Integer ONE = Integer.valueOf(1);
//
// private static final Integer TWO = Integer.valueOf(2);
//
// private static final Integer THREE = Integer.valueOf(3);
//
// public ListOrderedSetTest(final String testName) {
// super(testName);
// }
//
// @Override
// public ListOrderedSet<E> makeObject() {
// return ListOrderedSet.listOrderedSet(new HashSet<E>());
// }
//
// @SuppressWarnings("unchecked")
// protected ListOrderedSet<E> setupSet() {
// final ListOrderedSet<E> set = makeObject();
//
// for (int i = 0; i < 10; i++) {
// set.add((E) Integer.toString(i));
// }
// return set;
// }
//
// @SuppressWarnings("unchecked")
// public void testOrdering() {
// final ListOrderedSet<E> set = setupSet();
// Iterator<E> it = set.iterator();
//
// for (int i = 0; i < 10; i++) {
// assertEquals("Sequence is wrong", Integer.toString(i), it.next());
// }
//
// for (int i = 0; i < 10; i += 2) {
// assertTrue("Must be able to remove int", set.remove(Integer.toString(i)));
// }
//
// it = set.iterator();
// for (int i = 1; i < 10; i += 2) {
// assertEquals("Sequence is wrong after remove ", Integer.toString(i), it.next());
// }
//
// for (int i = 0; i < 10; i++) {
// set.add((E) Integer.toString(i));
// }
//
// assertEquals("Size of set is wrong!", 10, set.size());
//
// it = set.iterator();
// for (int i = 1; i < 10; i += 2) {
// assertEquals("Sequence is wrong", Integer.toString(i), it.next());
// }
// for (int i = 0; i < 10; i += 2) {
// assertEquals("Sequence is wrong", Integer.toString(i), it.next());
// }
// }
//
// @SuppressWarnings("unchecked")
// public void testListAddRemove() {
// final ListOrderedSet<E> set = makeObject();
// final List<E> view = set.asList();
// set.add((E) ZERO);
// set.add((E) ONE);
// set.add((E) TWO);
//
// assertEquals(3, set.size());
// assertSame(ZERO, set.get(0));
// assertSame(ONE, set.get(1));
// assertSame(TWO, set.get(2));
// assertEquals(3, view.size());
// assertSame(ZERO, view.get(0));
// assertSame(ONE, view.get(1));
// assertSame(TWO, view.get(2));
//
// assertEquals(0, set.indexOf(ZERO));
// assertEquals(1, set.indexOf(ONE));
// assertEquals(2, set.indexOf(TWO));
//
// set.remove(1);
// assertEquals(2, set.size());
// assertSame(ZERO, set.get(0));
// assertSame(TWO, set.get(1));
// assertEquals(2, view.size());
// assertSame(ZERO, view.get(0));
// assertSame(TWO, view.get(1));
// }
//
// @SuppressWarnings("unchecked")
// public void testListAddIndexed() {
// final ListOrderedSet<E> set = makeObject();
// set.add((E) ZERO);
// set.add((E) TWO);
//
// set.add(1, (E) ONE);
// assertEquals(3, set.size());
// assertSame(ZERO, set.get(0));
// assertSame(ONE, set.get(1));
// assertSame(TWO, set.get(2));
//
// set.add(0, (E) ONE);
// assertEquals(3, set.size());
// assertSame(ZERO, set.get(0));
// assertSame(ONE, set.get(1));
// assertSame(TWO, set.get(2));
//
// final List<E> list = new ArrayList<E>();
// list.add((E) ZERO);
// list.add((E) TWO);
//
// set.addAll(0, list);
// assertEquals(3, set.size());
// assertSame(ZERO, set.get(0));
// assertSame(ONE, set.get(1));
// assertSame(TWO, set.get(2));
//
// list.add(0, (E) THREE); // list = [3,0,2]
// set.remove(TWO); // set = [0,1]
// set.addAll(1, list);
// assertEquals(4, set.size());
// assertSame(ZERO, set.get(0));
// assertSame(THREE, set.get(1));
// assertSame(TWO, set.get(2));
// assertSame(ONE, set.get(3));
// }
//
// @SuppressWarnings("unchecked")
// public void testListAddReplacing() {
// final ListOrderedSet<E> set = makeObject();
// final A a = new A();
// final B b = new B();
// set.add((E) a);
// assertEquals(1, set.size());
// set.add((E) b); // will match but not replace A as equal
// assertEquals(1, set.size());
// assertSame(a, set.decorated().iterator().next());
// assertSame(a, set.iterator().next());
// assertSame(a, set.get(0));
// assertSame(a, set.asList().get(0));
// }
//
// @SuppressWarnings("unchecked")
// public void testRetainAll() {
// final List<E> list = new ArrayList<E>(10);
// final Set<E> set = new HashSet<E>(10);
// final ListOrderedSet<E> orderedSet = ListOrderedSet.listOrderedSet(set, list);
// for (int i = 0; i < 10; ++i) {
// orderedSet.add((E) Integer.valueOf(10 - i - 1));
// }
//
// final Collection<E> retained = new ArrayList<E>(5);
// for (int i = 0; i < 5; ++i) {
// retained.add((E) Integer.valueOf(i * 2));
// }
//
// assertTrue(orderedSet.retainAll(retained));
// assertEquals(5, orderedSet.size());
// // insertion order preserved?
// assertEquals(Integer.valueOf(8), orderedSet.get(0));
// assertEquals(Integer.valueOf(6), orderedSet.get(1));
// assertEquals(Integer.valueOf(4), orderedSet.get(2));
// assertEquals(Integer.valueOf(2), orderedSet.get(3));
// assertEquals(Integer.valueOf(0), orderedSet.get(4));
// }
//
// /*
// * test case for https://issues.apache.org/jira/browse/COLLECTIONS-426
// */
// @SuppressWarnings("boxing") // OK in test code
// public void testRetainAllCollections426() {
// final int size = 100000;
// final ListOrderedSet<Integer> set = new ListOrderedSet<Integer>();
// for (int i = 0; i < size; i++) {
// set.add(i);
// }
// final ArrayList<Integer> list = new ArrayList<Integer>();
// for (int i = size; i < 2 * size; i++) {
// list.add(i);
// }
//
// final long start = System.currentTimeMillis();
// set.retainAll(list);
// final long stop = System.currentTimeMillis();
//
// // make sure retainAll completes under 5 seconds
// // TODO if test is migrated to JUnit 4, add a Timeout rule.
// // http://kentbeck.github.com/junit/javadoc/latest/org/junit/rules/Timeout.html
// assertTrue(stop - start < 5000);
// }
//
// static class A {
//
// @Override
// public boolean equals(final Object obj) {
// return obj instanceof A || obj instanceof B;
// }
//
// @Override
// public int hashCode() {
// return 1;
// }
// }
//
// static class B {
//
// @Override
// public boolean equals(final Object obj) {
// return obj instanceof A || obj instanceof B;
// }
//
// @Override
// public int hashCode() {
// return 1;
// }
// }
//
// public void testDecorator() {
// try {
// ListOrderedSet.listOrderedSet((List<E>) null);
// fail();
// } catch (final IllegalArgumentException ex) {
// }
// try {
// ListOrderedSet.listOrderedSet((Set<E>) null);
// fail();
// } catch (final IllegalArgumentException ex) {
// }
// try {
// ListOrderedSet.listOrderedSet(null, null);
// fail();
// } catch (final IllegalArgumentException ex) {
// }
// try {
// ListOrderedSet.listOrderedSet(new HashSet<E>(), null);
// fail();
// } catch (final IllegalArgumentException ex) {
// }
// try {
// ListOrderedSet.listOrderedSet(null, new ArrayList<E>());
// fail();
// } catch (final IllegalArgumentException ex) {
// }
// }
//
// @Override
// public String getCompatibilityVersion() {
// return "4";
// }
//
//// public void testCreate() throws Exception {
//// resetEmpty();
//// writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/ListOrderedSet.emptyCollection.version4.obj");
//// resetFull();
//// writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/ListOrderedSet.fullCollection.version4.obj");
//// }
//
//}