package nl.tudelft.simulation.immutablecollections;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
/**
* TestImmutable.java.
*
* Copyright (c) 2003-2018 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights
* reserved. See for project information
* www.simulation.tudelft.nl. The source code and
* binary code of this software is proprietary information of Delft University of Technology.
* @author Alexander Verbraeck
*/
public class TestImmutableLinkedHashSet
{
@Test
public final void testLinkedHashSet()
{
Set intSet = new LinkedHashSet<>(Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
Set set = new LinkedHashSet(intSet);
testIntSet(set, new ImmutableLinkedHashSet(set, Immutable.WRAP), Immutable.WRAP);
set = new LinkedHashSet(intSet);
testIntSet(set, new ImmutableLinkedHashSet(set, Immutable.COPY), Immutable.COPY);
set = new LinkedHashSet(intSet);
testIntSet(set, new ImmutableLinkedHashSet(set), Immutable.COPY);
set = new LinkedHashSet(intSet);
ImmutableLinkedHashSet ihs = new ImmutableLinkedHashSet(set);
testIntSet(set, new ImmutableLinkedHashSet(ihs), Immutable.COPY);
set = new LinkedHashSet(intSet);
List il = Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
testIntSet(set, new ImmutableLinkedHashSet(il), Immutable.COPY);
}
private void testIntSet(final Set set, final ImmutableSet imSet, final Immutable copyOrWrap)
{
Assert.assertTrue(set.size() == 10);
Assert.assertTrue(imSet.size() == 10);
for (int i = 0; i < 10; i++)
Assert.assertTrue(imSet.contains(i + 1));
Assert.assertFalse(imSet.isEmpty());
Assert.assertFalse(imSet.contains(15));
if (copyOrWrap == Immutable.COPY)
{
Assert.assertTrue(imSet.isCopy());
Assert.assertTrue(imSet.toSet().equals(set));
Assert.assertFalse(imSet.toSet() == set);
}
else
{
Assert.assertTrue(imSet.isWrap());
Assert.assertTrue(imSet.toSet().equals(set));
Assert.assertFalse(imSet.toSet() == set); // this WRAP method returns a NEW list
}
Set to = imSet.toSet();
Assert.assertTrue(set.equals(to));
Integer[] arr = (Integer[]) imSet.toArray(new Integer[]{});
Integer[] sar = (Integer[]) set.toArray(new Integer[]{});
Assert.assertArrayEquals(arr, sar);
// modify the underlying data structure
set.add(11);
if (copyOrWrap == Immutable.COPY)
Assert.assertTrue(imSet.size() == 10);
else
Assert.assertTrue(imSet.size() == 11);
}
}