### Question:
AccessPathStore implements Store<AccessPathStore<V>>, LocalVariableValues<V>, AccessPathValues<V> { @Override public AccessPathStore<V> leastUpperBound(AccessPathStore<V> other) { ImmutableMap.Builder<AccessPath, V> resultHeap = ImmutableMap.builder(); for (AccessPath aPath : intersection(heap().keySet(), other.heap().keySet())) { resultHeap.put(aPath, heap().get(aPath).leastUpperBound(other.heap().get(aPath))); } return AccessPathStore.create(resultHeap.build()); }  abstract ImmutableMap<AccessPath, V> heap(); @SuppressWarnings("unchecked") // fully variant static AccessPathStore<V> empty(); @Override V valueOfLocalVariable(LocalVariableNode node, V defaultValue); Builder<V> toBuilder(); @Override V valueOfAccessPath(AccessPath path, V defaultValue); @Override AccessPathStore<V> copy(); @Override AccessPathStore<V> leastUpperBound(AccessPathStore<V> other); @Override AccessPathStore<V> widenedUpperBound(AccessPathStore<V> vAccessPathStore); @Override boolean canAlias(FlowExpressions.Receiver a, FlowExpressions.Receiver b); @Override String visualize(CFGVisualizer<?, AccessPathStore<V>, ?> cfgVisualizer);  }### Answer:
@Test public void leastUpperBoundEmpty() { assertThat(newStore().leastUpperBound(newStore())).isEqualTo(newStore()); }