18 static std::string
BigString(
const std::string& partial_string,
size_t n) {
20 while (result.size() < n) {
21 result.append(partial_string);
30 snprintf(buf,
sizeof(buf),
"%d.", n);
31 return std::string(buf);
49 contents_.append(slice.
data(), slice.
size());
62 ASSERT_TRUE(!returned_partial_) <<
"must not Read() after eof/error";
66 returned_partial_ =
true;
70 if (contents_.
size() < n) {
72 returned_partial_ =
true;
80 if (n > contents_.
size()) {
98 dropped_bytes_ += bytes;
117 writer_(new
Writer(&dest_)),
118 reader_(new
Reader(&source_, &report_, true,
132 void Write(
const std::string& msg) {
133 ASSERT_TRUE(!reading_) <<
"Write() after starting to read";
188 if (report_.
message_.find(msg) == std::string::npos) {
197 std::string record(initial_offset_record_sizes_[i],
198 static_cast<char>(
'a' + i));
205 reader_ =
new Reader(&source_, &report_,
true, initial_offset);
212 Reader* offset_reader =
new Reader(&source_, &report_,
true,
217 delete offset_reader;
221 int expected_record_offset) {
225 Reader* offset_reader =
new Reader(&source_, &report_,
true,
229 ASSERT_LT(expected_record_offset, num_initial_offset_records_);
231 ++expected_record_offset) {
235 ASSERT_EQ(initial_offset_record_sizes_[expected_record_offset],
237 ASSERT_EQ(initial_offset_last_record_offsets_[expected_record_offset],
239 ASSERT_EQ((
char)(
'a' + expected_record_offset), record.
data()[0]);
241 delete offset_reader;
288 for (
int i = 0; i < 100000; i++) {
291 for (
int i = 0; i < 100000; i++) {
365 for (
int i = 0; i < N; i++) {
369 for (
int i = 0; i < N; i++) {
589 int main(
int argc,
char** argv) {
static Status NotFound(const Slice &msg, const Slice &msg2=Slice())
static uint64_t initial_offset_last_record_offsets_[]
void IncrementByte(int offset, int delta)
static const int kHeaderSize
virtual Status Append(const Slice &slice)
int main(int argc, char **argv)
void EncodeFixed32(char *buf, uint32_t value)
static std::string BigString(const std::string &partial_string, size_t n)
size_t DroppedBytes() const
std::string ToString() const
static const int kBlockSize
uint32_t Mask(uint32_t crc)
void WriteInitialOffsetLog()
static size_t initial_offset_record_sizes_[]
static Status Corruption(const Slice &msg, const Slice &msg2=Slice())
static int num_initial_offset_records_
void FixChecksum(int header_offset, int len)
std::string ToString() const
bool ReadRecord(Slice *record, std::string *scratch)
virtual void Corruption(size_t bytes, const Status &status)
virtual Status Skip(uint64_t n)
void CheckOffsetPastEndReturnsNoRecords(uint64_t offset_past_end)
void Write(const std::string &msg)
uint32_t Skewed(int max_log)
void remove_prefix(size_t n)
void StartReadingAt(uint64_t initial_offset)
uint32_t Value(const char *data, size_t n)
static std::string NumberString(int n)
Status AddRecord(const Slice &slice)
static std::string RandomSkewedString(int i, Random *rnd)
std::string ReportMessage() const
const char * data() const
virtual Status Read(size_t n, Slice *result, char *scratch)
void SetByte(int offset, char new_byte)
size_t WrittenBytes() const
uint64_t LastRecordOffset()
void CheckInitialOffsetRecord(uint64_t initial_offset, int expected_record_offset)
std::string MatchError(const std::string &msg) const
void ShrinkSize(int bytes)