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