View Javadoc
1   package org.djutils.immutablecollections;
2   
3   import java.util.Arrays;
4   import java.util.LinkedHashSet;
5   import java.util.List;
6   import java.util.Set;
7   
8   import org.junit.Assert;
9   import org.junit.Test;
10  
11  /**
12   * TestImmutableLinkedHashSet.java.
13   * <p>
14   * Copyright (c) 2002-2022 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 TestImmutableLinkedHashSet
22  {
23  
24      /**
25       * ...
26       */
27      @Test
28      public final void testLinkedHashSet()
29      {
30          Set<Integer> intSet = new LinkedHashSet<>(Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
31          Set<Integer> set = new LinkedHashSet<Integer>(intSet);
32          testIntSet(set, new ImmutableLinkedHashSet<Integer>(set, Immutable.WRAP), Immutable.WRAP);
33          set = new LinkedHashSet<Integer>(intSet);
34          testIntSet(set, new ImmutableLinkedHashSet<Integer>(set, Immutable.COPY), Immutable.COPY);
35          set = new LinkedHashSet<Integer>(intSet);
36          testIntSet(set, new ImmutableLinkedHashSet<Integer>(set), Immutable.COPY);
37          set = new LinkedHashSet<Integer>(intSet);
38          ImmutableLinkedHashSet<Integer> ihs = new ImmutableLinkedHashSet<Integer>(set);
39          testIntSet(set, new ImmutableLinkedHashSet<Integer>(ihs), Immutable.COPY);
40  
41          set = new LinkedHashSet<Integer>(intSet);
42          List<Integer> il = Arrays.asList(new Integer[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
43          testIntSet(set, new ImmutableLinkedHashSet<Integer>(il), Immutable.COPY);
44          ImmutableLinkedHashSet<Integer> ilhs = new ImmutableLinkedHashSet<Integer>(set, Immutable.COPY);
45          Assert.assertTrue("toString returns something descriptive", ilhs.toString().startsWith("ImmutableLinkedHashSet ["));
46  
47          ImmutableLinkedHashSet<Integer> wilhs = new ImmutableLinkedHashSet<Integer>(ilhs, Immutable.WRAP);
48          Assert.assertEquals("wrapped immutable linked hash set is equal to that immutable hash set", wilhs, ilhs);
49          ImmutableLinkedHashSet<Integer> cilhs = new ImmutableLinkedHashSet<Integer>(ilhs, Immutable.COPY);
50          Assert.assertEquals("copied immutable linked hash set is equal to that immutable hash set", cilhs, ilhs);
51      }
52  
53      /**
54       * ...
55       * @param set Set&lt;Integer&gt;; a set
56       * @param imSet ImmutableSet&lt;Integer&gt;; an immutable set
57       * @param copyOrWrap Immutable;
58       */
59      private void testIntSet(final Set<Integer> set, final ImmutableSet<Integer> imSet, final Immutable copyOrWrap)
60      {
61          Assert.assertTrue(set.size() == 10);
62          Assert.assertTrue(imSet.size() == 10);
63          for (int i = 0; i < 10; i++)
64          {
65              Assert.assertTrue(imSet.contains(i + 1));
66          }
67          Assert.assertFalse(imSet.isEmpty());
68          Assert.assertFalse(imSet.contains(15));
69          if (copyOrWrap == Immutable.COPY)
70          {
71              Assert.assertTrue(imSet.isCopy());
72              Assert.assertTrue(imSet.toSet().equals(set));
73              Assert.assertFalse(imSet.toSet() == set);
74          }
75          else
76          {
77              Assert.assertTrue(imSet.isWrap());
78              Assert.assertTrue(imSet.toSet().equals(set));
79              Assert.assertFalse(imSet.toSet() == set); // this WRAP method returns a NEW list
80          }
81  
82          Set<Integer> to = imSet.toSet();
83          Assert.assertTrue(set.equals(to));
84  
85          Integer[] arr = imSet.toArray(new Integer[] {});
86          Integer[] sar = set.toArray(new Integer[] {});
87          Assert.assertArrayEquals(arr, sar);
88  
89          // modify the underlying data structure
90          set.add(11);
91          if (copyOrWrap == Immutable.COPY)
92          {
93              Assert.assertTrue(imSet.size() == 10);
94          }
95          else
96          {
97              Assert.assertTrue(imSet.size() == 11);
98          }
99      }
100 
101 }