1 /*
2  * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
3  * 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  * 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  */
23 
24 /*
25  * @test
26  * @bug     4339792
27  * @summary Basic test for Collections.disjoint
28  * @author  Josh Bloch
29  * @key randomness
30  */
31 
32 package test.java.util.Collections;
33 
34 import java.util.ArrayList;
35 import java.util.Collections;
36 import java.util.HashSet;
37 import java.util.List;
38 import java.util.Random;
39 
40 public class Disjoint {
41     static final int N = 20;
42 
main(String[] args)43     public static void main(String[] args) {
44         // Make an array of lists each of which shares a single element
45         // with its "neighbors," and no elements with other lists in the array
46         Random rnd = new Random();
47         List[] lists = new List[N];
48         int x = 0;
49         for (int i = 0; i < N; i++) {
50             int size = rnd.nextInt(10) + 2;
51             List<Integer> list = new ArrayList<>(size);
52             for (int j = 1; j < size; j++)
53                 list.add(x++);
54             list.add(x);
55             Collections.shuffle(list);
56 
57             lists[i] = list;
58         }
59 
60         for (int i = 0; i < N; i++) {
61             for (int j = 0; j < N; j++) {
62                 boolean disjoint = (Math.abs(i - j) > 1);
63                 List<Integer> a = (List<Integer>) lists[i];
64                 List<Integer> b = (List<Integer>) lists[j];
65 
66                 if (Collections.disjoint(a, b) != disjoint)
67                     throw new RuntimeException("A: " + i + ", " + j);
68                 if (Collections.disjoint(new HashSet<Integer>(a), b)
69                     != disjoint)
70                     throw new RuntimeException("B: " + i + ", " + j);
71                 if (Collections.disjoint(new HashSet<Integer>(a),
72                                          new HashSet<Integer>(b)) != disjoint)
73                     throw new RuntimeException("C: " + i + ", " + j);
74             }
75         }
76     }
77 }
78