/******************************************************************************* * Copyright 2015 Analog Devices, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ********************************************************************************/ package com.analog.lyric.collect.tests; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import org.junit.Test; import com.analog.lyric.collect.IndexedArrayList; import com.analog.lyric.util.test.SerializationTester; /** * * @since 0.08 * @author Christopher Barber */ public class TestIndexedArrayList { @Test public void test() { IndexedArrayList<String> list = new IndexedArrayList<>(); assertInvariants(list); assertTrue(list.isEmpty()); assertTrue(list.add("a")); assertEquals(0, list.indexOf("a")); assertEquals(1, list.size()); assertTrue(list.add("b")); assertEquals(1, list.indexOf("b")); assertEquals(2, list.size()); assertFalse(list.add("a")); assertEquals(2, list.size()); assertInvariants(list); assertEquals(-1, list.indexOf("c")); assertEquals(-1, list.lastIndexOf("c")); assertTrue(list.add("c")); assertEquals(2, list.indexOf("c")); assertEquals("a", list.set(0, "d")); assertEquals(-1, list.indexOf("a")); assertEquals(3, list.size()); assertEquals("d", list.get(0)); assertInvariants(list); assertEquals("c", list.set(2, "d")); assertEquals(2, list.size()); assertEquals("b", list.get(0)); assertEquals("d", list.get(1)); assertInvariants(list); list.clear(); assertTrue(list.isEmpty()); for (char c = 'a'; c <= 'z'; ++c) { list.add(c + ""); } assertInvariants(list); for (int i = 0; i < 26; ++i) { assertEquals((char)('a' + i) + "", list.get(i)); } assertTrue(list.remove("d")); assertFalse(list.remove("d")); assertEquals(25, list.size()); assertInvariants(list); Set<String> set = new HashSet<>(); set.add("b"); set.add("e"); set.add("g"); set.add("barf"); assertTrue(list.removeAll(set)); assertFalse(list.removeAll(set)); assertInvariants(list); assertEquals(22, list.size()); for (String s : list) { assertFalse(set.contains(s)); } set.add("w"); set.add("x"); set.add("y"); set.add("z"); assertTrue(list.retainAll(set)); assertFalse(list.retainAll(set)); assertEquals(4, list.size()); assertInvariants(list); assertEquals("w", list.get(0)); assertEquals("z", list.get(3)); } private <T> void assertInvariants(IndexedArrayList<T> list) { CollectionTester<T> tester = new CollectionTester<>(); tester.validateCollection(list); int i = 0; for (T value : list) { assertEquals(value, list.set(i, value)); assertEquals(value, list.get(i)); assertEquals(i, list.indexOf(value)); assertEquals(i, list.lastIndexOf(value)); ++i; } ArrayList<T> copy = new ArrayList<>(list); assertEquals(copy, list); IndexedArrayList<T> list2 = new IndexedArrayList<>(copy); assertEquals(list, list2); IndexedArrayList<T> list3 = SerializationTester.clone(list); assertEquals(list, list3); } }