bufread_assert_stream_position/
bufread_assert_stream_position.rs1use io_wrapper_statistics::{IOStatWrapper, IopInfoPair};
2
3use std::fs::File;
4use std::io::{Read, Seek, BufReader};
5
6fn main() {
7 let file_obj = File::open("Cargo.toml").unwrap();
8 let mut instrumented_raw_file = IOStatWrapper::<_, Vec<IopInfoPair>>::new(file_obj, 0);
9 let buffered_io = BufReader::new(&mut instrumented_raw_file);
10 let mut instrumented_buf_file = IOStatWrapper::<_, Vec<IopInfoPair>>::new(buffered_io, 0);
11
12 let mut xor_result: u8 = 0x00;
14 let mut read_buf: [u8; 1] = [0x00; 1];
15 loop {
16 let bytes_read = instrumented_buf_file.read(&mut read_buf).unwrap();
17 if bytes_read == 0 {
18 break;
19 }
20 xor_result ^= read_buf[0];
21 assert_eq!(instrumented_buf_file.seek_pos(),
22 instrumented_buf_file.stream_position().unwrap());
23 }
24 println!("XOR of all bytes in Cargo.toml is {:#x}", xor_result);
25
26 println!("Buffered read was called successfully {} times",
28 instrumented_buf_file.read_call_counter().success_ctr());
29 println!("Buffered seek was called successfully {} times",
30 instrumented_buf_file.seek_call_counter().success_ctr());
31 println!("Inner read was called successfully {} times",
32 instrumented_raw_file.read_call_counter().success_ctr());
33 println!("Inner seek was called successfully {} times",
34 instrumented_raw_file.seek_call_counter().success_ctr());
35}