#[path = "../../../os-partitions-view/src/lib.rs"] mod view; #[test] fn os_partitions_view_positive() { let partition = view::View::new(101, 1947, 2048).unwrap(); assert_eq!(partition.end_lba, 2048); assert_eq!(partition.translate(0, 1), Ok((101, 1))); assert_eq!(partition.translate(1946, 1), Ok((2047, 1))); assert_eq!(partition.translate(1945, 2), Ok((2046, 2))); let mut calls = 0; let mut last = None; let result = partition.read(1946, 1, |lba, count| { calls += 1; last = Some((lba, count)); Ok::<(), ()>(()) }); assert_eq!(result, Ok(())); assert_eq!(calls, 1); assert_eq!(last, Some((2047, 1))); } #[test] fn os_partitions_view_negative() { let partition = view::View::new(101, 100, 2048).unwrap(); let before = partition; let mut calls = 0; for (lba, count, expected) in [ (100, 1, view::Error::OutsidePartition), (99, 2, view::Error::OutsidePartition), (0, 0, view::Error::EmptyRead), (u64::MAX, 2, view::Error::Overflow), ] { let result = partition.read(lba, count, |_physical, _count| { calls += 1; Ok::<(), ()>(()) }); assert_eq!(result, Err(view::ReadError::View(expected))); assert_eq!(partition, before); } assert_eq!(calls, 0); assert_eq!(view::View::new(1, 0, 2048), Err(view::Error::EmptyPartition)); assert_eq!(view::View::new(2047, 2, 2048), Err(view::Error::OutsideDevice)); assert_eq!(view::View::new(u64::MAX, 2, 2048), Err(view::Error::Overflow)); assert_eq!(view::View::new(1, 1, 0), Err(view::Error::EmptyDevice)); }