auto merge of #11375 : alexcrichton/rust/issue-11372, r=pcwalton
Closes #11372
This commit is contained in:
commit
9dece60391
|
@ -322,7 +322,7 @@ mod test {
|
|||
use io;
|
||||
use prelude::*;
|
||||
use super::*;
|
||||
use super::super::mem::{MemReader, MemWriter};
|
||||
use super::super::mem::{MemReader, MemWriter, BufReader};
|
||||
use Harness = extra::test::BenchHarness;
|
||||
|
||||
/// A type, free to create, primarily intended for benchmarking creation of wrappers that, just
|
||||
|
@ -526,6 +526,12 @@ mod test {
|
|||
assert_eq!(reader.read(buf), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn read_char_buffered() {
|
||||
let buf = [195u8, 159u8];
|
||||
let mut reader = BufferedReader::with_capacity(1, BufReader::new(buf));
|
||||
assert_eq!(reader.read_char(), Some('ß'));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_buffered_reader(bh: &mut Harness) {
|
||||
|
|
|
@ -1212,9 +1212,15 @@ pub trait Buffer: Reader {
|
|||
};
|
||||
if width == 0 { return None } // not uf8
|
||||
let mut buf = [0, ..4];
|
||||
match self.read(buf.mut_slice_to(width)) {
|
||||
Some(n) if n == width => {}
|
||||
Some(..) | None => return None // read error
|
||||
{
|
||||
let mut start = 0;
|
||||
loop {
|
||||
match self.read(buf.mut_slice(start, width)) {
|
||||
Some(n) if n == width - start => break,
|
||||
Some(n) if n < width - start => { start += n; }
|
||||
Some(..) | None => return None // read error
|
||||
}
|
||||
}
|
||||
}
|
||||
match str::from_utf8_opt(buf.slice_to(width)) {
|
||||
Some(s) => Some(s.char_at(0)),
|
||||
|
|
Loading…
Reference in a new issue