diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2021-01-31 01:47:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-31 01:47:18 +0100 |
| commit | 1bf130519ca1c020623a550dc6b250eacea68e72 (patch) | |
| tree | e0016b0933599f39ba9d316e573fb322ab0844fc | |
| parent | 04caa632dd10c2bf64b69524c7f9c4c30a436877 (diff) | |
| parent | f1cd17961ccaac4bfaeeab81969cf36c56eec4a5 (diff) | |
| download | rust-1bf130519ca1c020623a550dc6b250eacea68e72.tar.gz rust-1bf130519ca1c020623a550dc6b250eacea68e72.zip | |
Rollup merge of #78044 - oberien:empty-seek, r=m-ou-se
Implement io::Seek for io::Empty Fix #78029
| -rw-r--r-- | library/std/src/io/util.rs | 17 | ||||
| -rw-r--r-- | library/std/src/io/util/tests.rs | 22 |
2 files changed, 37 insertions, 2 deletions
diff --git a/library/std/src/io/util.rs b/library/std/src/io/util.rs index db845457c96..e43ce4cdb4b 100644 --- a/library/std/src/io/util.rs +++ b/library/std/src/io/util.rs @@ -4,7 +4,7 @@ mod tests; use crate::fmt; -use crate::io::{self, BufRead, Initializer, IoSlice, IoSliceMut, Read, Write}; +use crate::io::{self, BufRead, Initializer, IoSlice, IoSliceMut, Read, Seek, SeekFrom, Write}; /// A reader which is always at EOF. /// @@ -58,6 +58,21 @@ impl BufRead for Empty { fn consume(&mut self, _n: usize) {} } +#[stable(feature = "empty_seek", since = "1.51.0")] +impl Seek for Empty { + fn seek(&mut self, _pos: SeekFrom) -> io::Result<u64> { + Ok(0) + } + + fn stream_len(&mut self) -> io::Result<u64> { + Ok(0) + } + + fn stream_position(&mut self) -> io::Result<u64> { + Ok(0) + } +} + #[stable(feature = "std_debug", since = "1.16.0")] impl fmt::Debug for Empty { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/library/std/src/io/util/tests.rs b/library/std/src/io/util/tests.rs index 9450b1ee124..df34e27d136 100644 --- a/library/std/src/io/util/tests.rs +++ b/library/std/src/io/util/tests.rs @@ -1,5 +1,5 @@ use crate::io::prelude::*; -use crate::io::{copy, empty, repeat, sink, Empty, Repeat, Sink}; +use crate::io::{copy, empty, repeat, sink, Empty, Repeat, SeekFrom, Sink}; #[test] fn copy_copies() { @@ -30,6 +30,26 @@ fn empty_reads() { } #[test] +fn empty_seeks() { + let mut e = empty(); + assert!(matches!(e.seek(SeekFrom::Start(0)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::Start(1)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::Start(u64::MAX)), Ok(0))); + + assert!(matches!(e.seek(SeekFrom::End(i64::MIN)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::End(-1)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::End(0)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::End(1)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::End(i64::MAX)), Ok(0))); + + assert!(matches!(e.seek(SeekFrom::Current(i64::MIN)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::Current(-1)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::Current(0)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::Current(1)), Ok(0))); + assert!(matches!(e.seek(SeekFrom::Current(i64::MAX)), Ok(0))); +} + +#[test] fn repeat_repeats() { let mut r = repeat(4); let mut b = [0; 1024]; |
