/******************************************************************************* * Copyright 2014 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.test.util.misc; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.junit.Test; import com.analog.lyric.collect.tests.CollectionTester; import com.analog.lyric.dimple.model.core.Ids; import com.analog.lyric.util.misc.IGetId; import com.analog.lyric.util.misc.IMapList; import com.analog.lyric.util.misc.MapList; public class TestMapList { private static class Value implements IGetId { private long _id; private Value(long id) { _id = id; } @Deprecated @Override public long getId() { return getGlobalId(); } @Override public int getLocalId() { return (int)_id; } @Override public long getGlobalId() { return _id; } @Override public UUID getUUID() { return Ids.makeUUID(0, _id); } } @Test public void test() { MapList<Value> maplist = new MapList<Value>(); testMapList(maplist); } private void testMapList(IMapList<Value> maplist) { final Value v1 = new Value(1); final Value v2 = new Value(2); final Value v3 = new Value(3); assertTrue(maplist.add(v1)); assertTrue(maplist.add(v1)); assertSame(v1, maplist.getByKey(1)); assertSame(v1, maplist.getByIndex(0)); assertSame(v1, maplist.getByIndex(1)); assertEquals(2, maplist.size()); assertInvariants(maplist); maplist.clear(); assertFalse(maplist.addAll(new ArrayList<Value>())); ArrayList<Value> list = new ArrayList<Value>(2); list.add(v1); list.add(v2); list.add(v3); assertTrue(maplist.addAll(list)); assertEquals(3, maplist.size()); assertTrue(maplist.addAll(list)); assertEquals(6, maplist.size()); assertTrue(maplist.contains(v2)); assertTrue(maplist.contains(v3)); assertInvariants(maplist); maplist.clear(); assertEquals(0, maplist.size()); assertFalse(maplist.contains(v1)); assertInvariants(maplist); assertFalse(maplist.remove(v1)); assertFalse(maplist.remove("bogus")); maplist.addAll((Value[])null); // doesn't blow up maplist.addAll(new Value[] { v3, v2, v1}); assertEquals(3, maplist.size()); assertSame(v3, maplist.getByIndex(0)); assertInvariants(maplist); assertTrue(maplist.remove(v2)); assertFalse(maplist.remove(v2)); assertFalse(maplist.contains(v2)); assertSame(v1, maplist.getByIndex(1)); assertInvariants(maplist); maplist.clear(); maplist.addAll(list); assertTrue(maplist.containsAll(list)); assertEquals(list.size(), maplist.size()); assertInvariants(maplist); Value v4 = new Value(4); assertTrue(maplist.add(v4)); assertTrue(maplist.removeAll(list)); assertFalse(maplist.removeAll(list)); assertEquals(1, maplist.size()); assertTrue(maplist.addAll(list)); assertSame(list.get(0), maplist.getByIndex(1)); assertTrue(maplist.retainAll(list)); assertFalse(maplist.retainAll(list)); assertEquals(list.size(), maplist.size()); assertInvariants(maplist); } public static <T extends IGetId> void assertInvariants(IMapList<T> maplist) { CollectionTester<T> collectionTester = new CollectionTester<T>(); collectionTester.validateCollection(maplist); List<T> values = maplist.values(); assertEquals(maplist.size(), values.size()); for (int i = 0, endi = values.size(); i <endi; ++ i) { T value = values.get(i); long id = value.getGlobalId(); assertSame(value, maplist.getByIndex(i)); assertSame(value, maplist.getByKey(id)); assertTrue(maplist.contains(value)); } } }