#[path = "../../../os-block-geometry/src/lib.rs"] mod block_geometry; use block_geometry::{Error, Geometry, SECTOR_BYTES}; #[test] fn os_block_io_geometry_first_and_last() { let geometry = Geometry::new(2048).unwrap(); assert_eq!(geometry.capacity_bytes, 2048 * SECTOR_BYTES); let first = geometry.read_span(0, 1).unwrap(); assert_eq!((first.first_byte, first.end_byte), (0, 512)); let last = geometry.read_span(2047, 1).unwrap(); assert_eq!((last.first_byte, last.end_byte), (2047 * SECTOR_BYTES, 2048 * SECTOR_BYTES)); assert_eq!(geometry.read_span(2046, 2).unwrap().end_byte, geometry.capacity_bytes); } #[test] fn os_block_io_geometry_overflow_and_outside() { assert_eq!(Geometry::new(0), Err(Error::EmptyDevice)); assert_eq!(Geometry::new(u64::MAX), Err(Error::Overflow)); let geometry = Geometry::new(2048).unwrap(); assert_eq!(geometry.read_span(0, 0), Err(Error::ZeroLength)); assert_eq!(geometry.read_span(2048, 1), Err(Error::OutsideCapacity)); assert_eq!(geometry.read_span(2047, 2), Err(Error::OutsideCapacity)); assert_eq!(geometry.read_span(u64::MAX, 2), Err(Error::Overflow)); assert_eq!(geometry, Geometry::new(2048).unwrap()); }