package nl.tudelft.simulation.immutablecollections;
import java.util.Vector;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Vector;
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 TestImmutableVector
{
@Test
public final void testVector()
{
Vector intVector = new Vector(Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
Vector vector = new Vector(intVector);
testIntVector(vector, new ImmutableVector(vector, Immutable.WRAP), Immutable.WRAP);
vector = new Vector(intVector);
testIntVector(vector, new ImmutableVector(vector, Immutable.COPY), Immutable.COPY);
vector = new Vector(intVector);
testIntVector(vector, new ImmutableVector(vector), Immutable.COPY);
vector = new Vector(intVector);
ImmutableVector ial = new ImmutableVector(vector);
testIntVector(vector, new ImmutableVector(ial), Immutable.COPY);
vector = new Vector(intVector);
Set intSet = new HashSet<>(Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}));
testIntVector(vector, new ImmutableVector(intSet), Immutable.COPY);
}
private void testIntVector(final Vector vector, final ImmutableVector imVector, final Immutable copyOrWrap)
{
Assert.assertTrue(vector.size() == 10);
Assert.assertTrue(imVector.size() == 10);
for (int i = 0; i < 10; i++)
Assert.assertTrue(imVector.get(i) == vector.get(i));
Assert.assertFalse(imVector.isEmpty());
Assert.assertTrue(imVector.contains(5));
Assert.assertFalse(imVector.contains(15));
if (copyOrWrap == Immutable.COPY)
{
Assert.assertTrue(imVector.isCopy());
Assert.assertTrue(imVector.toList().equals(vector));
Assert.assertFalse(imVector.toList() == vector);
}
else
{
Assert.assertTrue(imVector.isWrap());
Assert.assertTrue(imVector.toList().equals(vector));
Assert.assertFalse(imVector.toList() == vector); // this WRAP method returns a NEW list
}
Vector to = imVector.toVector();
Assert.assertTrue(vector.equals(to));
Integer[] arr = (Integer[]) imVector.toArray(new Integer[]{});
Integer[] sar = (Integer[]) vector.toArray(new Integer[]{});
Assert.assertArrayEquals(arr, sar);
// modify the underlying data structure
vector.add(11);
if (copyOrWrap == Immutable.COPY)
Assert.assertTrue(imVector.size() == 10);
else
Assert.assertTrue(imVector.size() == 11);
}
}