package org.infinispan.atomic; import org.infinispan.atomic.impl.AtomicHashMap; import org.infinispan.atomic.impl.AtomicHashMapDelta; import org.infinispan.test.AbstractInfinispanTest; import org.testng.annotations.Test; @Test(groups = "unit", testName = "atomic.AtomicHashMapTest") public class AtomicHashMapTest extends AbstractInfinispanTest { public void testDeltasWithEmptyMap() { AtomicHashMap m = new AtomicHashMap(); Delta d = m.delta(); assert d instanceof AtomicHashMapDelta; assert ((AtomicHashMapDelta) d).getChangeLogSize() == 0; AtomicHashMap newMap = new AtomicHashMap(); newMap.initForWriting(); newMap.put("k", "v"); newMap = (AtomicHashMap) d.merge(newMap); assert newMap.containsKey("k"); assert newMap.size() == 1; newMap = (AtomicHashMap) d.merge(null); assert newMap.isEmpty(); } public void testDeltasWithNoChanges() { AtomicHashMap m = new AtomicHashMap(); m.initForWriting(); m.put("k1", "v1"); m.commit(); assert m.size() == 1; Delta d = m.delta(); assert d instanceof AtomicHashMapDelta; assert ((AtomicHashMapDelta) d).getChangeLogSize() == 0; AtomicHashMap newMap = new AtomicHashMap(); newMap.initForWriting(); newMap.put("k", "v"); newMap = (AtomicHashMap) d.merge(newMap); assert newMap.containsKey("k"); assert newMap.size() == 1; newMap = (AtomicHashMap) d.merge(null); assert newMap.isEmpty(); } public void testDeltasWithRepeatedChanges() { AtomicHashMap m = new AtomicHashMap(); m.initForWriting(); m.put("k1", "v1"); m.put("k1", "v2"); m.put("k1", "v3"); assert m.size() == 1; AtomicHashMapDelta d = (AtomicHashMapDelta) m.delta(); assert d.getChangeLogSize() != 0; AtomicHashMap newMap = new AtomicHashMap(); newMap.initForWriting(); newMap.put("k1", "v4"); newMap = (AtomicHashMap) d.merge(newMap); assert newMap.containsKey("k1"); assert newMap.get("k1").equals("v3"); assert newMap.size() == 1; newMap = (AtomicHashMap) d.merge(null); assert newMap.containsKey("k1"); assert newMap.get("k1").equals("v3"); assert newMap.size() == 1; } }