diff options
author | flywind <43030857+xflywind@users.noreply.github.com> | 2020-11-25 02:19:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-24 19:19:03 +0100 |
commit | d2c6ac4750ffc60631fee2170c7ee4a884210225 (patch) | |
tree | c9ebd49b739538eac6d95fd2672033162e1068a1 /lib/pure | |
parent | cbc793b30b10b8e82af7313ac8cd438abf97f7d7 (diff) | |
download | Nim-d2c6ac4750ffc60631fee2170c7ee4a884210225.tar.gz |
add simple runnableExamples for atomics (#16116)
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/concurrency/atomics.nim | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/pure/concurrency/atomics.nim b/lib/pure/concurrency/atomics.nim index dc575c6c0..895944177 100644 --- a/lib/pure/concurrency/atomics.nim +++ b/lib/pure/concurrency/atomics.nim @@ -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): |