use preconditions to test protocols