mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-13 06:43:52 +00:00
add simple runnableExamples for atomics (#16116)
This commit is contained in:
@@ -11,6 +11,46 @@
|
||||
##
|
||||
## Unstable API.
|
||||
|
||||
runnableExamples:
|
||||
# Atomic
|
||||
var loc: Atomic[int]
|
||||
loc.store(4)
|
||||
assert loc.load == 4
|
||||
loc.store(2)
|
||||
assert loc.load(moRelaxed) == 2
|
||||
loc.store(9)
|
||||
assert loc.load(moAcquire) == 9
|
||||
loc.store(0, moRelease)
|
||||
assert loc.load == 0
|
||||
|
||||
assert loc.exchange(7) == 0
|
||||
assert loc.load == 7
|
||||
|
||||
var expected = 7
|
||||
assert loc.compareExchange(expected, 5, moRelaxed, moRelaxed)
|
||||
assert expected == 7
|
||||
assert loc.load == 5
|
||||
|
||||
assert not loc.compareExchange(expected, 12, moRelaxed, moRelaxed)
|
||||
assert expected == 5
|
||||
assert loc.load == 5
|
||||
|
||||
assert loc.fetchAdd(1) == 5
|
||||
assert loc.fetchAdd(2) == 6
|
||||
assert loc.fetchSub(3) == 8
|
||||
|
||||
loc.atomicInc(1)
|
||||
assert loc.load == 6
|
||||
|
||||
# AtomicFlag
|
||||
var flag: AtomicFlag
|
||||
|
||||
assert not flag.testAndSet
|
||||
assert flag.testAndSet
|
||||
flag.clear(moRelaxed)
|
||||
assert not flag.testAndSet
|
||||
|
||||
|
||||
import macros
|
||||
|
||||
when defined(cpp) or defined(nimdoc):
|
||||
|
||||
Reference in New Issue
Block a user