Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package it.unimi.dsi.fastutil.ints;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import it.unimi.dsi.fastutil.Hash;
import it.unimi.dsi.fastutil.HashCommon;
import it.unimi.dsi.fastutil.ints.Int2IntMap.Entry;
import it.unimi.dsi.fastutil.objects.ObjectBidirectionalIterator;
import it.unimi.dsi.fastutil.objects.ObjectIterator;
import java.io.IOException;
import java.util.Map;
import java.util.NoSuchElementException;
import org.junit.Ignore;
import org.junit.Test;
public class Int2IntLinkedOpenHashMapTest {
@Test
public void testWrapAround() {
Int2IntLinkedOpenHashMap m = new Int2IntLinkedOpenHashMap(4, .5f);
assertEquals(8, m.n);
// The following code inverts HashCommon.phiMix() and places strategically keys in slots 6, 7 and 0
m.put(HashCommon.invMix(6), 0);
m.put(HashCommon.invMix(7), 0);
m.put(HashCommon.invMix(6 + 8), 0);
assertNotEquals(0, m.key[0]);
assertNotEquals(0, m.key[6]);
assertNotEquals(0, m.key[7]);
IntOpenHashSet keys = new IntOpenHashSet(m.keySet());
IntIterator iterator = m.keySet().iterator();
IntOpenHashSet t = new IntOpenHashSet();
t.add(iterator.nextInt());
t.add(iterator.nextInt());
// Originally, this remove would move the entry in slot 0 in slot 6 and we would return the entry in 0 twice
iterator.remove();
t.add(iterator.nextInt());
assertEquals(keys, t);
}
@Test
public void testWrapAround2() {
Int2IntLinkedOpenHashMap m = new Int2IntLinkedOpenHashMap(4, .75f);
assertEquals(8, m.n);
// The following code inverts HashCommon.phiMix() and places strategically keys in slots 4, 5, 6, 7 and 0
m.put(HashCommon.invMix(4), 0);
m.put(HashCommon.invMix(5), 0);
m.put(HashCommon.invMix(4 + 8), 0);
m.put(HashCommon.invMix(5 + 8), 0);
m.put(HashCommon.invMix(4 + 16), 0);
assertNotEquals(0, m.key[0]);
assertNotEquals(0, m.key[4]);
assertNotEquals(0, m.key[5]);
assertNotEquals(0, m.key[6]);
assertNotEquals(0, m.key[7]);
//System.err.println(Arraym.toString(m.key));
IntOpenHashSet keys = new IntOpenHashSet(m.keySet());
IntIterator iterator = m.keySet().iterator();
IntOpenHashSet t = new IntOpenHashSet();
assertTrue(t.add(iterator.nextInt()));
iterator.remove();
//System.err.println(Arraym.toString(m.key));
assertTrue(t.add(iterator.nextInt()));
//System.err.println(Arraym.toString(m.key));
// Originally, this remove would move the entry in slot 0 in slot 6 and we would return the entry in 0 twice
assertTrue(t.add(iterator.nextInt()));
//System.err.println(Arraym.toString(m.key));
assertTrue(t.add(iterator.nextInt()));
iterator.remove();
//System.err.println(Arraym.toString(m.key));
assertTrue(t.add(iterator.nextInt()));
assertEquals(3, m.size());
assertEquals(keys, t);
}
@Test
public void testWrapAround3() {
Int2IntLinkedOpenHashMap m = new Int2IntLinkedOpenHashMap(4, .75f);
assertEquals(8, m.n);
// The following code inverts HashCommon.phiMix() and places strategically keys in slots 5, 6, 7, 0 and 1
m.put(HashCommon.invMix(5), 0);
m.put(HashCommon.invMix(5 + 8), 0);
m.put(HashCommon.invMix(5 + 16), 0);
m.put(HashCommon.invMix(5 + 32), 0);
m.put(HashCommon.invMix(5 + 64), 0);
assertNotEquals(0, m.key[5]);
assertNotEquals(0, m.key[6]);
assertNotEquals(0, m.key[7]);
assertNotEquals(0, m.key[0]);
assertNotEquals(0, m.key[1]);
//System.err.println(Arraym.toString(m.key));
IntOpenHashSet keys = new IntOpenHashSet(m.keySet());
IntIterator iterator = m.keySet().iterator();
IntOpenHashSet t = new IntOpenHashSet();
assertTrue(t.add(iterator.nextInt()));
iterator.remove();
//System.err.println(Arraym.toString(m.key));
assertTrue(t.add(iterator.nextInt()));
iterator.remove();
//System.err.println(Arraym.toString(m.key));
// Originally, this remove would move the entry in slot 0 in slot 6 and we would return the entry in 0 twice
assertTrue(t.add(iterator.nextInt()));
iterator.remove();
//System.err.println(Arraym.toString(m.key));
assertTrue(t.add(iterator.nextInt()));
iterator.remove();
//System.err.println(Arraym.toString(m.key));
assertTrue(t.add(iterator.nextInt()));
iterator.remove();
assertEquals(0, m.size());
assertEquals(keys, t);
}
private static java.util.Random r = new java.util.Random(0);
private static int genKey() {
return r.nextInt();
}
private static int genValue() {
return r.nextInt();
}
private static boolean valEquals(Object o1, Object o2) {
return o1 == null ? o2 == null : o1.equals(o2);
}
@SuppressWarnings({ "unchecked", "deprecation" })
protected static void test(int n, float f) throws IOException, ClassNotFoundException {
Int2IntLinkedOpenHashMap m = new Int2IntLinkedOpenHashMap(Hash.DEFAULT_INITIAL_SIZE, f);
Map t = new java.util.LinkedHashMap();
/* First of all, we fill t with random data. */
for (int i = 0; i < n; i++)
t.put((Integer.valueOf(genKey())), (Integer.valueOf(genValue())));
/* Now we add to m the same data */
m.putAll(t);
assertTrue("Error: !m.equals(t) after insertion", m.equals(t));
assertTrue("Error: !t.equals(m) after insertion", t.equals(m));
/* Now we check that m actually holds that data. */
for (java.util.Iterator> i = t.entrySet().iterator(); i.hasNext();) {
java.util.Map.Entry, ?> e = (java.util.Map.Entry, ?>)i.next();
assertTrue("Error: m and t differ on an entry (" + e + ") after insertion (iterating on t)", valEquals(e.getValue(), m.get(e.getKey())));
}
/* Now we check that m actually holds that data, but iterating on m. */
for (java.util.Iterator> i = m.entrySet().iterator(); i.hasNext();) {
java.util.Map.Entry, ?> e = (java.util.Map.Entry, ?>)i.next();
assertTrue("Error: m and t differ on an entry (" + e + ") after insertion (iterating on m)", valEquals(e.getValue(), t.get(e.getKey())));
}
/* Now we check that m actually holds the same keys. */
for (java.util.Iterator i = t.keySet().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a key (" + o + ") after insertion (iterating on t)", m.containsKey(o));
assertTrue("Error: m and t differ on a key (" + o + ", in keySet()) after insertion (iterating on t)", m.keySet().contains(o));
}
/* Now we check that m actually holds the same keys, but iterating on m. */
for (java.util.Iterator> i = m.keySet().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a key after insertion (iterating on m)", t.containsKey(o));
assertTrue("Error: m and t differ on a key (in keySet()) after insertion (iterating on m)", t.keySet().contains(o));
}
/* Now we check that m actually hold the same values. */
for (java.util.Iterator i = t.values().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a value after insertion (iterating on t)", m.containsValue(o));
assertTrue("Error: m and t differ on a value (in values()) after insertion (iterating on t)", m.values().contains(o));
}
/* Now we check that m actually hold the same values, but iterating on m. */
for (java.util.Iterator> i = m.values().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a value after insertion (iterating on m)", t.containsValue(o));
assertTrue("Error: m and t differ on a value (in values()) after insertion (iterating on m)", t.values().contains(o));
}
/*
* Now we check that inquiries about random data give the same answer in m and t. For m we
* use the polymorphic method.
*/
for (int i = 0; i < n; i++) {
int T = genKey();
assertTrue("Error: divergence in keys between t and m (polymorphic method)", m.containsKey((Integer.valueOf(T))) == t.containsKey((Integer.valueOf(T))));
assertFalse("Error: divergence between t and m (polymorphic method)", (m.get(T) != (0)) != ((t.get((Integer.valueOf(T))) == null ? (0) : (((t.get((Integer.valueOf(T)))).intValue()))) != (0)) || t.get((Integer.valueOf(T))) != null && !m.get((Integer.valueOf(T))).equals(t.get((Integer.valueOf(T)))));
}
/*
* Again, we check that inquiries about random data give the same answer in m and t, but for
* m we use the standard method.
*/
for (int i = 0; i < n; i++) {
int T = genKey();
assertTrue("Error: divergence between t and m (standard method)", valEquals(m.get((Integer.valueOf(T))), t.get((Integer.valueOf(T)))));
}
/* Now we put and remove random data in m and t, checking that the result is the same. */
for (int i = 0; i < 20 * n; i++) {
int T = genKey();
int U = genValue();
assertTrue("Error: divergence in put() between t and m", valEquals(m.put((Integer.valueOf(T)), (Integer.valueOf(U))), t.put((Integer.valueOf(T)), (Integer.valueOf(U)))));
T = genKey();
assertTrue("Error: divergence in remove() between t and m", valEquals(m.remove((Integer.valueOf(T))), t.remove((Integer.valueOf(T)))));
}
assertTrue("Error: !m.equals(t) after removal", m.equals(t));
assertTrue("Error: !t.equals(m) after removal", t.equals(m));
/* Now we check that m actually holds the same data. */
for (java.util.Iterator> i = t.entrySet().iterator(); i.hasNext();) {
java.util.Map.Entry, ?> e = (java.util.Map.Entry, ?>)i.next();
assertTrue("Error: m and t differ on an entry (" + e + ") after removal (iterating on t)", valEquals(e.getValue(), m.get(e.getKey())));
}
/* Now we check that m actually holds that data, but iterating on m. */
for (java.util.Iterator> i = m.entrySet().iterator(); i.hasNext();) {
java.util.Map.Entry, ?> e = (java.util.Map.Entry, ?>)i.next();
assertTrue("Error: m and t differ on an entry (" + e + ") after removal (iterating on m)", valEquals(e.getValue(), t.get(e.getKey())));
}
/* Now we check that m actually holds the same keys. */
for (java.util.Iterator i = t.keySet().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a key (" + o + ") after removal (iterating on t)", m.containsKey(o));
assertTrue("Error: m and t differ on a key (" + o + ", in keySet()) after removal (iterating on t)", m.keySet().contains(o));
}
/* Now we check that m actually holds the same keys, but iterating on m. */
for (java.util.Iterator> i = m.keySet().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a key after removal (iterating on m)", t.containsKey(o));
assertTrue("Error: m and t differ on a key (in keySet()) after removal (iterating on m)", t.keySet().contains(o));
}
/* Now we check that m actually hold the same values. */
for (java.util.Iterator i = t.values().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a value after removal (iterating on t)", m.containsValue(o));
assertTrue("Error: m and t differ on a value (in values()) after removal (iterating on t)", m.values().contains(o));
}
/* Now we check that m actually hold the same values, but iterating on m. */
for (java.util.Iterator> i = m.values().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on a value after removal (iterating on m)", t.containsValue(o));
assertTrue("Error: m and t differ on a value (in values()) after removal (iterating on m)", t.values().contains(o));
}
int h = m.hashCode();
/* Now we save and read m. */
java.io.File ff = new java.io.File("it.unimi.dsi.fastutil.test");
java.io.OutputStream os = new java.io.FileOutputStream(ff);
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(os);
oos.writeObject(m);
oos.close();
java.io.InputStream is = new java.io.FileInputStream(ff);
java.io.ObjectInputStream ois = new java.io.ObjectInputStream(is);
m = (Int2IntLinkedOpenHashMap)ois.readObject();
ois.close();
ff.delete();
assertEquals("Error: hashCode() changed after save/read", h, m.hashCode());
assertEquals("Error: clone()", m, m.clone());
/* Now we check that m actually holds that data. */
for (java.util.Iterator i = t.keySet().iterator(); i.hasNext();) {
Object o = i.next();
assertTrue("Error: m and t differ on an entry after save/read", valEquals(m.get(o), t.get(o)));
}
/* Now we put and remove random data in m and t, checking that the result is the same. */
for (int i = 0; i < 20 * n; i++) {
int T = genKey();
int U = genValue();
assertTrue("Error: divergence in put() between t and m after save/read", valEquals(m.put((Integer.valueOf(T)), (Integer.valueOf(U))), t.put((Integer.valueOf(T)), (Integer.valueOf(U)))));
T = genKey();
assertTrue("Error: divergence in remove() between t and m after save/read", valEquals(m.remove((Integer.valueOf(T))), t.remove((Integer.valueOf(T)))));
}
assertTrue("Error: !m.equals(t) after post-save/read removal", m.equals(t));
assertTrue("Error: !t.equals(m) after post-save/read removal", t.equals(m));
/* Now we play with iterators. */
{
java.util.ListIterator> i, j;
Object J = null;
Map.Entry E = null, F = null;
i = (java.util.ListIterator>)m.entrySet().iterator();
j = new java.util.LinkedList