Vendor things
This commit is contained in:
parent
5deceec006
commit
977e3c17e5
19434 changed files with 10682014 additions and 0 deletions
113
third-party/vendor/loom/tests/atomic_int.rs
vendored
Normal file
113
third-party/vendor/loom/tests/atomic_int.rs
vendored
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
#![deny(warnings, rust_2018_idioms)]
|
||||
|
||||
macro_rules! test_int {
|
||||
($name:ident, $int:ty, $atomic:ty) => {
|
||||
mod $name {
|
||||
use loom::sync::atomic::*;
|
||||
use std::sync::atomic::Ordering::SeqCst;
|
||||
|
||||
const NUM_A: u64 = 11641914933775430211;
|
||||
const NUM_B: u64 = 13209405719799650717;
|
||||
|
||||
#[test]
|
||||
fn xor() {
|
||||
loom::model(|| {
|
||||
let a: $int = NUM_A as $int;
|
||||
let b: $int = NUM_B as $int;
|
||||
|
||||
let atomic = <$atomic>::new(a);
|
||||
let prev = atomic.fetch_xor(b, SeqCst);
|
||||
|
||||
assert_eq!(a, prev, "prev did not match");
|
||||
assert_eq!(a ^ b, atomic.load(SeqCst), "load failed");
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn max() {
|
||||
loom::model(|| {
|
||||
let a: $int = NUM_A as $int;
|
||||
let b: $int = NUM_B as $int;
|
||||
|
||||
let atomic = <$atomic>::new(a);
|
||||
let prev = atomic.fetch_max(b, SeqCst);
|
||||
|
||||
assert_eq!(a, prev, "prev did not match");
|
||||
assert_eq!(a.max(b), atomic.load(SeqCst), "load failed");
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn min() {
|
||||
loom::model(|| {
|
||||
let a: $int = NUM_A as $int;
|
||||
let b: $int = NUM_B as $int;
|
||||
|
||||
let atomic = <$atomic>::new(a);
|
||||
let prev = atomic.fetch_min(b, SeqCst);
|
||||
|
||||
assert_eq!(a, prev, "prev did not match");
|
||||
assert_eq!(a.min(b), atomic.load(SeqCst), "load failed");
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn compare_exchange() {
|
||||
loom::model(|| {
|
||||
let a: $int = NUM_A as $int;
|
||||
let b: $int = NUM_B as $int;
|
||||
|
||||
let atomic = <$atomic>::new(a);
|
||||
assert_eq!(Err(a), atomic.compare_exchange(b, a, SeqCst, SeqCst));
|
||||
assert_eq!(Ok(a), atomic.compare_exchange(a, b, SeqCst, SeqCst));
|
||||
|
||||
assert_eq!(b, atomic.load(SeqCst));
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn compare_exchange_weak() {
|
||||
loom::model(|| {
|
||||
let a: $int = NUM_A as $int;
|
||||
let b: $int = NUM_B as $int;
|
||||
|
||||
let atomic = <$atomic>::new(a);
|
||||
assert_eq!(Err(a), atomic.compare_exchange_weak(b, a, SeqCst, SeqCst));
|
||||
assert_eq!(Ok(a), atomic.compare_exchange_weak(a, b, SeqCst, SeqCst));
|
||||
|
||||
assert_eq!(b, atomic.load(SeqCst));
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fetch_update() {
|
||||
loom::model(|| {
|
||||
let a: $int = NUM_A as $int;
|
||||
let b: $int = NUM_B as $int;
|
||||
|
||||
let atomic = <$atomic>::new(a);
|
||||
assert_eq!(Ok(a), atomic.fetch_update(SeqCst, SeqCst, |_| Some(b)));
|
||||
assert_eq!(Err(b), atomic.fetch_update(SeqCst, SeqCst, |_| None));
|
||||
assert_eq!(b, atomic.load(SeqCst));
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
test_int!(atomic_u8, u8, AtomicU8);
|
||||
test_int!(atomic_u16, u16, AtomicU16);
|
||||
test_int!(atomic_u32, u32, AtomicU32);
|
||||
test_int!(atomic_usize, usize, AtomicUsize);
|
||||
|
||||
test_int!(atomic_i8, i8, AtomicI8);
|
||||
test_int!(atomic_i16, i16, AtomicI16);
|
||||
test_int!(atomic_i32, i32, AtomicI32);
|
||||
test_int!(atomic_isize, isize, AtomicIsize);
|
||||
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
test_int!(atomic_u64, u64, AtomicU64);
|
||||
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
test_int!(atomic_i64, i64, AtomicI64);
|
||||
Loading…
Add table
Add a link
Reference in a new issue