use abstract class
add unionDict
add more test