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
13
14
15
16
17
18
19
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
56
57
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);
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
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 }