added a lot of tests