|
| 1 | +use super::*; |
| 2 | + |
| 3 | +#[test] |
| 4 | +fn read_vectored_at() { |
| 5 | + let msg = b"preadv is working!"; |
| 6 | + let dir = crate::sys_common::io::test::tmpdir(); |
| 7 | + |
| 8 | + let filename = dir.join("preadv.txt"); |
| 9 | + { |
| 10 | + let mut file = fs::File::create(&filename).unwrap(); |
| 11 | + file.write_all(msg).unwrap(); |
| 12 | + } |
| 13 | + { |
| 14 | + let file = fs::File::open(&filename).unwrap(); |
| 15 | + let mut buf0 = [0; 4]; |
| 16 | + let mut buf1 = [0; 3]; |
| 17 | + |
| 18 | + let mut iovec = [io::IoSliceMut::new(&mut buf0), io::IoSliceMut::new(&mut buf1)]; |
| 19 | + |
| 20 | + let n = file.read_vectored_at(&mut iovec, 4).unwrap(); |
| 21 | + |
| 22 | + assert!(n == 4 || n == 7); |
| 23 | + assert_eq!(&buf0, b"dv i"); |
| 24 | + |
| 25 | + if n == 7 { |
| 26 | + assert_eq!(&buf1, b"s w"); |
| 27 | + } |
| 28 | + } |
| 29 | +} |
| 30 | + |
| 31 | +#[test] |
| 32 | +fn write_vectored_at() { |
| 33 | + let msg = b"pwritev is not working!"; |
| 34 | + let dir = crate::sys_common::io::test::tmpdir(); |
| 35 | + |
| 36 | + let filename = dir.join("preadv.txt"); |
| 37 | + { |
| 38 | + let mut file = fs::File::create(&filename).unwrap(); |
| 39 | + file.write_all(msg).unwrap(); |
| 40 | + } |
| 41 | + let expected = { |
| 42 | + let file = fs::File::options().write(true).open(&filename).unwrap(); |
| 43 | + let buf0 = b" "; |
| 44 | + let buf1 = b"great "; |
| 45 | + |
| 46 | + let iovec = [io::IoSlice::new(buf0), io::IoSlice::new(buf1)]; |
| 47 | + |
| 48 | + let n = file.write_vectored_at(&iovec, 11).unwrap(); |
| 49 | + |
| 50 | + assert!(n == 4 || n == 11); |
| 51 | + |
| 52 | + if n == 4 { b"pwritev is working!" } else { b"pwritev is great !" } |
| 53 | + }; |
| 54 | + |
| 55 | + let content = fs::read(&filename).unwrap(); |
| 56 | + assert_eq!(&content, expected); |
| 57 | +} |
0 commit comments