add more tests and use decimal instead of float