1 #![warn(clippy::invalid_atomic_ordering)]
3 use std
::sync
::atomic
::{AtomicU16, AtomicU32, AtomicU64, AtomicU8, AtomicUsize, Ordering}
;
6 // `AtomicU8` test cases
7 let x
= AtomicU8
::new(0);
9 // Allowed load ordering modes
10 let _
= x
.load(Ordering
::Acquire
);
11 let _
= x
.load(Ordering
::SeqCst
);
12 let _
= x
.load(Ordering
::Relaxed
);
14 // Disallowed load ordering modes
15 let _
= x
.load(Ordering
::Release
);
16 let _
= x
.load(Ordering
::AcqRel
);
18 // Allowed store ordering modes
19 x
.store(1, Ordering
::Release
);
20 x
.store(1, Ordering
::SeqCst
);
21 x
.store(1, Ordering
::Relaxed
);
23 // Disallowed store ordering modes
24 x
.store(1, Ordering
::Acquire
);
25 x
.store(1, Ordering
::AcqRel
);
27 // `AtomicU16` test cases
28 let x
= AtomicU16
::new(0);
30 let _
= x
.load(Ordering
::Acquire
);
31 let _
= x
.load(Ordering
::SeqCst
);
32 let _
= x
.load(Ordering
::Relaxed
);
33 let _
= x
.load(Ordering
::Release
);
34 let _
= x
.load(Ordering
::AcqRel
);
36 x
.store(1, Ordering
::Release
);
37 x
.store(1, Ordering
::SeqCst
);
38 x
.store(1, Ordering
::Relaxed
);
39 x
.store(1, Ordering
::Acquire
);
40 x
.store(1, Ordering
::AcqRel
);
42 // `AtomicU32` test cases
43 let x
= AtomicU32
::new(0);
45 let _
= x
.load(Ordering
::Acquire
);
46 let _
= x
.load(Ordering
::SeqCst
);
47 let _
= x
.load(Ordering
::Relaxed
);
48 let _
= x
.load(Ordering
::Release
);
49 let _
= x
.load(Ordering
::AcqRel
);
51 x
.store(1, Ordering
::Release
);
52 x
.store(1, Ordering
::SeqCst
);
53 x
.store(1, Ordering
::Relaxed
);
54 x
.store(1, Ordering
::Acquire
);
55 x
.store(1, Ordering
::AcqRel
);
57 // `AtomicU64` test cases
58 let x
= AtomicU64
::new(0);
60 let _
= x
.load(Ordering
::Acquire
);
61 let _
= x
.load(Ordering
::SeqCst
);
62 let _
= x
.load(Ordering
::Relaxed
);
63 let _
= x
.load(Ordering
::Release
);
64 let _
= x
.load(Ordering
::AcqRel
);
66 x
.store(1, Ordering
::Release
);
67 x
.store(1, Ordering
::SeqCst
);
68 x
.store(1, Ordering
::Relaxed
);
69 x
.store(1, Ordering
::Acquire
);
70 x
.store(1, Ordering
::AcqRel
);
72 // `AtomicUsize` test cases
73 let x
= AtomicUsize
::new(0);
75 let _
= x
.load(Ordering
::Acquire
);
76 let _
= x
.load(Ordering
::SeqCst
);
77 let _
= x
.load(Ordering
::Relaxed
);
78 let _
= x
.load(Ordering
::Release
);
79 let _
= x
.load(Ordering
::AcqRel
);
81 x
.store(1, Ordering
::Release
);
82 x
.store(1, Ordering
::SeqCst
);
83 x
.store(1, Ordering
::Relaxed
);
84 x
.store(1, Ordering
::Acquire
);
85 x
.store(1, Ordering
::AcqRel
);