| 402 | |
| 403 | template <typename SlowStreamType> |
| 404 | void TestSlowInputStream() { |
| 405 | using clock = std::chrono::high_resolution_clock; |
| 406 | |
| 407 | std::shared_ptr<RandomAccessFile> stream = BufferReader::FromString("abcdefghijkl"); |
| 408 | const double latency = 0.6; |
| 409 | auto slow = std::make_shared<SlowStreamType>(stream, latency); |
| 410 | |
| 411 | ASSERT_FALSE(slow->closed()); |
| 412 | auto t1 = clock::now(); |
| 413 | ASSERT_OK_AND_ASSIGN(auto buf, slow->Read(6)); |
| 414 | auto t2 = clock::now(); |
| 415 | AssertBufferEqual(*buf, "abcdef"); |
| 416 | auto dt = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1).count(); |
| 417 | #ifdef ARROW_WITH_TIMING_TESTS |
| 418 | ASSERT_LT(dt, latency * 3); // likely |
| 419 | ASSERT_GT(dt, latency / 3); // likely |
| 420 | #else |
| 421 | ARROW_UNUSED(dt); |
| 422 | #endif |
| 423 | |
| 424 | ASSERT_OK_AND_ASSIGN(std::string_view view, slow->Peek(4)); |
| 425 | ASSERT_EQ(view, std::string_view("ghij")); |
| 426 | |
| 427 | ASSERT_OK(slow->Close()); |
| 428 | ASSERT_TRUE(slow->closed()); |
| 429 | ASSERT_TRUE(stream->closed()); |
| 430 | ASSERT_OK(slow->Close()); |
| 431 | ASSERT_TRUE(slow->closed()); |
| 432 | ASSERT_TRUE(stream->closed()); |
| 433 | } |
| 434 | |
| 435 | TEST(TestSlowInputStream, Basics) { TestSlowInputStream<SlowInputStream>(); } |
| 436 |
nothing calls this directly
no test coverage detected