summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorflywind <43030857+xflywind@users.noreply.github.com>2020-11-25 02:19:03 +0800
committerGitHub <noreply@github.com>2020-11-24 19:19:03 +0100
commitd2c6ac4750ffc60631fee2170c7ee4a884210225 (patch)
treec9ebd49b739538eac6d95fd2672033162e1068a1 /lib/pure
parentcbc793b30b10b8e82af7313ac8cd438abf97f7d7 (diff)
downloadNim-d2c6ac4750ffc60631fee2170c7ee4a884210225.tar.gz
add simple runnableExamples for atomics (#16116)
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/concurrency/atomics.nim40
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):