Improve the supported types
Add more test cases