aboutsummaryrefslogtreecommitdiff
path: root/stm_test.go
diff options
context:
space:
mode:
authorMatt Joiner <anacrolix@gmail.com>2019-10-23 15:33:39 +1100
committerMatt Joiner <anacrolix@gmail.com>2019-10-23 15:33:39 +1100
commit2ed906ee34bd63a42148ead1f7c5023be920e627 (patch)
tree1fea77fe7ce056ed36eef4bbb4e1c0bc3ab28693 /stm_test.go
parentMake the santa example a cmd (diff)
downloadstm-2ed906ee34bd63a42148ead1f7c5023be920e627.tar.gz
stm-2ed906ee34bd63a42148ead1f7c5023be920e627.tar.xz
Put benchmarks in their own file
Diffstat (limited to 'stm_test.go')
-rw-r--r--stm_test.go122
1 files changed, 0 insertions, 122 deletions
diff --git a/stm_test.go b/stm_test.go
index 1b1b737..233dff8 100644
--- a/stm_test.go
+++ b/stm_test.go
@@ -1,7 +1,6 @@
package stm
import (
- "sync"
"testing"
"time"
)
@@ -217,124 +216,3 @@ func TestAtomicSetRetry(t *testing.T) {
t.Fatal("AtomicSet did not wake up a waiting transaction")
}
}
-
-func BenchmarkAtomicGet(b *testing.B) {
- x := NewVar(0)
- for i := 0; i < b.N; i++ {
- AtomicGet(x)
- }
-}
-
-func BenchmarkAtomicSet(b *testing.B) {
- x := NewVar(0)
- for i := 0; i < b.N; i++ {
- AtomicSet(x, 0)
- }
-}
-
-func BenchmarkIncrementSTM(b *testing.B) {
- for i := 0; i < b.N; i++ {
- // spawn 1000 goroutines that each increment x by 1
- x := NewVar(0)
- for i := 0; i < 1000; i++ {
- go Atomically(func(tx *Tx) {
- cur := tx.Get(x).(int)
- tx.Set(x, cur+1)
- })
- }
- // wait for x to reach 1000
- Atomically(func(tx *Tx) {
- tx.Assert(tx.Get(x).(int) == 1000)
- })
- }
-}
-
-func BenchmarkIncrementMutex(b *testing.B) {
- for i := 0; i < b.N; i++ {
- var mu sync.Mutex
- x := 0
- for i := 0; i < 1000; i++ {
- go func() {
- mu.Lock()
- x++
- mu.Unlock()
- }()
- }
- for {
- mu.Lock()
- read := x
- mu.Unlock()
- if read == 1000 {
- break
- }
- }
- }
-}
-
-func BenchmarkIncrementChannel(b *testing.B) {
- for i := 0; i < b.N; i++ {
- c := make(chan int, 1)
- c <- 0
- for i := 0; i < 1000; i++ {
- go func() {
- c <- 1 + <-c
- }()
- }
- for {
- read := <-c
- if read == 1000 {
- break
- }
- c <- read
- }
- }
-}
-
-func BenchmarkReadVarSTM(b *testing.B) {
- for i := 0; i < b.N; i++ {
- var wg sync.WaitGroup
- wg.Add(1000)
- x := NewVar(0)
- for i := 0; i < 1000; i++ {
- go func() {
- AtomicGet(x)
- wg.Done()
- }()
- }
- wg.Wait()
- }
-}
-
-func BenchmarkReadVarMutex(b *testing.B) {
- for i := 0; i < b.N; i++ {
- var mu sync.Mutex
- var wg sync.WaitGroup
- wg.Add(1000)
- x := 0
- for i := 0; i < 1000; i++ {
- go func() {
- mu.Lock()
- _ = x
- mu.Unlock()
- wg.Done()
- }()
- }
- wg.Wait()
- }
-}
-
-func BenchmarkReadVarChannel(b *testing.B) {
- for i := 0; i < b.N; i++ {
- var wg sync.WaitGroup
- wg.Add(1000)
- c := make(chan int)
- close(c)
- for i := 0; i < 1000; i++ {
- go func() {
- <-c
- wg.Done()
- }()
- }
- wg.Wait()
- }
-}