@Test(expected = ConcurrentModificationException.class) public void testConcurrentModificationTriConsumerPut() { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "aaa"); original.forEach(new TriConsumer<String, Object, Object>() { @Override public void accept(final String s, final Object o, final Object o2) { original.putValue("c", "other"); } }, null); }
@Override public Map<String, String> toMap() { final Map<String, String> result = new HashMap<>(size()); for (int i = 0; i < size(); i++) { final Object value = getValueAt(i); result.put(getKeyAt(i), value == null ? null : String.valueOf(value)); } return result; }
@Override public void putValue(final String key, final Object value) { assertNotFrozen(); assertNoConcurrentModification(); if (keys == EMPTY) { inflateTable(threshold); } final int index = indexOfKey(key); if (index >= 0) { keys[index] = key; values[index] = value; } else { // not found, so insert. insertAt(~index, key, value); } }
@Override public void clear() { if (keys == EMPTY) { return; } assertNotFrozen(); assertNoConcurrentModification(); Arrays.fill(keys, 0, size, null); Arrays.fill(values, 0, size, null); size = 0; }
@Test public void testRemove() { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); assertEquals(1, original.size()); assertEquals("avalue", original.getValue("a")); original.remove("a"); assertEquals(0, original.size()); assertNull("no a val", original.getValue("a")); original.remove("B"); assertEquals(0, original.size()); assertNull("no B val", original.getValue("B")); }
/** * Returns an implementation of the {@code StringMap} used to back this thread context map, pre-populated * with the contents of the specified context data. * <p> * Subclasses may override. * </p> * @param original the key-value pairs to initialize the returned context data with * @return an implementation of the {@code StringMap} used to back this thread context map */ protected StringMap createStringMap(final ReadOnlyStringMap original) { return new SortedArrayStringMap(original); }
@Test public void testPutInsertsInAlphabeticOrder() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("B", "Bvalue"); original.putValue("3", "3value"); original.putValue("c", "cvalue"); original.putValue("d", "dvalue"); assertEquals("avalue", original.getValue("a")); assertEquals("avalue", original.getValueAt(2)); assertEquals("Bvalue", original.getValue("B")); assertEquals("Bvalue", original.getValueAt(1)); assertEquals("3value", original.getValue("3")); assertEquals("3value", original.getValueAt(0)); assertEquals("cvalue", original.getValue("c")); assertEquals("cvalue", original.getValueAt(3)); assertEquals("dvalue", original.getValue("d")); assertEquals("dvalue", original.getValueAt(4)); }
@Test public void testSerializationOfNonSerializableValue() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("B", "Bvalue"); original.putValue("unserializable", new Object()); final byte[] binary = serialize(original); final SortedArrayStringMap copy = deserialize(binary); final SortedArrayStringMap expected = new SortedArrayStringMap(); expected.putValue("a", "avalue"); expected.putValue("B", "Bvalue"); expected.putValue("unserializable", null); assertEquals(expected, copy); }
@Test public void testGetValueAt() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); assertEquals("a", original.getKeyAt(0)); assertEquals("avalue", original.getValueAt(0)); original.putValue("B", "Bvalue"); assertEquals("B", original.getKeyAt(0)); assertEquals("Bvalue", original.getValueAt(0)); assertEquals("a", original.getKeyAt(1)); assertEquals("avalue", original.getValueAt(1)); original.putValue("3", "3value"); assertEquals("3", original.getKeyAt(0)); assertEquals("3value", original.getValueAt(0)); assertEquals("B", original.getKeyAt(1)); assertEquals("Bvalue", original.getValueAt(1)); assertEquals("a", original.getKeyAt(2)); assertEquals("avalue", original.getValueAt(2)); }
@Test public void testForEachTriConsumer() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("B", "Bvalue"); original.putValue("3", "3value"); final State state = new State(); state.data = original; original.forEach(COUNTER, state); assertEquals(state.count, original.size()); } }
@Test public void testSizeAndIsEmpty() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); assertEquals(0, original.size()); assertTrue("initial", original.isEmpty()); original.putValue("a", "avalue"); assertEquals(1, original.size()); assertFalse("size=" + original.size(), original.isEmpty()); original.putValue("B", "Bvalue"); assertEquals(2, original.size()); assertFalse("size=" + original.size(), original.isEmpty()); original.putValue("3", "3value"); assertEquals(3, original.size()); assertFalse("size=" + original.size(), original.isEmpty()); original.remove("B"); assertEquals(2, original.size()); assertFalse("size=" + original.size(), original.isEmpty()); original.remove("3"); assertEquals(1, original.size()); assertFalse("size=" + original.size(), original.isEmpty()); original.remove("a"); assertEquals(0, original.size()); assertTrue("size=" + original.size(), original.isEmpty()); }
@Test public void testRemoveNullsOutRemovedSlot() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("b", "bvalue"); original.putValue("c", "cvalue"); original.putValue("d", "dvalue"); original.remove("a"); original.remove("b"); original.remove("c"); original.remove("d"); assertNull(original.getValueAt(0)); // ensure slots in the values array are nulled out final Field f = SortedArrayStringMap.class.getDeclaredField("values"); f.setAccessible(true); final Object[] values = (Object[]) f.get(original); for (int i = 0; i < values.length; i++) { assertNull(values[i]); } }
@Test public void testClear() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("B", "Bvalue"); original.putValue("3", "3value"); assertEquals(3, original.size()); original.clear(); assertEquals(0, original.size()); // ensure slots in the values array are nulled out final Field f = SortedArrayStringMap.class.getDeclaredField("values"); f.setAccessible(true); final Object[] values = (Object[]) f.get(original); for (int i = 0; i < values.length; i++) { assertNull(values[i]); } }
@Test public void testNullKeysAllowed() { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("B", "Bvalue"); original.putValue("3", "3value"); original.putValue("c", "cvalue"); original.putValue("d", "dvalue"); assertEquals(5, original.size()); assertEquals("{3=3value, B=Bvalue, a=avalue, c=cvalue, d=dvalue}", original.toString()); original.putValue(null, "nullvalue"); assertEquals(6, original.size()); assertEquals("{null=nullvalue, 3=3value, B=Bvalue, a=avalue, c=cvalue, d=dvalue}", original.toString()); original.putValue(null, "otherNullvalue"); assertEquals("{null=otherNullvalue, 3=3value, B=Bvalue, a=avalue, c=cvalue, d=dvalue}", original.toString()); assertEquals(6, original.size()); original.putValue(null, "nullvalue"); assertEquals(6, original.size()); assertEquals("{null=nullvalue, 3=3value, B=Bvalue, a=avalue, c=cvalue, d=dvalue}", original.toString()); original.putValue(null, "abc"); assertEquals(6, original.size()); assertEquals("{null=abc, 3=3value, B=Bvalue, a=avalue, c=cvalue, d=dvalue}", original.toString()); }
@Test(expected = UnsupportedOperationException.class) public void testFreezeProhibitsRemove() { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("b", "bbb"); original.freeze(); original.remove("b"); // existing key: modifies the collection }
@Test public void testPutAll() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("B", "Bvalue"); original.putValue("3", "3value"); final SortedArrayStringMap other = new SortedArrayStringMap(); other.putAll(original); assertEquals(original, other); other.putValue("3", "otherValue"); assertNotEquals(original, other); other.putValue("3", null); assertNotEquals(original, other); other.putValue("3", "3value"); assertEquals(original, other); }
@Test public void testNullKeysCopiedToAsMap() { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("B", "Bvalue"); original.putValue("3", "3value"); original.putValue("c", "cvalue"); original.putValue("d", "dvalue"); assertEquals(5, original.size()); expected.put("c", "cvalue"); expected.put("d", "dvalue"); assertEquals("initial", expected, original.toMap()); original.putValue(null, "nullvalue"); expected.put(null, "nullvalue"); assertEquals(6, original.size()); assertEquals("with null key", expected, original.toMap()); original.putValue(null, "otherNullvalue"); expected.put(null, "otherNullvalue"); assertEquals(6, original.size()); assertEquals("with null key value2", expected, original.toMap()); original.putValue(null, "nullvalue"); expected.put(null, "nullvalue"); assertEquals(6, original.size()); assertEquals("with null key value1 again", expected, original.toMap()); original.putValue(null, "abc");
@Test(expected = UnsupportedOperationException.class) public void testFreezeProhibitsClear() { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "aaa"); original.freeze(); original.clear(); }
@Test public void testRemoveWhenFull() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); original.putValue("b", "bvalue"); original.putValue("c", "cvalue"); original.putValue("d", "dvalue"); // default capacity = 4 original.remove("d"); }
@Test public void testIndexOfKey() throws Exception { final SortedArrayStringMap original = new SortedArrayStringMap(); original.putValue("a", "avalue"); assertEquals(0, original.indexOfKey("a")); original.putValue("B", "Bvalue"); assertEquals(1, original.indexOfKey("a")); assertEquals(0, original.indexOfKey("B")); original.putValue("3", "3value"); assertEquals(2, original.indexOfKey("a")); assertEquals(1, original.indexOfKey("B")); assertEquals(0, original.indexOfKey("3")); original.putValue("A", "AAA"); assertEquals(3, original.indexOfKey("a")); assertEquals(2, original.indexOfKey("B")); assertEquals(1, original.indexOfKey("A")); assertEquals(0, original.indexOfKey("3")); original.putValue("C", "CCC"); assertEquals(4, original.indexOfKey("a")); assertEquals(3, original.indexOfKey("C")); assertEquals(2, original.indexOfKey("B")); assertEquals(1, original.indexOfKey("A")); assertEquals(0, original.indexOfKey("3")); original.putValue("2", "222"); assertEquals(5, original.indexOfKey("a"));