MCPcopy Create free account
hub / github.com/apache/arrow / TestReads

Method TestReads

cpp/src/arrow/io/buffered_test.cc:953–988  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

951 }
952
953 void TestReads() {
954 std::default_random_engine gen(/*seed*/ 42);
955 std::uniform_int_distribution<int64_t> read_len_dist(1, 80);
956
957 int64_t pos = 0;
958 const int64_t size = static_cast<int64_t>(data_.size());
959 while (pos < size) {
960 const int64_t read_len = read_len_dist(gen);
961 ASSERT_OK_AND_ASSIGN(auto buf, buffered_->Read(read_len));
962 AssertBufferEqual(*buf, std::string_view(data_).substr(pos, read_len));
963 pos += buf->size();
964 }
965
966 // EOF was reached
967 ASSERT_EQ(pos, size);
968
969 // Number of reads should not be excessive given the buffer size
970 int64_t max_reads = (size + buffer_size_ - 1) / buffer_size_;
971 EXPECT_LE(tracked_->num_reads(), max_reads);
972 const auto& read_ranges = tracked_->get_read_ranges();
973 pos = 0;
974 for (size_t i = 0; i < read_ranges.size(); ++i) {
975 const auto cur = read_ranges[i];
976 ASSERT_EQ(cur.offset, pos);
977 // Never read less than buffer size bytes, except perhaps if fewer bytes remain
978 ASSERT_GE(cur.length, std::min(buffer_size_, size - pos));
979 // Bump actual position in the file
980 pos += std::min(cur.length, size - pos);
981 }
982
983 // Further reads return an empty buffer
984 ASSERT_OK_AND_ASSIGN(auto buf, buffered_->Read(buffer_size_ - 1));
985 AssertBufferEqual(*buf, "");
986 ASSERT_OK_AND_ASSIGN(buf, buffered_->Read(buffer_size_ + 1));
987 AssertBufferEqual(*buf, "");
988 }
989
990 protected:
991 std::string data_;

Callers

nothing calls this directly

Calls 6

AssertBufferEqualFunction · 0.85
substrMethod · 0.80
num_readsMethod · 0.80
ASSERT_OK_AND_ASSIGNFunction · 0.50
sizeMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected