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);