diff --git a/crates/matrix-sdk-common/src/linked_chunk/mod.rs b/crates/matrix-sdk-common/src/linked_chunk/mod.rs index 6a67383b014..f42409d68f7 100644 --- a/crates/matrix-sdk-common/src/linked_chunk/mod.rs +++ b/crates/matrix-sdk-common/src/linked_chunk/mod.rs @@ -816,8 +816,9 @@ impl LinkedChunk { .skip_while({ let expected_index = position.index(); - move |(Position(_chunk_identifier, item_index), _item)| { - *item_index != expected_index + move |(Position(chunk_identifier, item_index), _item)| { + *chunk_identifier == position.chunk_identifier() + && *item_index != expected_index } })) } @@ -1813,6 +1814,26 @@ mod tests { assert_matches!(iterator.next(), None); } + #[test] + fn test_ritems_with_final_gap() -> Result<(), Error> { + let mut linked_chunk = LinkedChunk::<3, char, ()>::new(); + linked_chunk.push_items_back(['a', 'b']); + linked_chunk.push_gap_back(()); + linked_chunk.push_items_back(['c', 'd', 'e']); + linked_chunk.push_gap_back(()); + + let mut iterator = linked_chunk.ritems(); + + assert_matches!(iterator.next(), Some((Position(ChunkIdentifier(2), 2), 'e'))); + assert_matches!(iterator.next(), Some((Position(ChunkIdentifier(2), 1), 'd'))); + assert_matches!(iterator.next(), Some((Position(ChunkIdentifier(2), 0), 'c'))); + assert_matches!(iterator.next(), Some((Position(ChunkIdentifier(0), 1), 'b'))); + assert_matches!(iterator.next(), Some((Position(ChunkIdentifier(0), 0), 'a'))); + assert_matches!(iterator.next(), None); + + Ok(()) + } + #[test] fn test_ritems_empty() { let linked_chunk = LinkedChunk::<2, char, ()>::new();