diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-02-19 02:49:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-19 02:49:07 +0100 |
| commit | f8b61d852c2de4632278322d6d00a7f066277e14 (patch) | |
| tree | 45cef7fc4d276ef463b9e9d5c06628e38bdf1a2d | |
| parent | c821063a53a6d236ed79de14e721d7c8869f63c2 (diff) | |
| parent | 4fa9e08e3dc10acdb322490d5ac24e937c0f43f5 (diff) | |
| download | rust-f8b61d852c2de4632278322d6d00a7f066277e14.tar.gz rust-f8b61d852c2de4632278322d6d00a7f066277e14.zip | |
Rollup merge of #82093 - bjorn3:more_atomic_tests, r=kennytm
Add tests for Atomic*::fetch_{min,max}
This ensures that all atomic operations except for fences are tested. This has been useful to test my work on using atomic instructions for atomic operations in cg_clif instead of a global lock.
| -rw-r--r-- | library/core/tests/atomic.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/library/core/tests/atomic.rs b/library/core/tests/atomic.rs index 2d1e4496aee..b735957666f 100644 --- a/library/core/tests/atomic.rs +++ b/library/core/tests/atomic.rs @@ -60,6 +60,26 @@ fn uint_xor() { } #[test] +#[cfg(any(not(target_arch = "arm"), target_os = "linux"))] // Missing intrinsic in compiler-builtins +fn uint_min() { + let x = AtomicUsize::new(0xf731); + assert_eq!(x.fetch_min(0x137f, SeqCst), 0xf731); + assert_eq!(x.load(SeqCst), 0x137f); + assert_eq!(x.fetch_min(0xf731, SeqCst), 0x137f); + assert_eq!(x.load(SeqCst), 0x137f); +} + +#[test] +#[cfg(any(not(target_arch = "arm"), target_os = "linux"))] // Missing intrinsic in compiler-builtins +fn uint_max() { + let x = AtomicUsize::new(0x137f); + assert_eq!(x.fetch_max(0xf731, SeqCst), 0x137f); + assert_eq!(x.load(SeqCst), 0xf731); + assert_eq!(x.fetch_max(0x137f, SeqCst), 0xf731); + assert_eq!(x.load(SeqCst), 0xf731); +} + +#[test] fn int_and() { let x = AtomicIsize::new(0xf731); assert_eq!(x.fetch_and(0x137f, SeqCst), 0xf731); @@ -87,6 +107,26 @@ fn int_xor() { assert_eq!(x.load(SeqCst), 0xf731 ^ 0x137f); } +#[test] +#[cfg(any(not(target_arch = "arm"), target_os = "linux"))] // Missing intrinsic in compiler-builtins +fn int_min() { + let x = AtomicIsize::new(0xf731); + assert_eq!(x.fetch_min(0x137f, SeqCst), 0xf731); + assert_eq!(x.load(SeqCst), 0x137f); + assert_eq!(x.fetch_min(0xf731, SeqCst), 0x137f); + assert_eq!(x.load(SeqCst), 0x137f); +} + +#[test] +#[cfg(any(not(target_arch = "arm"), target_os = "linux"))] // Missing intrinsic in compiler-builtins +fn int_max() { + let x = AtomicIsize::new(0x137f); + assert_eq!(x.fetch_max(0xf731, SeqCst), 0x137f); + assert_eq!(x.load(SeqCst), 0xf731); + assert_eq!(x.fetch_max(0x137f, SeqCst), 0xf731); + assert_eq!(x.load(SeqCst), 0xf731); +} + static S_FALSE: AtomicBool = AtomicBool::new(false); static S_TRUE: AtomicBool = AtomicBool::new(true); static S_INT: AtomicIsize = AtomicIsize::new(0); |
