@@ -2518,6 +2518,10 @@ static void VerifyCharIterator(const absl::Cord& cord) {
25182518 absl::Cord::CharRange range = cord.Chars ();
25192519 EXPECT_EQ (range.begin () == range.end (), cord.empty ());
25202520 EXPECT_EQ (range.begin () != range.end (), !cord.empty ());
2521+ EXPECT_EQ (absl::Cord::Distance (range.begin (), range.end ()),
2522+ static_cast <ptrdiff_t >(cord.size ()));
2523+ EXPECT_EQ (absl::Cord::Distance (range.end (), range.begin ()),
2524+ -static_cast <ptrdiff_t >(cord.size ()));
25212525
25222526 size_t i = 0 ;
25232527 absl::Cord::CharIterator pre_iter = cord.char_begin ();
@@ -2548,19 +2552,29 @@ static void VerifyCharIterator(const absl::Cord& cord) {
25482552 absl::Cord::CharIterator advance_iter = range.begin ();
25492553 absl::Cord::Advance (&advance_iter, i);
25502554 EXPECT_EQ (pre_iter, advance_iter);
2555+ EXPECT_EQ (absl::Cord::Distance (range.begin (), advance_iter),
2556+ static_cast <ptrdiff_t >(i));
25512557
25522558 advance_iter = range.begin ();
25532559 EXPECT_EQ (absl::Cord::AdvanceAndRead (&advance_iter, i), cord.Subcord (0 , i));
25542560 EXPECT_EQ (pre_iter, advance_iter);
2561+ EXPECT_EQ (absl::Cord::Distance (range.begin (), advance_iter),
2562+ static_cast <ptrdiff_t >(i));
25552563
25562564 advance_iter = pre_iter;
25572565 absl::Cord::Advance (&advance_iter, cord.size () - i);
25582566 EXPECT_EQ (range.end (), advance_iter);
2567+ EXPECT_EQ (absl::Cord::Distance (range.begin (), advance_iter),
2568+ static_cast <ptrdiff_t >(cord.size ()));
2569+ EXPECT_EQ (absl::Cord::Distance (advance_iter, range.end ()), 0 );
25592570
25602571 advance_iter = pre_iter;
25612572 EXPECT_EQ (absl::Cord::AdvanceAndRead (&advance_iter, cord.size () - i),
25622573 cord.Subcord (i, cord.size () - i));
25632574 EXPECT_EQ (range.end (), advance_iter);
2575+ EXPECT_EQ (absl::Cord::Distance (range.begin (), advance_iter),
2576+ static_cast <ptrdiff_t >(cord.size ()));
2577+ EXPECT_EQ (absl::Cord::Distance (advance_iter, range.end ()), 0 );
25642578
25652579 ++i;
25662580 ++pre_iter;
@@ -2642,16 +2656,25 @@ TEST_P(CordTest, CharIteratorAdvanceAndRead) {
26422656
26432657 MaybeHarden (cord);
26442658
2659+
26452660 for (size_t chunk_size :
26462661 {kChunkSize1 , kChunkSize2 , kChunkSize3 , kChunkSize4 }) {
26472662 absl::Cord::CharIterator it = cord.char_begin ();
2663+ size_t it_remaining = cord.size ();
2664+ size_t it_advanced = 0 ;
26482665 size_t offset = 0 ;
26492666 while (offset < data.length ()) {
2667+ EXPECT_EQ (absl::Cord::Distance (it, cord.char_end ()), it_remaining);
2668+ EXPECT_EQ (absl::Cord::Distance (cord.char_begin (), it), it_advanced);
26502669 const size_t n = std::min<size_t >(data.length () - offset, chunk_size);
26512670 absl::Cord chunk = cord.AdvanceAndRead (&it, n);
26522671 ASSERT_EQ (chunk.size (), n);
26532672 ASSERT_EQ (chunk.Compare (data.substr (offset, n)), 0 );
26542673 offset += n;
2674+ it_remaining -= n;
2675+ it_advanced += n;
2676+ EXPECT_EQ (absl::Cord::Distance (it, cord.char_end ()), it_remaining);
2677+ EXPECT_EQ (absl::Cord::Distance (cord.char_begin (), it), it_advanced);
26552678 }
26562679 }
26572680}
0 commit comments