multi-type supported
add some test cases