| 3853 | } |
| 3854 | |
| 3855 | fn seek_data_common(direct: bool) { |
| 3856 | with_default_file(0x30000, direct, |mut file| { |
| 3857 | // seek_data at or after the end of the file should return None |
| 3858 | assert_eq!(file.seek_data(0x10000).unwrap(), None); |
| 3859 | assert_eq!(seek_cur(&mut file), 0); |
| 3860 | assert_eq!(file.seek_data(0x10001).unwrap(), None); |
| 3861 | assert_eq!(seek_cur(&mut file), 0); |
| 3862 | |
| 3863 | // Write some data to [0x10000, 0x20000) |
| 3864 | let b = [0x55u8; 0x10000]; |
| 3865 | file.seek(SeekFrom::Start(0x10000)).unwrap(); |
| 3866 | file.write_all(&b).unwrap(); |
| 3867 | assert_eq!(file.seek_data(0).unwrap(), Some(0x10000)); |
| 3868 | assert_eq!(seek_cur(&mut file), 0x10000); |
| 3869 | |
| 3870 | // seek_data within data should return the same offset |
| 3871 | assert_eq!(file.seek_data(0x10000).unwrap(), Some(0x10000)); |
| 3872 | assert_eq!(seek_cur(&mut file), 0x10000); |
| 3873 | assert_eq!(file.seek_data(0x10001).unwrap(), Some(0x10001)); |
| 3874 | assert_eq!(seek_cur(&mut file), 0x10001); |
| 3875 | assert_eq!(file.seek_data(0x1FFFF).unwrap(), Some(0x1FFFF)); |
| 3876 | assert_eq!(seek_cur(&mut file), 0x1FFFF); |
| 3877 | |
| 3878 | assert_eq!(file.seek_data(0).unwrap(), Some(0x10000)); |
| 3879 | assert_eq!(seek_cur(&mut file), 0x10000); |
| 3880 | assert_eq!(file.seek_data(0x1FFFF).unwrap(), Some(0x1FFFF)); |
| 3881 | assert_eq!(seek_cur(&mut file), 0x1FFFF); |
| 3882 | assert_eq!(file.seek_data(0x20000).unwrap(), None); |
| 3883 | assert_eq!(seek_cur(&mut file), 0x1FFFF); |
| 3884 | }); |
| 3885 | } |
| 3886 | |
| 3887 | #[test] |
| 3888 | fn seek_hole() { |