Nothing to see here, move along meow
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 2.6 kB View raw
1use lancer_core::cap_table::*; 2use lancer_core::object_tag::ObjectTag; 3use lancer_core::types::*; 4use proptest::prelude::*; 5 6fn gen0() -> Generation { 7 Generation::new(0) 8} 9 10fn make_cap(tag: ObjectTag, id: u64, rights: Rights) -> CapRef { 11 CapRef::new(tag, ObjPhys::new(id), rights, gen0()) 12} 13 14#[test] 15fn rights_contains_subset() { 16 let all = Rights::ALL; 17 assert!(all.contains(Rights::READ)); 18 assert!(all.contains(Rights::WRITE)); 19 assert!(all.contains(Rights::GRANT)); 20 assert!(all.contains(Rights::REVOKE)); 21 assert!(all.contains(Rights::READ | Rights::WRITE)); 22} 23 24#[test] 25fn rights_not_contains_superset() { 26 let read_only = Rights::READ; 27 assert!(!read_only.contains(Rights::WRITE)); 28 assert!(!read_only.contains(Rights::ALL)); 29} 30 31#[test] 32fn rights_bitor_combines() { 33 let combined = Rights::READ | Rights::WRITE; 34 assert!(combined.contains(Rights::READ)); 35 assert!(combined.contains(Rights::WRITE)); 36 assert!(!combined.contains(Rights::GRANT)); 37} 38 39#[test] 40fn rights_bitand_intersects() { 41 let a = Rights::READ | Rights::WRITE; 42 let b = Rights::WRITE | Rights::GRANT; 43 let intersection = a & b; 44 assert!(intersection.contains(Rights::WRITE)); 45 assert!(!intersection.contains(Rights::READ)); 46 assert!(!intersection.contains(Rights::GRANT)); 47} 48 49#[test] 50fn rights_not_inverts() { 51 let r = Rights::READ; 52 let inverted = !r; 53 assert!(!inverted.contains(Rights::READ)); 54 assert!(inverted.contains(Rights::WRITE)); 55 assert!(inverted.contains(Rights::GRANT)); 56 assert!(inverted.contains(Rights::REVOKE)); 57} 58 59#[test] 60fn rights_from_bits_masks_to_all() { 61 let r = Rights::from_bits(0xFFFF); 62 assert_eq!(r.bits(), Rights::ALL.bits()); 63} 64 65#[test] 66fn rights_none_contains_nothing() { 67 assert!(!Rights::NONE.contains(Rights::READ)); 68 assert!(!Rights::NONE.contains(Rights::WRITE)); 69 assert!(!Rights::NONE.contains(Rights::GRANT)); 70 assert!(!Rights::NONE.contains(Rights::REVOKE)); 71 assert!(Rights::NONE.contains(Rights::NONE)); 72} 73 74proptest! { 75 #[test] 76 fn rights_bitor_commutative(a in 0u16..16, b in 0u16..16) { 77 let ra = Rights::from_bits(a); 78 let rb = Rights::from_bits(b); 79 prop_assert_eq!((ra | rb).bits(), (rb | ra).bits()); 80 } 81} 82 83#[test] 84fn with_rights_attenuates() { 85 let cap = make_cap(ObjectTag::Endpoint, 0, Rights::ALL); 86 let attenuated = cap.with_rights(Rights::READ); 87 assert!(attenuated.rights().contains(Rights::READ)); 88 assert!(!attenuated.rights().contains(Rights::WRITE)); 89 assert_eq!(attenuated.tag(), ObjectTag::Endpoint); 90 assert_eq!(attenuated.phys(), cap.phys()); 91}