add simple runnableExamples for atomics (#16116)

This commit is contained in:
flywind
2020-11-25 02:19:03 +08:00
committed by GitHub
parent cbc793b30b
commit d2c6ac4750

View File

@@ -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):