testing framework

Will still need to actually write some tests.