ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/jtreg/util/Collections/CheckedListBash.java
Revision: 1.9
Committed: Mon Jan 8 03:12:03 2018 UTC (6 years, 4 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +7 -1 lines
Log Message:
organize imports

File Contents

# User Rev Content
1 jsr166 1.1 /*
2 jsr166 1.4 * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
3 jsr166 1.1 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4     *
5     * This code is free software; you can redistribute it and/or modify it
6     * under the terms of the GNU General Public License version 2 only, as
7     * published by the Free Software Foundation.
8     *
9     * This code is distributed in the hope that it will be useful, but WITHOUT
10     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11     * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12     * version 2 for more details (a copy is included in the LICENSE file that
13     * accompanied this code).
14     *
15     * You should have received a copy of the GNU General Public License version
16     * 2 along with this work; if not, write to the Free Software Foundation,
17     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18     *
19 jsr166 1.4 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20     * or visit www.oracle.com if you need additional information or have any
21     * questions.
22 jsr166 1.1 */
23    
24     /*
25     * @test
26     * @bug 4904067
27     * @summary Unit test for Collections.checkedList
28     * @author Josh Bloch
29 jsr166 1.6 * @key randomness
30 jsr166 1.1 */
31    
32 jsr166 1.9 import java.util.ArrayList;
33     import java.util.Arrays;
34     import java.util.Collections;
35     import java.util.Iterator;
36     import java.util.List;
37     import java.util.ListIterator;
38     import java.util.Random;
39 jsr166 1.1
40     public class CheckedListBash {
41     static Random rnd = new Random();
42    
43     public static void main(String[] args) {
44     int numItr = 100;
45     int listSize = 100;
46    
47     for (int i=0; i<numItr; i++) {
48     List s1 = newList();
49     AddRandoms(s1, listSize);
50    
51     List s2 = newList();
52     AddRandoms(s2, listSize);
53    
54     List intersection = clone(s1); intersection.retainAll(s2);
55     List diff1 = clone(s1); diff1.removeAll(s2);
56     List diff2 = clone(s2); diff2.removeAll(s1);
57     List union = clone(s1); union.addAll(s2);
58    
59     if (diff1.removeAll(diff2))
60     fail("List algebra identity 2 failed");
61     if (diff1.removeAll(intersection))
62     fail("List algebra identity 3 failed");
63     if (diff2.removeAll(diff1))
64     fail("List algebra identity 4 failed");
65     if (diff2.removeAll(intersection))
66     fail("List algebra identity 5 failed");
67     if (intersection.removeAll(diff1))
68     fail("List algebra identity 6 failed");
69     if (intersection.removeAll(diff1))
70     fail("List algebra identity 7 failed");
71    
72     intersection.addAll(diff1); intersection.addAll(diff2);
73     if (!(intersection.containsAll(union) &&
74     union.containsAll(intersection)))
75     fail("List algebra identity 1 failed");
76    
77     Iterator e = union.iterator();
78     while (e.hasNext())
79     intersection.remove(e.next());
80     if (!intersection.isEmpty())
81     fail("Copy nonempty after deleting all elements.");
82    
83     e = union.iterator();
84     while (e.hasNext()) {
85     Object o = e.next();
86     if (!union.contains(o))
87     fail("List doesn't contain one of its elements.");
88     e.remove();
89     }
90     if (!union.isEmpty())
91     fail("List nonempty after deleting all elements.");
92    
93     s1.clear();
94     if (s1.size() != 0)
95     fail("Clear didn't reduce size to zero.");
96    
97     s1.addAll(0, s2);
98     if (!(s1.equals(s2) && s2.equals(s1)))
99     fail("addAll(int, Collection) doesn't work.");
100     // Reverse List
101     for (int j=0, n=s1.size(); j<n; j++)
102     s1.set(j, s1.set(n-j-1, s1.get(j)));
103     // Reverse it again
104     for (int j=0, n=s1.size(); j<n; j++)
105     s1.set(j, s1.set(n-j-1, s1.get(j)));
106     if (!(s1.equals(s2) && s2.equals(s1)))
107     fail("set(int, Object) doesn't work");
108     }
109    
110     List s = newList();
111     for (int i=0; i<listSize; i++)
112     s.add(new Integer(i));
113     if (s.size() != listSize)
114     fail("Size of [0..n-1] != n");
115    
116     List even = clone(s);
117     Iterator it = even.iterator();
118 jsr166 1.3 while (it.hasNext())
119     if (((Integer)it.next()).intValue() % 2 == 1)
120 jsr166 1.1 it.remove();
121     it = even.iterator();
122 jsr166 1.3 while (it.hasNext())
123     if (((Integer)it.next()).intValue() % 2 == 1)
124 jsr166 1.1 fail("Failed to remove all odd nubmers.");
125    
126     List odd = clone(s);
127     for (int i=0; i<(listSize/2); i++)
128     odd.remove(i);
129     for (int i=0; i<(listSize/2); i++)
130 jsr166 1.3 if (((Integer)odd.get(i)).intValue() % 2 != 1)
131 jsr166 1.1 fail("Failed to remove all even nubmers.");
132    
133     List all = clone(odd);
134     for (int i=0; i<(listSize/2); i++)
135     all.add(2*i, even.get(i));
136     if (!all.equals(s))
137     fail("Failed to reconstruct ints from odds and evens.");
138    
139     all = clone(odd);
140     ListIterator itAll = all.listIterator(all.size());
141     ListIterator itEven = even.listIterator(even.size());
142     while (itEven.hasPrevious()) {
143     itAll.previous();
144     itAll.add(itEven.previous());
145     itAll.previous(); // ???
146     }
147     itAll = all.listIterator();
148     while (itAll.hasNext()) {
149     Integer i = (Integer)itAll.next();
150     itAll.set(new Integer(i.intValue()));
151     }
152     itAll = all.listIterator();
153     it = s.iterator();
154 jsr166 1.3 while (it.hasNext())
155     if (it.next()==itAll.next())
156 jsr166 1.1 fail("Iterator.set failed to change value.");
157     if (!all.equals(s))
158     fail("Failed to reconstruct ints with ListIterator.");
159    
160     it = all.listIterator();
161     int i=0;
162     while (it.hasNext()) {
163     Object o = it.next();
164     if (all.indexOf(o) != all.lastIndexOf(o))
165     fail("Apparent duplicate detected.");
166     if (all.subList(i, all.size()).indexOf(o) != 0 ||
167     all.subList(i+1, all.size()).indexOf(o) != -1)
168     fail("subList/indexOf is screwy.");
169     if (all.subList(0,i+1).lastIndexOf(o) != i)
170     fail("subList/lastIndexOf is screwy.");
171     i++;
172     }
173    
174     List l = newList();
175     AddRandoms(l, listSize);
176     Integer[] ia = (Integer[]) l.toArray(new Integer[0]);
177     if (!l.equals(Arrays.asList(ia)))
178     fail("toArray(Object[]) is hosed (1)");
179     ia = new Integer[listSize];
180     Integer[] ib = (Integer[]) l.toArray(ia);
181     if (ia != ib || !l.equals(Arrays.asList(ia)))
182     fail("toArray(Object[]) is hosed (2)");
183     ia = new Integer[listSize+1];
184     ia[listSize] = new Integer(69);
185     ib = (Integer[]) l.toArray(ia);
186     if (ia != ib || ia[listSize] != null
187     || !l.equals(Arrays.asList(ia).subList(0, listSize)))
188     fail("toArray(Object[]) is hosed (3)");
189    
190     }
191    
192     // Done inefficiently so as to exercise toArray
193     static List clone(List s) {
194     List a = Arrays.asList(s.toArray());
195     if (s.hashCode() != a.hashCode())
196     fail("Incorrect hashCode computation.");
197    
198     List clone = newList();
199     clone.addAll(a);
200     if (!s.equals(clone))
201     fail("List not equal to copy.");
202     if (!s.containsAll(clone))
203     fail("List does not contain copy.");
204     if (!clone.containsAll(s))
205     fail("Copy does not contain list.");
206    
207     return clone;
208     }
209    
210     static List newList() {
211 jsr166 1.6 List s = Collections.checkedList(new ArrayList(), Integer.class);
212 jsr166 1.1 if (!s.isEmpty())
213     fail("New instance non empty.");
214     return s;
215     }
216    
217     static void AddRandoms(List s, int n) {
218 jsr166 1.8 for (int i = 0; i < n; i++) {
219     Integer e = rnd.nextInt(n);
220 jsr166 1.1
221     int preSize = s.size();
222     if (!s.add(e))
223 jsr166 1.7 fail("Add failed.");
224 jsr166 1.1 int postSize = s.size();
225 jsr166 1.8 if (postSize - preSize != 1)
226 jsr166 1.7 fail("Add didn't increase size by 1.");
227 jsr166 1.1 }
228     }
229    
230     static void fail(String s) {
231     throw new RuntimeException(s);
232     }
233     }