View Javadoc
1   package org.djutils.immutablecollections;
2   
3   import java.util.Arrays;
4   import java.util.HashSet;
5   import java.util.List;
6   import java.util.Set;
7   
8   import org.junit.Assert;
9   import org.junit.Test;
10  
11  /**
12   * TestImmutableHashSet.java.
13   * <p>
14   * Copyright (c) 2002-2023 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
15   * for project information <a href="https://djutils.org" target="_blank"> https://djutils.org</a>. The DJUTILS project is
16   * distributed under a three-clause BSD-style license, which can be found at
17   * <a href="https://djutils.org/docs/license.html" target="_blank"> https://djutils.org/docs/license.html</a>.
18   * </p>
19   * @author <a href="https://www.tudelft.nl/averbraeck" target="_blank"> Alexander Verbraeck</a>
20   */
21  public class TestImmutableHashSet
22  {
23  
24      /**
25       * ...
26       */
27      @Test
28      public final void testHashSet()
29      {
30          Set<Integer> intSet = new HashSet<>(Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
31          Set<Integer> set = new HashSet<Integer>(intSet);
32          testIntSet(set, new ImmutableHashSet<Integer>(set, Immutable.WRAP), Immutable.WRAP);
33          set = new HashSet<Integer>(intSet);
34          testIntSet(set, new ImmutableHashSet<Integer>(set, Immutable.COPY), Immutable.COPY);
35          set = new HashSet<Integer>(intSet);
36          testIntSet(set, new ImmutableHashSet<Integer>(set), Immutable.COPY);
37          set = new HashSet<Integer>(intSet);
38          ImmutableHashSet<Integer> ihs = new ImmutableHashSet<Integer>(set);
39          testIntSet(set, new ImmutableHashSet<Integer>(ihs), Immutable.COPY);
40  
41          set = new HashSet<Integer>(intSet);
42          List<Integer> il = Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
43          testIntSet(set, new ImmutableHashSet<Integer>(il), Immutable.COPY);
44      }
45  
46      /**
47       * ...
48       * @param set Set&lt;Integer&gt;; set
49       * @param imSet ImmutableSet&lt;Integer&gt;; immutable set
50       * @param copyOrWrap Immutable
51       */
52      private void testIntSet(final Set<Integer> set, final ImmutableSet<Integer> imSet, final Immutable copyOrWrap)
53      {
54          Assert.assertTrue(set.size() == 10);
55          Assert.assertTrue(imSet.size() == 10);
56          for (int i = 0; i < 10; i++)
57          {
58              Assert.assertTrue(imSet.contains(i + 1));
59          }
60          Assert.assertFalse(imSet.isEmpty());
61          Assert.assertFalse(imSet.contains(15));
62          if (copyOrWrap == Immutable.COPY)
63          {
64              Assert.assertTrue(imSet.isCopy());
65              Assert.assertTrue(imSet.toSet().equals(set));
66              Assert.assertFalse(imSet.toSet() == set);
67          }
68          else
69          {
70              Assert.assertTrue(imSet.isWrap());
71              Assert.assertTrue(imSet.toSet().equals(set));
72              Assert.assertFalse(imSet.toSet() == set); // this WRAP method returns a NEW list
73          }
74  
75          Set<Integer> to = imSet.toSet();
76          Assert.assertTrue(set.equals(to));
77  
78          Integer[] arr = imSet.toArray(new Integer[] {});
79          Integer[] sar = set.toArray(new Integer[] {});
80          Assert.assertArrayEquals(arr, sar);
81  
82          // modify the underlying data structure
83          set.add(11);
84          if (copyOrWrap == Immutable.COPY)
85          {
86              Assert.assertTrue(imSet.size() == 10);
87          }
88          else
89          {
90              Assert.assertTrue(imSet.size() == 11);
91          }
92      }
93  }