/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.NoSuchElementException;
import org.junit.Test;
import com.github.anba.es6draft.runtime.internal.LinkedMap;
/**
*
*/
public final class LinkedMapTest {
@Test
public void test() {
LinkedMap<String, String> map = new LinkedMap<>();
assertEquals(0, map.size());
map.set("key1", "value1");
assertEquals(1, map.size());
map.set("key2", "value2");
assertEquals(2, map.size());
map.set("key2", "value2-new");
assertEquals(2, map.size());
assertTrue(map.has("key1"));
assertTrue(map.has("key2"));
assertFalse(map.has("key3"));
map.delete("key2");
assertEquals(1, map.size());
assertTrue(map.has("key1"));
assertFalse(map.has("key2"));
assertFalse(map.has("key3"));
map.delete("key2");
assertEquals(1, map.size());
assertTrue(map.has("key1"));
assertFalse(map.has("key2"));
assertFalse(map.has("key3"));
}
private <K, V> void assertEntryEquals(K key, V value, Entry<K, V> entry) {
assertEquals(key, entry.getKey());
assertEquals(value, entry.getValue());
}
@Test
public void testIterator1() {
LinkedMap<String, String> map = new LinkedMap<>();
map.set("key1", "value1");
map.set("key2", "value2");
Iterator<Entry<String, String>> itr = map.iterator();
assertTrue(itr.hasNext());
assertTrue(itr.hasNext());
assertTrue(itr.hasNext());
assertEntryEquals("key1", "value1", itr.next());
assertTrue(itr.hasNext());
assertEntryEquals("key2", "value2", itr.next());
assertFalse(itr.hasNext());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
}
@Test
public void testIterator2() {
LinkedMap<String, String> map = new LinkedMap<>();
Iterator<Entry<String, String>> itr = map.iterator();
map.set("key1", "value1");
assertTrue(itr.hasNext());
assertEntryEquals("key1", "value1", itr.next());
assertFalse(itr.hasNext());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
}
@Test
public void testIterator3() {
LinkedMap<String, String> map = new LinkedMap<>();
Iterator<Entry<String, String>> itr = map.iterator();
// iterator finished concept not available
assertFalse(itr.hasNext());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
map.set("key1", "value1");
assertTrue(itr.hasNext());
assertEntryEquals("key1", "value1", itr.next());
assertFalse(itr.hasNext());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
}
@Test
public void testIterator4() {
LinkedMap<String, String> map = new LinkedMap<>();
Iterator<Entry<String, String>> itr = map.iterator();
map.set("key1", "value1");
map.set("key2", "value2");
assertTrue(itr.hasNext());
assertEntryEquals("key1", "value1", itr.next());
assertTrue(itr.hasNext());
assertEntryEquals("key2", "value2", itr.next());
assertFalse(itr.hasNext());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
}
@Test
public void testIterator5() {
LinkedMap<String, String> map = new LinkedMap<>();
Iterator<Entry<String, String>> itr = map.iterator();
map.set("key1", "value1");
map.set("key2", "value2");
map.set("key3", "value3");
map.set("key4", "value4");
assertTrue(itr.hasNext());
assertEntryEquals("key1", "value1", itr.next());
assertTrue(itr.hasNext());
map.delete("key1");
assertTrue(itr.hasNext());
assertEntryEquals("key2", "value2", itr.next());
assertEntryEquals("key3", "value3", itr.next());
assertEntryEquals("key4", "value4", itr.next());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
}
@Test
public void testIterator6() {
LinkedMap<String, String> map = new LinkedMap<>();
Iterator<Entry<String, String>> itr = map.iterator();
map.set("key1", "value1");
map.set("key2", "value2");
map.set("key3", "value3");
map.set("key4", "value4");
assertTrue(itr.hasNext());
assertEntryEquals("key1", "value1", itr.next());
assertTrue(itr.hasNext());
map.delete("key1");
map.delete("key2");
assertTrue(itr.hasNext());
assertEntryEquals("key3", "value3", itr.next());
assertEntryEquals("key4", "value4", itr.next());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
}
@Test
public void testIterator7() {
LinkedMap<String, String> map = new LinkedMap<>();
Iterator<Entry<String, String>> itr = map.iterator();
map.set("key1", "value1");
map.set("key2", "value2");
map.set("key3", "value3");
map.set("key4", "value4");
assertTrue(itr.hasNext());
assertEntryEquals("key1", "value1", itr.next());
assertTrue(itr.hasNext());
map.delete("key1");
map.delete("key3");
assertTrue(itr.hasNext());
assertEntryEquals("key2", "value2", itr.next());
assertEntryEquals("key4", "value4", itr.next());
try {
itr.next();
fail();
} catch (NoSuchElementException e) {
}
}
}