2 use std::sync::atomic::{AtomicU16, AtomicU32, AtomicU64, AtomicU8, AtomicUsize, Ordering};
5 // `AtomicU8` test cases
6 let x = AtomicU8::new(0);
8 // Allowed load ordering modes
9 let _ = x.load(Ordering::Acquire);
10 let _ = x.load(Ordering::SeqCst);
11 let _ = x.load(Ordering::Relaxed);
13 // Allowed store ordering modes
14 x.store(1, Ordering::Release);
15 x.store(1, Ordering::SeqCst);
16 x.store(1, Ordering::Relaxed);
18 // Disallowed load ordering modes
19 let _ = x.load(Ordering::Release);
20 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
21 let _ = x.load(Ordering::AcqRel);
22 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
24 // Disallowed store ordering modes
25 x.store(1, Ordering::Acquire);
26 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
27 x.store(1, Ordering::AcqRel);
28 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
30 // `AtomicU16` test cases
31 let x = AtomicU16::new(0);
33 // Allowed load ordering modes
34 let _ = x.load(Ordering::Acquire);
35 let _ = x.load(Ordering::SeqCst);
36 let _ = x.load(Ordering::Relaxed);
38 // Allowed store ordering modes
39 x.store(1, Ordering::Release);
40 x.store(1, Ordering::SeqCst);
41 x.store(1, Ordering::Relaxed);
43 // Disallowed load ordering modes
44 let _ = x.load(Ordering::Release);
45 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
46 let _ = x.load(Ordering::AcqRel);
47 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
49 // Disallowed store ordering modes
50 x.store(1, Ordering::Acquire);
51 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
52 x.store(1, Ordering::AcqRel);
53 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
55 // `AtomicU32` test cases
56 let x = AtomicU32::new(0);
58 // Allowed load ordering modes
59 let _ = x.load(Ordering::Acquire);
60 let _ = x.load(Ordering::SeqCst);
61 let _ = x.load(Ordering::Relaxed);
63 // Allowed store ordering modes
64 x.store(1, Ordering::Release);
65 x.store(1, Ordering::SeqCst);
66 x.store(1, Ordering::Relaxed);
68 // Disallowed load ordering modes
69 let _ = x.load(Ordering::Release);
70 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
71 let _ = x.load(Ordering::AcqRel);
72 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
74 // Disallowed store ordering modes
75 x.store(1, Ordering::Acquire);
76 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
77 x.store(1, Ordering::AcqRel);
78 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
80 // `AtomicU64` test cases
81 let x = AtomicU64::new(0);
83 // Allowed load ordering modes
84 let _ = x.load(Ordering::Acquire);
85 let _ = x.load(Ordering::SeqCst);
86 let _ = x.load(Ordering::Relaxed);
88 // Allowed store ordering modes
89 x.store(1, Ordering::Release);
90 x.store(1, Ordering::SeqCst);
91 x.store(1, Ordering::Relaxed);
93 // Disallowed load ordering modes
94 let _ = x.load(Ordering::Release);
95 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
96 let _ = x.load(Ordering::AcqRel);
97 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
99 // Disallowed store ordering modes
100 x.store(1, Ordering::Acquire);
101 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
102 x.store(1, Ordering::AcqRel);
103 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
105 // `AtomicUsize` test cases
106 let x = AtomicUsize::new(0);
108 // Allowed load ordering modes
109 let _ = x.load(Ordering::Acquire);
110 let _ = x.load(Ordering::SeqCst);
111 let _ = x.load(Ordering::Relaxed);
113 // Allowed store ordering modes
114 x.store(1, Ordering::Release);
115 x.store(1, Ordering::SeqCst);
116 x.store(1, Ordering::Relaxed);
118 // Disallowed load ordering modes
119 let _ = x.load(Ordering::Release);
120 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
121 let _ = x.load(Ordering::AcqRel);
122 //~^ ERROR atomic loads cannot have `Release` or `AcqRel` ordering
124 // Disallowed store ordering modes
125 x.store(1, Ordering::Acquire);
126 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering
127 x.store(1, Ordering::AcqRel);
128 //~^ ERROR atomic stores cannot have `Acquire` or `AcqRel` ordering