View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.collections4.set;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  import static org.junit.jupiter.api.Assertions.assertSame;
21  import static org.junit.jupiter.api.Assertions.assertTrue;
22  
23  import java.util.ArrayList;
24  import java.util.Iterator;
25  import java.util.List;
26  
27  import org.junit.jupiter.api.Test;
28  
29  /**
30   * Extension of {@link AbstractSetTest} for exercising the {@link ListOrderedSet}
31   * implementation.
32   */
33  public class ListOrderedSet2Test<E> extends AbstractSetTest<E> {
34  
35      private static final Integer ZERO = Integer.valueOf(0);
36      private static final Integer ONE = Integer.valueOf(1);
37      private static final Integer TWO = Integer.valueOf(2);
38      private static final Integer THREE = Integer.valueOf(3);
39  
40      public ListOrderedSet2Test() {
41          super(ListOrderedSet2Test.class.getSimpleName());
42      }
43  
44      @Override
45      public String getCompatibilityVersion() {
46          return "4";
47      }
48  
49      @Override
50      public ListOrderedSet<E> makeObject() {
51          return new ListOrderedSet<>();
52      }
53  
54      @SuppressWarnings("unchecked")
55      protected ListOrderedSet<E> setupSet() {
56          final ListOrderedSet<E> set = makeObject();
57  
58          for (int i = 0; i < 10; i++) {
59              set.add((E) Integer.toString(i));
60          }
61          return set;
62      }
63  
64      @Test
65      @SuppressWarnings("unchecked")
66      public void testListAddIndexed() {
67          final ListOrderedSet<E> set = makeObject();
68          set.add((E) ZERO);
69          set.add((E) TWO);
70  
71          set.add(1, (E) ONE);
72          assertEquals(3, set.size());
73          assertSame(ZERO, set.get(0));
74          assertSame(ONE, set.get(1));
75          assertSame(TWO, set.get(2));
76  
77          set.add(0, (E) ONE);
78          assertEquals(3, set.size());
79          assertSame(ZERO, set.get(0));
80          assertSame(ONE, set.get(1));
81          assertSame(TWO, set.get(2));
82  
83          final List<E> list = new ArrayList<>();
84          list.add((E) ZERO);
85          list.add((E) TWO);
86  
87          set.addAll(0, list);
88          assertEquals(3, set.size());
89          assertSame(ZERO, set.get(0));
90          assertSame(ONE, set.get(1));
91          assertSame(TWO, set.get(2));
92  
93          list.add(0, (E) THREE); // list = [3,0,2]
94          set.remove(TWO);    //  set = [0,1]
95          set.addAll(1, list);
96          assertEquals(4, set.size());
97          assertSame(ZERO, set.get(0));
98          assertSame(THREE, set.get(1));
99          assertSame(TWO, set.get(2));
100         assertSame(ONE, set.get(3));
101     }
102 
103     @Test
104     @SuppressWarnings("unchecked")
105     public void testListAddRemove() {
106         final ListOrderedSet<E> set = makeObject();
107         final List<E> view = set.asList();
108         set.add((E) ZERO);
109         set.add((E) ONE);
110         set.add((E) TWO);
111 
112         assertEquals(3, set.size());
113         assertSame(ZERO, set.get(0));
114         assertSame(ONE, set.get(1));
115         assertSame(TWO, set.get(2));
116         assertEquals(3, view.size());
117         assertSame(ZERO, view.get(0));
118         assertSame(ONE, view.get(1));
119         assertSame(TWO, view.get(2));
120 
121         assertEquals(0, set.indexOf(ZERO));
122         assertEquals(1, set.indexOf(ONE));
123         assertEquals(2, set.indexOf(TWO));
124 
125         set.remove(1);
126         assertEquals(2, set.size());
127         assertSame(ZERO, set.get(0));
128         assertSame(TWO, set.get(1));
129         assertEquals(2, view.size());
130         assertSame(ZERO, view.get(0));
131         assertSame(TWO, view.get(1));
132     }
133 
134     @Test
135     @SuppressWarnings("unchecked")
136     public void testOrdering() {
137         final ListOrderedSet<E> set = setupSet();
138         Iterator<E> it = set.iterator();
139 
140         for (int i = 0; i < 10; i++) {
141             assertEquals(Integer.toString(i), it.next(), "Sequence is wrong");
142         }
143 
144         for (int i = 0; i < 10; i += 2) {
145             assertTrue(set.remove(Integer.toString(i)), "Must be able to remove int");
146         }
147 
148         it = set.iterator();
149         for (int i = 1; i < 10; i += 2) {
150             assertEquals(Integer.toString(i), it.next(), "Sequence is wrong after remove ");
151         }
152 
153         for (int i = 0; i < 10; i++) {
154             set.add((E) Integer.toString(i));
155         }
156 
157         assertEquals(10, set.size(), "Size of set is wrong!");
158 
159         it = set.iterator();
160         for (int i = 1; i < 10; i += 2) {
161             assertEquals(Integer.toString(i), it.next(), "Sequence is wrong");
162         }
163         for (int i = 0; i < 10; i += 2) {
164             assertEquals(Integer.toString(i), it.next(), "Sequence is wrong");
165         }
166     }
167 
168 //    public void testCreate() throws Exception {
169 //        resetEmpty();
170 //        writeExternalFormToDisk((java.io.Serializable) collection, "D:/dev/collections/data/test/ListOrderedSet.emptyCollection.version3.1.obj");
171 //        resetFull();
172 //        writeExternalFormToDisk((java.io.Serializable) collection, "D:/dev/collections/data/test/ListOrderedSet.fullCollection.version3.1.obj");
173 //    }
174 
175 }