aboutsummaryrefslogtreecommitdiff
path: root/tests/stm.go
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-01-23 09:17:46 -0300
committerEuAndreh <eu@euandre.org>2025-01-23 09:17:46 -0300
commit08f74a09ebe0759d373019b4693df69c082367d0 (patch)
treef579b94d3e8c8527ab41b795e5399580d2596dcb /tests/stm.go
parentsrc/stm.go: Rename AtomicGet => Deref and AtomicModify => Swap (diff)
downloadstm-08f74a09ebe0759d373019b4693df69c082367d0.tar.gz
stm-08f74a09ebe0759d373019b4693df69c082367d0.tar.xz
tests/stm.go: Turn example into functional test
Diffstat (limited to 'tests/stm.go')
-rw-r--r--tests/stm.go72
1 files changed, 0 insertions, 72 deletions
diff --git a/tests/stm.go b/tests/stm.go
index ab05d5c..49fcd25 100644
--- a/tests/stm.go
+++ b/tests/stm.go
@@ -226,78 +226,6 @@ func BenchmarkPingPong(b *testing.B) {
parallelPingPongs(b, 1)
}
-func Example() {
- // create a shared variable
- n := NewVar(3)
-
- // read a variable
- var v int
- Atomically(VoidOperation(func(tx *Tx) {
- v = n.Get(tx)
- }))
- // or:
- v = Deref(n)
- _ = v
-
- // write to a variable
- Atomically(VoidOperation(func(tx *Tx) {
- n.Set(tx, 12)
- }))
- // or:
- AtomicSet(n, 12)
-
- // update a variable
- Atomically(VoidOperation(func(tx *Tx) {
- cur := n.Get(tx)
- n.Set(tx, cur-1)
- }))
-
- // block until a condition is met
- Atomically(VoidOperation(func(tx *Tx) {
- cur := n.Get(tx)
- if cur != 0 {
- tx.Retry()
- }
- n.Set(tx, 10)
- }))
- // or:
- Atomically(VoidOperation(func(tx *Tx) {
- cur := n.Get(tx)
- tx.Assert(cur == 0)
- n.Set(tx, 10)
- }))
-
- // select among multiple (potentially blocking) transactions
- Atomically(Select(
- // this function blocks forever, so it will be skipped
- VoidOperation(func(tx *Tx) { tx.Retry() }),
-
- // this function will always succeed without blocking
- VoidOperation(func(tx *Tx) { n.Set(tx, 10) }),
-
- // this function will never run, because the previous
- // function succeeded
- VoidOperation(func(tx *Tx) { n.Set(tx, 11) }),
- ))
-
- // since Select is a normal transaction, if the entire select retries
- // (blocks), it will be retried as a whole:
- x := 0
- Atomically(Select(
- // this function will run twice, and succeed the second time
- VoidOperation(func(tx *Tx) { tx.Assert(x == 1) }),
-
- // this function will run once
- VoidOperation(func(tx *Tx) {
- x = 1
- tx.Retry()
- }),
- ))
- // But wait! Transactions are only retried when one of the Vars they read is
- // updated. Since x isn't a stm Var, this code will actually block forever --
- // but you get the idea.
-}
-
const maxTokens = 25
func BenchmarkThunderingHerdCondVar(b *testing.B) {