1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.util;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
204c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.ArrayList;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
2260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniakimport java.util.ConcurrentModificationException;
234c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.HashMap;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashSet;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator;
264c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.List;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Serializable;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Method;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
344c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport java.util.Spliterator;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
364c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathimport libcore.java.util.SpliteratorTester;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.testframework.serialization.SerializationTest;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class HashSetTest extends junit.framework.TestCase {
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    HashSet hs;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
43740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann    Object[] objArray;
44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
46229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#HashSet()
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Constructor() {
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.HashSet()
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet hs2 = new HashSet();
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Created incorrect HashSet", 0, hs2.size());
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
55229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#HashSet(int)
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorI() {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.HashSet(int)
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet hs2 = new HashSet(5);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Created incorrect HashSet", 0, hs2.size());
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new HashSet(-1);
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException e) {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fail(
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Failed to throw IllegalArgumentException for capacity < 0");
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
71229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#HashSet(int, float)
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorIF() {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.HashSet(int, float)
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet hs2 = new HashSet(5, (float) 0.5);
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Created incorrect HashSet", 0, hs2.size());
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new HashSet(0, 0);
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException e) {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fail(
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Failed to throw IllegalArgumentException for initial load factor <= 0");
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
87229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#HashSet(java.util.Collection)
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_util_Collection() {
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.HashSet(java.util.Collection)
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet hs2 = new HashSet(Arrays.asList(objArray));
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int counter = 0; counter < objArray.length; counter++)
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("HashSet does not contain correct elements", hs
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .contains(objArray[counter]));
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("HashSet created from collection incorrect size",
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                hs2.size() == objArray.length);
97f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new HashSet(null);
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
107229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#add(java.lang.Object)
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addLjava_lang_Object() {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.HashSet.add(java.lang.Object)
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int size = hs.size();
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.add(new Integer(8));
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Added element already contained by set", hs.size() == size);
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.add(new Integer(-9));
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to increment set size after add",
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                hs.size() == size + 1);
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to add element to set", hs.contains(new Integer(-9)));
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
121229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#clear()
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clear() {
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.HashSet.clear()
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set orgSet = (Set) hs.clone();
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.clear();
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator i = orgSet.iterator();
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Returned non-zero size after clear", 0, hs.size());
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (i.hasNext())
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to clear set", !hs.contains(i.next()));
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
134229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#clone()
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_clone() {
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Object java.util.HashSet.clone()
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet hs2 = (HashSet) hs.clone();
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("clone returned an equivalent HashSet", hs != hs2);
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("clone did not return an equal HashSet", hs.equals(hs2));
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
144229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#contains(java.lang.Object)
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_containsLjava_lang_Object() {
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.HashSet.contains(java.lang.Object)
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned false for valid object", hs.contains(objArray[90]));
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned true for invalid Object", !hs
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .contains(new Object()));
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet s = new HashSet();
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s.add(null);
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Cannot handle null", s.contains(null));
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
158229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#isEmpty()
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_isEmpty() {
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.HashSet.isEmpty()
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Empty set returned false", new HashSet().isEmpty());
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Non-empty set returned true", !hs.isEmpty());
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
167229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#iterator()
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_iterator() {
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Iterator java.util.HashSet.iterator()
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator i = hs.iterator();
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int x = 0;
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (i.hasNext()) {
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to iterate over all elements", hs.contains(i
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .next()));
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ++x;
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned iteration of incorrect size", hs.size() == x);
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet s = new HashSet();
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s.add(null);
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Cannot handle null", s.iterator().next());
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
186229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#remove(java.lang.Object)
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeLjava_lang_Object() {
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.util.HashSet.remove(java.lang.Object)
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int size = hs.size();
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.remove(new Integer(98));
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to remove element", !hs.contains(new Integer(98)));
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Failed to decrement set size", hs.size() == size - 1);
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet s = new HashSet();
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s.add(null);
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Cannot handle null", s.remove(null));
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(hs.remove(new Integer(-98)));
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
202229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#size()
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_size() {
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method int java.util.HashSet.size()
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned incorrect size", hs.size() == (objArray.length + 1));
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.clear();
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Cleared set returned non-zero size", 0, hs.size());
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
212229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.HashSet#SerializationTest
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Serialization() throws Exception{
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        HashSet<String> hs = new HashSet<String>();
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.add("hello");
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.add("world");
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SerializationTest.verifySelf(hs, comparator);
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SerializationTest.verifyGolden(this, hs, comparator);
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22244973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root    /*
22344973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root     * Bug 26294011
22444973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root     */
22544973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root    public void test_empty_clone() throws Exception {
22644973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root        HashSet<Integer> emptyHs = new HashSet<Integer>();
22744973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root        HashSet<Integer> cloned = (HashSet) emptyHs.clone();
22844973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root        cloned.add(new Integer(8));
22944973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root    }
23044973ad1b6b55b8afa2aba3abad8166e31e772d5Kenny Root
23160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach() throws Exception {
23260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak      HashSet<Integer> hs = new HashSet<>();
23360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak      hs.add(0);
23460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak      hs.add(1);
23560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak      hs.add(2);
23660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
23760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak      HashSet<Integer> output = new HashSet<>();
23860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak      hs.forEach(k -> output.add(k));
23960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
24060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak      assertEquals(hs, output);
24160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
24260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
24360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach_NPE() throws Exception {
24460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        HashSet<String> set = new HashSet<>();
24560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        try {
24660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            set.forEach(null);
24760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            fail();
24860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        } catch(NullPointerException expected) {}
24960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
25060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
25160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    public void test_forEach_CME() throws Exception {
25260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        HashSet<String> set = new HashSet<>();
25360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        set.add("one");
25460796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        set.add("two");
25560796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        try {
25660796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            set.forEach(new java.util.function.Consumer<String>() {
25760796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                    @Override
25860796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                    public void accept(String k) {set.add("foo");}
25960796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak                });
26060796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak            fail();
26160796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak        } catch(ConcurrentModificationException expected) {}
26260796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak    }
26360796efea3a74e02aea384b8eb56103ea21b880bPrzemyslaw Szczepaniak
2644c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath    public void test_spliterator() throws Exception {
2654c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        HashSet<String> hashSet = new HashSet<>();
2664c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        List<String> keys = Arrays.asList(
2674c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath                "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p");
2684c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        hashSet.addAll(keys);
2694c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
2704c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        ArrayList<String> expectedKeys = new ArrayList<>(keys);
2714c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runBasicIterationTests_unordered(hashSet.spliterator(), expectedKeys,
2724c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath                String::compareTo);
2734c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runBasicSplitTests(hashSet, expectedKeys);
2744c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.testSpliteratorNPE(hashSet.spliterator());
2754c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
2764c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        assertTrue(hashSet.spliterator().hasCharacteristics(Spliterator.DISTINCT));
2774c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath        SpliteratorTester.runDistinctTests(keys);
2784c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath    }
2794c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
285740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        objArray = new Object[1000];
286740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        for (int i = 0; i < objArray.length; i++) {
287740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann            objArray[i] = new Integer(i);
288740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        }
289740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs = new HashSet();
291740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        for (int i = 0; i < objArray.length; i++) {
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hs.add(objArray[i]);
293740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        }
294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hs.add(null);
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method is called after a test is executed.
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
303740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        hs = null;
304740cbf1565815f08d9fb3a0a8d4a581cdc0d2a9dJorg Pleumann        objArray = null;
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
306f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
307f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    private static final SerializationTest.SerializableAssert comparator = new
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                       SerializationTest.SerializableAssert() {
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void assertDeserialized(Serializable initial, Serializable deserialized) {
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            HashSet<String> initialHs = (HashSet<String>) initial;
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            HashSet<String> deseriaHs = (HashSet<String>) deserialized;
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("should be equal", initialHs.size(), deseriaHs.size());
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("should be equal", initialHs, deseriaHs);
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
315f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    };
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
318