private MultiKey[] getMultiKeyKeys() { return new MultiKey[] { new MultiKey(I1, I2), new MultiKey(I2, I3), new MultiKey(I3, I4), new MultiKey(I1, I1, I2), new MultiKey(I2, I3, I4), new MultiKey(I3, I7, I6), new MultiKey(I1, I1, I2, I3), new MultiKey(I2, I4, I5, I6), new MultiKey(I3, I6, I7, I8), new MultiKey(I1, I1, I2, I3, I4), new MultiKey(I2, I3, I4, I5, I6), new MultiKey(I3, I5, I6, I7, I8), }; }
public void testEquals() { MultiKey mk1 = new MultiKey(ONE, TWO); MultiKey mk2 = new MultiKey(ONE, TWO); MultiKey mk3 = new MultiKey(ONE, "TWO"); Assert.assertEquals(mk1, mk1); Assert.assertEquals(mk1, mk2); Assert.assertTrue(mk1.equals(mk3) == false); Assert.assertTrue(mk1.equals("") == false); Assert.assertTrue(mk1.equals(null) == false); }
public void testConstructors() throws Exception { MultiKey mk = null; mk = new MultiKey(ONE, TWO); Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO}, mk.getKeys())); mk = new MultiKey(ONE, TWO, THREE); Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO, THREE}, mk.getKeys())); mk = new MultiKey(ONE, TWO, THREE, FOUR); Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO, THREE, FOUR}, mk.getKeys())); mk = new MultiKey(ONE, TWO, THREE, FOUR, FIVE); Assert.assertTrue(Arrays.equals(new Object[] {ONE, TWO, THREE, FOUR, FIVE}, mk.getKeys())); mk = new MultiKey(new Object[] {THREE, FOUR, ONE, TWO}, false); Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys())); }
public void testSize() { Assert.assertEquals(2, new MultiKey(ONE, TWO).size()); Assert.assertEquals(2, new MultiKey(null, null).size()); Assert.assertEquals(3, new MultiKey(ONE, TWO, THREE).size()); Assert.assertEquals(3, new MultiKey(null, null, null).size()); Assert.assertEquals(4, new MultiKey(ONE, TWO, THREE, FOUR).size()); Assert.assertEquals(4, new MultiKey(null, null, null, null).size()); Assert.assertEquals(5, new MultiKey(ONE, TWO, THREE, FOUR, FIVE).size()); Assert.assertEquals(5, new MultiKey(null, null, null, null, null).size()); Assert.assertEquals(0, new MultiKey(new Object[] {}).size()); Assert.assertEquals(1, new MultiKey(new Object[] {ONE}).size()); Assert.assertEquals(2, new MultiKey(new Object[] {ONE, TWO}).size()); Assert.assertEquals(7, new MultiKey(new Object[] {ONE, TWO, ONE, TWO, ONE, TWO, ONE}).size()); }
public void testConstructorsByArrayNull() throws Exception { Object[] keys = null; try { new MultiKey(keys); fail(); } catch (IllegalArgumentException ex) {} try { new MultiKey(keys, true); fail(); } catch (IllegalArgumentException ex) {} try { new MultiKey(keys, false); fail(); } catch (IllegalArgumentException ex) {} }
public void testHashCode() { MultiKey mk1 = new MultiKey(ONE, TWO); MultiKey mk2 = new MultiKey(ONE, TWO); MultiKey mk3 = new MultiKey(ONE, "TWO"); Assert.assertTrue(mk1.hashCode() == mk1.hashCode()); Assert.assertTrue(mk1.hashCode() == mk2.hashCode()); Assert.assertTrue(mk1.hashCode() != mk3.hashCode()); int total = (0 ^ ONE.hashCode()) ^ TWO.hashCode(); Assert.assertEquals(total, mk1.hashCode()); }
public void testGetKeysArrayConstructorCloned() { Object[] keys = new Object[] {ONE, TWO}; MultiKey mk = new MultiKey(keys, true); Object[] array = mk.getKeys(); Assert.assertTrue(array != keys); Assert.assertTrue(Arrays.equals(array, keys)); Assert.assertSame(ONE, array[0]); Assert.assertSame(TWO, array[1]); Assert.assertEquals(2, array.length); }
public void testGetKeysArrayConstructorNonCloned() { Object[] keys = new Object[] {ONE, TWO}; MultiKey mk = new MultiKey(keys, false); Object[] array = mk.getKeys(); Assert.assertTrue(array != keys); // still not equal Assert.assertTrue(Arrays.equals(array, keys)); Assert.assertSame(ONE, array[0]); Assert.assertSame(TWO, array[1]); Assert.assertEquals(2, array.length); }
public void testConstructorsByArray() throws Exception { MultiKey mk = null; Object[] keys = new Object[] {THREE, FOUR, ONE, TWO}; mk = new MultiKey(keys); Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys())); keys[3] = FIVE; // no effect Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys())); keys = new Object[] {}; mk = new MultiKey(keys); Assert.assertTrue(Arrays.equals(new Object[] {}, mk.getKeys())); keys = new Object[] {THREE, FOUR, ONE, TWO}; mk = new MultiKey(keys, true); Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys())); keys[3] = FIVE; // no effect Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys())); keys = new Object[] {THREE, FOUR, ONE, TWO}; mk = new MultiKey(keys, false); Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, TWO}, mk.getKeys())); // change key - don't do this! // the hashcode of the MultiKey is now broken keys[3] = FIVE; Assert.assertTrue(Arrays.equals(new Object[] {THREE, FOUR, ONE, FIVE}, mk.getKeys())); }
public void testEqualsAfterSerialization() throws IOException, ClassNotFoundException { SystemHashCodeSimulatingKey sysKey = new SystemHashCodeSimulatingKey("test"); MultiKey mk = new MultiKey(ONE, sysKey); Map map = new HashMap(); map.put(mk, TWO); // serialize ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(baos); out.writeObject(sysKey); out.writeObject(map); out.close(); // deserialize ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream in = new ObjectInputStream(bais); sysKey = (SystemHashCodeSimulatingKey) in.readObject(); // simulate deserialization in another process Map map2 = (Map) in.readObject(); in.close(); assertEquals(2, sysKey.hashCode()); // different hashCode now MultiKey mk2 = new MultiKey(ONE, sysKey); assertEquals(TWO, map2.get(mk2)); } }
public void testGetKeysSimpleConstructor() { MultiKey mk = new MultiKey(ONE, TWO); Object[] array = mk.getKeys(); Assert.assertSame(ONE, array[0]); Assert.assertSame(TWO, array[1]); Assert.assertEquals(2, array.length); }
public void testNullHandling() { resetFull(); assertEquals(null, map.get(null)); assertEquals(false, map.containsKey(null)); assertEquals(false, map.containsValue(null)); assertEquals(null, map.remove(null)); assertEquals(false, map.entrySet().contains(null)); assertEquals(false, map.keySet().contains(null)); assertEquals(false, map.values().contains(null)); try { map.put(null, null); fail(); } catch (NullPointerException ex) {} assertEquals(null, map.put(new MultiKey(null, null), null)); try { map.put(null, new Object()); fail(); } catch (NullPointerException ex) {} }
/** * Stores the value against the specified multi-key. * * @param key1 the first key * @param key2 the second key * @param key3 the third key * @param key4 the fourth key * @param key5 the fifth key * @param value the value to store * @return the value previously mapped to this combined key, null if none */ public Object put(Object key1, Object key2, Object key3, Object key4, Object key5, Object value) { int hashCode = hash(key1, key2, key3, key4, key5); int index = map.hashIndex(hashCode, map.data.length); AbstractHashedMap.HashEntry entry = map.data[index]; while (entry != null) { if (entry.hashCode == hashCode && isEqualKey(entry, key1, key2, key3, key4, key5)) { Object oldValue = entry.getValue(); map.updateEntry(entry, value); return oldValue; } entry = entry.next; } map.addMapping(index, hashCode, new MultiKey(key1, key2, key3, key4, key5), value); return null; }
/** * Stores the value against the specified multi-key. * * @param key1 the first key * @param key2 the second key * @param value the value to store * @return the value previously mapped to this combined key, null if none */ public Object put(Object key1, Object key2, Object value) { int hashCode = hash(key1, key2); int index = map.hashIndex(hashCode, map.data.length); AbstractHashedMap.HashEntry entry = map.data[index]; while (entry != null) { if (entry.hashCode == hashCode && isEqualKey(entry, key1, key2)) { Object oldValue = entry.getValue(); map.updateEntry(entry, value); return oldValue; } entry = entry.next; } map.addMapping(index, hashCode, new MultiKey(key1, key2), value); return null; }
/** * Stores the value against the specified multi-key. * * @param key1 the first key * @param key2 the second key * @param key3 the third key * @param key4 the fourth key * @param value the value to store * @return the value previously mapped to this combined key, null if none */ public Object put(Object key1, Object key2, Object key3, Object key4, Object value) { int hashCode = hash(key1, key2, key3, key4); int index = map.hashIndex(hashCode, map.data.length); AbstractHashedMap.HashEntry entry = map.data[index]; while (entry != null) { if (entry.hashCode == hashCode && isEqualKey(entry, key1, key2, key3, key4)) { Object oldValue = entry.getValue(); map.updateEntry(entry, value); return oldValue; } entry = entry.next; } map.addMapping(index, hashCode, new MultiKey(key1, key2, key3, key4), value); return null; }
/** * Stores the value against the specified multi-key. * * @param key1 the first key * @param key2 the second key * @param key3 the third key * @param value the value to store * @return the value previously mapped to this combined key, null if none */ public Object put(Object key1, Object key2, Object key3, Object value) { int hashCode = hash(key1, key2, key3); int index = map.hashIndex(hashCode, map.data.length); AbstractHashedMap.HashEntry entry = map.data[index]; while (entry != null) { if (entry.hashCode == hashCode && isEqualKey(entry, key1, key2, key3)) { Object oldValue = entry.getValue(); map.updateEntry(entry, value); return oldValue; } entry = entry.next; } map.addMapping(index, hashCode, new MultiKey(key1, key2, key3), value); return null; }
/** * Stores the value against the specified multi-key. * * @param key1 the first key * @param key2 the second key * @param value the value to store * @return the value previously mapped to this combined key, null if none */ public Object put(Object key1, Object key2, Object value) { int hashCode = hash(key1, key2); int index = map.hashIndex(hashCode, map.data.length); AbstractHashedMap.HashEntry entry = map.data[index]; while (entry != null) { if (entry.hashCode == hashCode && isEqualKey(entry, key1, key2)) { Object oldValue = entry.getValue(); map.updateEntry(entry, value); return oldValue; } entry = entry.next; } map.addMapping(index, hashCode, new MultiKey(key1, key2), value); return null; }
public void testGetIndexed() { MultiKey mk = new MultiKey(ONE, TWO); Assert.assertSame(ONE, mk.getKey(0)); Assert.assertSame(TWO, mk.getKey(1)); try { mk.getKey(-1); fail(); } catch (IndexOutOfBoundsException ex) {} try { mk.getKey(2); fail(); } catch (IndexOutOfBoundsException ex) {} }