| 592 | |
| 593 | #[crate::test] |
| 594 | fn test_multi() { |
| 595 | let segments = vec![vec![0, 1, 2, 3], vec![4, 5, 6, 7, 8, 9], vec![10, 11]]; |
| 596 | let mut s: SegmentedBytes<2> = segments.into_iter().collect(); |
| 597 | |
| 598 | assert_eq!(s.len(), 12); |
| 599 | assert_eq!(s.remaining(), 12); |
| 600 | |
| 601 | // Read the first chunk. |
| 602 | assert_eq!(s.chunk(), [0, 1, 2, 3]); |
| 603 | |
| 604 | // Advance to the middle. |
| 605 | s.advance(6); |
| 606 | assert_eq!(s.remaining(), 6); |
| 607 | |
| 608 | // Convert to a reader. |
| 609 | let mut reader = s.reader(); |
| 610 | // We should be at the beginning, and only see the remaining 6 bytes. |
| 611 | assert_eq!(reader.len(), 6); |
| 612 | assert_eq!(reader.position(), 0); |
| 613 | |
| 614 | // Read to the end of the second segment. |
| 615 | let mut buf = [0; 8]; |
| 616 | let bytes_read = reader.read(&mut buf).unwrap(); |
| 617 | assert_eq!(bytes_read, 4); |
| 618 | assert_eq!(buf, [6, 7, 8, 9, 0, 0, 0, 0]); |
| 619 | |
| 620 | // Read again to get the final segment. |
| 621 | let bytes_read = reader.read(&mut buf[4..]).unwrap(); |
| 622 | assert_eq!(bytes_read, 2); |
| 623 | assert_eq!(buf, [6, 7, 8, 9, 10, 11, 0, 0]); |
| 624 | |
| 625 | // Seek back to the beginning. |
| 626 | reader.seek(SeekFrom::Start(0)).unwrap(); |
| 627 | // Read everything. |
| 628 | reader.read_exact(&mut buf[..6]).unwrap(); |
| 629 | assert_eq!(buf, [6, 7, 8, 9, 10, 11, 0, 0]); |
| 630 | } |
| 631 | |
| 632 | #[crate::test] |
| 633 | fn test_single_empty_segment() { |