simplify shift/reset API and add test (currently failing)