add lots of unit tests