Make double set_available false debug assert panic

This commit is contained in:
fakeshadow 2021-04-14 20:29:50 +08:00
parent 28dcd3b9da
commit 269bd24da9
1 changed files with 14 additions and 1 deletions

View File

@ -119,7 +119,11 @@ impl Availability {
if avail { if avail {
self.0[offset] |= 1 << idx as u128; self.0[offset] |= 1 << idx as u128;
} else { } else {
self.0[offset] ^= 1 << idx as u128; let shift = 1 << idx as u128;
debug_assert_ne!(self.0[offset] & shift, 0);
self.0[offset] ^= shift;
} }
} }
@ -519,6 +523,8 @@ mod test {
aval.set_available(idx, true); aval.set_available(idx, true);
assert!(aval.available()); assert!(aval.available());
aval.set_available(idx, true);
aval.set_available(idx, false); aval.set_available(idx, false);
assert!(!aval.available()); assert!(!aval.available());
} }
@ -559,6 +565,13 @@ mod test {
single(&mut aval, 512); single(&mut aval, 512);
} }
#[test]
#[should_panic]
fn double_set_unavailable() {
let mut aval = Availability::default();
aval.set_available(233, false);
}
#[test] #[test]
fn pin_point() { fn pin_point() {
let mut aval = Availability::default(); let mut aval = Availability::default();