use turkos_os_user_runtime_handle::{Fault, Inventory, Table}; #[test] fn os_user_api_ownership_positive() { let table = Table::<2>::new(); let owner = table.claim(0xabc).unwrap(); assert_eq!(table.inventory(), Inventory { live: 1, claims: 1, close_attempts: 0, closes: 0, }); let moved = owner; assert_eq!(moved.raw(), 0xabc); drop(moved); assert_eq!(table.inventory(), Inventory { live: 0, claims: 1, close_attempts: 1, closes: 1, }); } #[test] fn os_user_api_ownership_negative() { let table = Table::<2>::new(); let owner = table.claim(0xabc).unwrap(); assert!(matches!(table.claim(0xabc), Err(Fault::Duplicate))); assert_eq!(table.inventory(), Inventory { live: 1, claims: 1, close_attempts: 0, closes: 0, }); assert_eq!(owner.close(), Ok(())); assert_eq!(table.close_raw(0xabc), Err(Fault::Stale)); assert_eq!(table.inventory(), Inventory { live: 0, claims: 1, close_attempts: 2, closes: 1, }); } #[test] fn invalid_and_full_claims_leave_inventory_stable() { let table = Table::<1>::new(); assert!(matches!(table.claim(0), Err(Fault::Invalid))); let owner = table.claim(9).unwrap(); assert!(matches!(table.claim(10), Err(Fault::Full))); assert_eq!(table.inventory(), Inventory { live: 1, claims: 1, close_attempts: 0, closes: 0, }); drop(owner); assert_eq!(table.inventory().live, 0); }