tests
finishes up basic outline of code, makes tests more accurate
merge from experimental branch
basic sanity tests