better rules names
throw std::runtime_error on expectation failure