#[path = "../../../os-turkfs-allocation/src/lib.rs"] mod allocation; const METADATA: u64 = 0x1f; #[test] fn os_turkfs_allocation_bitmap_positive() { let mut bitmap = allocation::Bitmap::validate( 64, METADATA, u64::MAX & !(1u64 << 63)).unwrap(); assert_eq!(bitmap.counts(), allocation::Counts { reserved: 5, user: 58, free: 1}); assert_eq!(bitmap.allocate(), Ok(63)); assert_eq!(bitmap.allocated_bits(), u64::MAX); assert_eq!(bitmap.counts(), allocation::Counts { reserved: 5, user: 59, free: 0}); let full = bitmap; assert_eq!(bitmap.allocate(), Err(allocation::Error::NoSpace)); assert_eq!(bitmap, full); bitmap.release(63).unwrap(); assert_eq!(bitmap.counts().free, 1); } #[test] fn os_turkfs_allocation_bitmap_negative() { let malformed = u64::MAX & !(1u64 << 2); assert_eq!(allocation::Bitmap::validate(64, METADATA, malformed), Err(allocation::Error::ReservedFree)); assert_eq!(allocation::Bitmap::validate(63, METADATA, u64::MAX), Err(allocation::Error::BadBitmap)); let mut bitmap = allocation::Bitmap::validate(64, METADATA, METADATA).unwrap(); let before = bitmap; assert_eq!(bitmap.release(2), Err(allocation::Error::ReservedBlock)); assert_eq!(bitmap.release(64), Err(allocation::Error::OutOfBounds)); assert_eq!(bitmap.release(63), Err(allocation::Error::AlreadyFree)); assert_eq!(bitmap, before); assert_eq!(bitmap.allocate(), Ok(5)); assert_eq!(bitmap.counts(), allocation::Counts { reserved: 5, user: 1, free: 58}); }