@Test
public void testJoin() {

	SymbolicAddressMap m1 = map1();
	SymbolicAddressMap m2 = map2();
	SymbolicAddressMap top = SymbolicAddressMap.top();
	// join with undefined
	assertEquals(join(m1,null),m1);
	assertEquals(join(m2,null),m2);
	assertEquals(join(top,null),top);
	// join reflexivity
	assertEquals(join(m1,m2),join(m2,m1));
	// join top
	assertEquals(join(m1,top),top);
	assertEquals(join(top,m1),top);
	assertEquals(join(top,top),top);
	// join subset
	assert(m1.isSubset(join(m1,m2)));
	assert(m1.isSubset(join(m2,m1)));
	assert(m2.isSubset(join(m1,m2)));
	assert(m2.isSubset(join(m2,m1)));
	assert(join(m1,m2).isSubset(top));		
}