initial submit of code

includes test cases