add simple runnableExamples for atomics (#16116)
This commit is contained in:
parent
cbc793b30b
commit
d2c6ac4750
1 changed files with 40 additions and 0 deletions
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue