Auto merge of #130964 - matthiaskrgr:rollup-suriuub, r=matthiaskrgr · qinheping/verify-rust-std@098ada1 (original) (raw)

`@@ -735,6 +735,69 @@ fn read_buf_full_read() {

`

735

735

`assert_eq!(BufReader::new(FullRead).fill_buf().unwrap().len(), DEFAULT_BUF_SIZE);

`

736

736

`}

`

737

737

``

``

738

`+

struct DataAndErrorReader(&'static [u8]);

`

``

739

+

``

740

`+

impl Read for DataAndErrorReader {

`

``

741

`+

fn read(&mut self, _buf: &mut [u8]) -> io::Result {

`

``

742

`` +

panic!("We want tests to use read_buf")

``

``

743

`+

}

`

``

744

+

``

745

`+

fn read_buf(&mut self, buf: io::BorrowedCursor<'_>) -> io::Result<()> {

`

``

746

`+

self.0.read_buf(buf).unwrap();

`

``

747

`+

Err(io::Error::other("error"))

`

``

748

`+

}

`

``

749

`+

}

`

``

750

+

``

751

`+

#[test]

`

``

752

`+

fn read_buf_data_and_error_take() {

`

``

753

`+

let mut buf = [0; 64];

`

``

754

`+

let mut buf = io::BorrowedBuf::from(buf.as_mut_slice());

`

``

755

+

``

756

`+

let mut r = DataAndErrorReader(&[4, 5, 6]).take(1);

`

``

757

`+

assert!(r.read_buf(buf.unfilled()).is_err());

`

``

758

`+

assert_eq!(buf.filled(), &[4]);

`

``

759

+

``

760

`+

assert!(r.read_buf(buf.unfilled()).is_ok());

`

``

761

`+

assert_eq!(buf.filled(), &[4]);

`

``

762

`+

assert_eq!(r.get_ref().0, &[5, 6]);

`

``

763

`+

}

`

``

764

+

``

765

`+

#[test]

`

``

766

`+

fn read_buf_data_and_error_buf() {

`

``

767

`+

let mut r = BufReader::new(DataAndErrorReader(&[4, 5, 6]));

`

``

768

+

``

769

`+

assert!(r.fill_buf().is_err());

`

``

770

`+

assert_eq!(r.fill_buf().unwrap(), &[4, 5, 6]);

`

``

771

`+

}

`

``

772

+

``

773

`+

#[test]

`

``

774

`+

fn read_buf_data_and_error_read_to_end() {

`

``

775

`+

let mut r = DataAndErrorReader(&[4, 5, 6]);

`

``

776

+

``

777

`+

let mut v = Vec::with_capacity(200);

`

``

778

`+

assert!(r.read_to_end(&mut v).is_err());

`

``

779

+

``

780

`+

assert_eq!(v, &[4, 5, 6]);

`

``

781

`+

}

`

``

782

+

``

783

`+

#[test]

`

``

784

`+

fn read_to_end_error() {

`

``

785

`+

struct ErrorReader;

`

``

786

+

``

787

`+

impl Read for ErrorReader {

`

``

788

`+

fn read(&mut self, _buf: &mut [u8]) -> io::Result {

`

``

789

`+

Err(io::Error::other("error"))

`

``

790

`+

}

`

``

791

`+

}

`

``

792

+

``

793

`+

let mut r = [4, 5, 6].chain(ErrorReader);

`

``

794

+

``

795

`+

let mut v = Vec::with_capacity(200);

`

``

796

`+

assert!(r.read_to_end(&mut v).is_err());

`

``

797

+

``

798

`+

assert_eq!(v, &[4, 5, 6]);

`

``

799

`+

}

`

``

800

+

738

801

`#[test]

`

739

802

`// Miri does not support signalling OOM

`

740

803

`#[cfg_attr(miri, ignore)]

`