| 324 | } |
| 325 | |
| 326 | void TestRandomAccess(random::SimplePhilox* rnd, |
| 327 | const std::vector<string>& keys, const KVMap& data, |
| 328 | int num_random_access_iters) { |
| 329 | static const bool kVerbose = false; |
| 330 | Iterator* iter = constructor_->NewIterator(); |
| 331 | ASSERT_TRUE(!iter->Valid()); |
| 332 | KVMap::const_iterator model_iter = data.begin(); |
| 333 | if (kVerbose) fprintf(stderr, "---\n"); |
| 334 | for (int i = 0; i < num_random_access_iters; i++) { |
| 335 | const int toss = rnd->Uniform(3); |
| 336 | switch (toss) { |
| 337 | case 0: { |
| 338 | if (iter->Valid()) { |
| 339 | if (kVerbose) fprintf(stderr, "Next\n"); |
| 340 | iter->Next(); |
| 341 | ++model_iter; |
| 342 | ASSERT_EQ(ToStringPiecePair(data, model_iter), |
| 343 | ToStringPiecePair(iter)); |
| 344 | } |
| 345 | break; |
| 346 | } |
| 347 | |
| 348 | case 1: { |
| 349 | if (kVerbose) fprintf(stderr, "SeekToFirst\n"); |
| 350 | iter->SeekToFirst(); |
| 351 | model_iter = data.begin(); |
| 352 | ASSERT_EQ(ToStringPiecePair(data, model_iter), |
| 353 | ToStringPiecePair(iter)); |
| 354 | break; |
| 355 | } |
| 356 | |
| 357 | case 2: { |
| 358 | string key = PickRandomKey(rnd, keys); |
| 359 | model_iter = data.lower_bound(key); |
| 360 | if (kVerbose) |
| 361 | fprintf(stderr, "Seek '%s'\n", absl::CEscape(key).c_str()); |
| 362 | iter->Seek(StringPiece(key)); |
| 363 | ASSERT_EQ(ToStringPiecePair(data, model_iter), |
| 364 | ToStringPiecePair(iter)); |
| 365 | break; |
| 366 | } |
| 367 | } |
| 368 | } |
| 369 | delete iter; |
| 370 | } |
| 371 | |
| 372 | StringPiecePair ToStringPiecePair(const KVMap& data, |
| 373 | const KVMap::const_iterator& it) { |
nothing calls this directly
no test coverage detected