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.
|
## 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
|
import macros
|
||||||
|
|
||||||
when defined(cpp) or defined(nimdoc):
|
when defined(cpp) or defined(nimdoc):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue