SymbolicAddressMap { public BoundedSet<SymbolicAddress> getStack(int index) { if(this.isTop()) return bsFactory.top(); Location loc = new Location(index); BoundedSet<SymbolicAddress> val = mapP.get(loc); if(val == null) { Logger.getLogger(this.getClass()).error("Undefined stack location: "+loc); throw new AssertionError("Undefined stack Location"); } return val; } SymbolicAddressMap(BoundedSetFactory<SymbolicAddress> bsFactory); private  SymbolicAddressMap(BoundedSetFactory<SymbolicAddress> bsFactory,
							   HashMap<Location,BoundedSet<SymbolicAddress>> initP,
							   HashMap<String,BoundedSet<SymbolicAddress>> initA); boolean isTop(); static SymbolicAddressMap top(); @Override int hashCode(); @Override boolean equals(Object obj); boolean isSubset(SymbolicAddressMap other); SymbolicAddressMap cloneFilterStack(int bound); SymbolicAddressMap cloneInvoke(int framePtr); void addStackUpto(SymbolicAddressMap in, int bound); void join(SymbolicAddressMap b); void joinReturned(SymbolicAddressMap returned, int framePtr); void copyStack(SymbolicAddressMap in, int dst, int src); BoundedSet<SymbolicAddress> getStack(int index); void putStack(int index, BoundedSet<SymbolicAddress> bs); BoundedSet<SymbolicAddress> getHeap(String staticfield); void putHeap(String staticfield, BoundedSet<SymbolicAddress> pointers); void put(Location l, BoundedSet<SymbolicAddress> bs); void addAlias(String ty, BoundedSet<SymbolicAddress> newAliases); BoundedSet<SymbolicAddress> getAliases(String fieldType); void print(PrintStream out, int indent); @Override String toString();  }
@Test public void testGetStack() { SymbolicAddressMap m1 = map1(); assertEquals(m1.getStack(0),boundedSet("a","b")); m1.putStack(3,bsf2.top()); assertEquals(m1.getStack(3),SymbolicAddressMap.top().getStack(3)); }