1 /* 2 * Copyright (c) 2017, 2018, 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package jdk.internal.vm.compiler.collections.test; 42 43 import java.util.ArrayList; 44 import java.util.Arrays; 45 import java.util.Iterator; 46 47 import jdk.internal.vm.compiler.collections.EconomicSet; 48 import jdk.internal.vm.compiler.collections.Equivalence; 49 import org.junit.Assert; 50 import org.junit.Test; 51 52 public class EconomicSetTest { 53 54 @Test 55 public void testUtilities() { 56 EconomicSet<Integer> set = EconomicSet.create(0); 57 set.add(0); 58 Assert.assertTrue(set.add(1)); 59 Assert.assertEquals(set.size(), 2); 60 Assert.assertFalse(set.add(1)); 61 Assert.assertEquals(set.size(), 2); 62 set.remove(1); 63 Assert.assertEquals(set.size(), 1); 64 set.remove(2); 65 Assert.assertEquals(set.size(), 1); 66 Assert.assertTrue(set.add(1)); 67 set.clear(); 68 Assert.assertEquals(set.size(), 0); 69 } 70 71 @Test 72 public void testAddAll() { 73 EconomicSet<Integer> set = EconomicSet.create(); 74 set.addAll(Arrays.asList(0, 1, 0)); 75 Assert.assertEquals(set.size(), 2); 76 77 EconomicSet<Integer> newSet = EconomicSet.create(); 78 newSet.addAll(Arrays.asList(1, 2)); 79 Assert.assertEquals(newSet.size(), 2); 80 newSet.addAll(set); 81 Assert.assertEquals(newSet.size(), 3); 82 } 83 84 @Test 85 public void testRemoveAll() { 86 EconomicSet<Integer> set = EconomicSet.create(); 87 set.addAll(Arrays.asList(0, 1)); 88 89 set.removeAll(Arrays.asList(1, 2)); 90 Assert.assertEquals(set.size(), 1); 91 92 set.removeAll(EconomicSet.create(set)); 93 Assert.assertEquals(set.size(), 0); 94 } 95 96 @Test 97 public void testRetainAll() { 98 EconomicSet<Integer> set = EconomicSet.create(); 99 set.addAll(Arrays.asList(0, 1, 2)); 100 101 EconomicSet<Integer> newSet = EconomicSet.create(); 102 newSet.addAll(Arrays.asList(2, 3)); 103 104 set.retainAll(newSet); 105 Assert.assertEquals(set.size(), 1); 106 } 107 108 @Test 109 public void testToArray() { 110 EconomicSet<Integer> set = EconomicSet.create(); 111 set.addAll(Arrays.asList(0, 1)); 112 Assert.assertArrayEquals(set.toArray(new Integer[2]), new Integer[]{0, 1}); 113 } 114 115 @Test 116 public void testToString() { 117 EconomicSet<Integer> set = EconomicSet.create(); 118 set.addAll(Arrays.asList(0, 1)); 119 Assert.assertEquals(set.toString(), "set(size=2, {0,1})"); 120 } 121 122 @Test(expected = UnsupportedOperationException.class) 123 public void testToUnalignedArray() { 124 Assert.assertArrayEquals(EconomicSet.create().toArray(new Integer[2]), new Integer[0]); 125 } 126 127 @Test 128 public void testSetRemoval() { 129 ArrayList<Integer> initialList = new ArrayList<>(); 130 ArrayList<Integer> removalList = new ArrayList<>(); 131 ArrayList<Integer> finalList = new ArrayList<>(); 132 EconomicSet<Integer> set = EconomicSet.create(Equivalence.IDENTITY); 133 set.add(1); 134 set.add(2); 135 set.add(3); 136 set.add(4); 137 set.add(5); 138 set.add(6); 139 set.add(7); 140 set.add(8); 141 set.add(9); 142 Iterator<Integer> i1 = set.iterator(); 143 while (i1.hasNext()) { 144 initialList.add(i1.next()); 145 } 146 int size = 0; 147 Iterator<Integer> i2 = set.iterator(); 148 while (i2.hasNext()) { 149 Integer elem = i2.next(); 150 if (size++ < 8) { 151 i2.remove(); 152 } 153 removalList.add(elem); 154 } 155 Iterator<Integer> i3 = set.iterator(); 156 while (i3.hasNext()) { 157 finalList.add(i3.next()); 158 } 159 Assert.assertEquals(initialList, removalList); 160 Assert.assertEquals(1, finalList.size()); 161 Assert.assertEquals(newInteger(9), finalList.get(0)); 162 } 163 164 @SuppressWarnings({"deprecation", "unused"}) 165 private static Integer newInteger(int value) { 166 return new Integer(value); 167 } 168 169 }