/******************************************************************************* * Copyright 2012 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 java.util.Objects.*; import static org.junit.Assert.*; import java.util.Map; import java.util.NoSuchElementException; import com.analog.lyric.collect.SkipMap; public class SkipMapTester<K, V> extends MapTester<K, V> { public SkipMapTester() { super(); } @Override public void validateMap(Map<K,V> map) { if (map instanceof SkipMap) { this.validateSkipMap((SkipMap<K, V>) map); } else { super.validateMap(map); } } public void validateSkipMap(SkipMap<K,V> map) { super.validateMap(map); Map.Entry<K,V> firstEntry = map.firstEntry(); Map.Entry<K,V> lastEntry = map.lastEntry(); assertEquals(map.isEmpty(), firstEntry == null); assertEquals(map.isEmpty(), lastEntry == null); if (map.isEmpty()) { try { map.firstKey(); fail("Expected NoSuchElementException"); } catch (NoSuchElementException ex) {} try { map.lastKey(); fail("Expected NoSuchElementException"); } catch (NoSuchElementException ex) {} assertNull(map.pollFirstEntry()); assertNull(map.pollLastEntry()); } else { assertEquals(map.firstKey(), requireNonNull(firstEntry).getKey()); assertEquals(map.lastKey(), requireNonNull(lastEntry).getKey()); } Map.Entry<K, V> prevEntry = null; for (K key : map.keySet()) { assertTrue(map.containsKey2(key)); V value = map.get(key); assertEquals(value, map.get2(key)); Map.Entry<K, V> entry = map.floorEntry(key); assertNotNull(entry); assertEquals(key, entry.getKey()); assertEquals(value, entry.getValue()); assertEquals(key, map.floorKey(key)); entry = map.ceilingEntry(key); requireNonNull(entry); assertEquals(key, entry.getKey()); assertEquals(value, entry.getValue()); assertEquals(key, map.ceilingKey(key)); if (prevEntry == null) { assertEquals(key, map.firstKey()); assertNull(map.lowerEntry(key)); assertNull(map.lowerKey(key)); } else { K prevKey = prevEntry.getKey(); assertEquals(prevKey, map.lowerKey(key)); assertEquals(key, map.higherKey(prevKey)); Map.Entry<K,V> lowerEntry = map.lowerEntry(key); requireNonNull(lowerEntry); assertEquals(prevKey, lowerEntry.getKey()); assertEquals(prevEntry.getValue(), lowerEntry.getValue()); Map.Entry<K,V> higherEntry = map.higherEntry(prevKey); requireNonNull(higherEntry); assertEquals(key, higherEntry.getKey()); assertEquals(value, higherEntry.getValue()); } prevEntry = entry; } if (prevEntry != null) { K lastKey = prevEntry.getKey(); assertNull(map.higherKey(lastKey)); } } }