Add invariant support
add tests
add travis config