github.com/loov/combiner@v0.1.0/combine_test.go (about)

     1  package combiner_test
     2  
     3  import (
     4  	"sync"
     5  	"testing"
     6  
     7  	"github.com/loov/combiner"
     8  )
     9  
    10  type Nop struct{}
    11  
    12  func (n *Nop) Start()             {}
    13  func (n *Nop) Do(arg interface{}) {}
    14  func (n *Nop) Finish()            {}
    15  
    16  func BenchmarkSpinningNopUncontended(b *testing.B) {
    17  	var q combiner.Spinning
    18  	q.Init(&Nop{}, 256)
    19  	for i := 0; i < b.N; i++ {
    20  		q.Do(nil)
    21  	}
    22  }
    23  
    24  func BenchmarkSpinningNopContended(b *testing.B) {
    25  	var q combiner.Spinning
    26  	q.Init(&Nop{}, 256)
    27  	b.RunParallel(func(pb *testing.PB) {
    28  		for pb.Next() {
    29  			q.Do(nil)
    30  		}
    31  	})
    32  }
    33  func BenchmarkLockNopUncontended(b *testing.B) {
    34  	var mu sync.Mutex
    35  	for i := 0; i < b.N; i++ {
    36  		mu.Lock()
    37  		{
    38  			// intentionally empty section
    39  		}
    40  		mu.Unlock()
    41  	}
    42  }
    43  
    44  func BenchmarkLockNopContended(b *testing.B) {
    45  	var mu sync.Mutex
    46  	b.RunParallel(func(pb *testing.PB) {
    47  		for pb.Next() {
    48  			mu.Lock()
    49  			{
    50  				// intentionally empty section
    51  			}
    52  			mu.Unlock()
    53  		}
    54  	})
    55  }
    56  func BenchmarkParkingNopUncontended(b *testing.B) {
    57  	var q combiner.Parking
    58  	q.Init(&Nop{}, 256)
    59  	for i := 0; i < b.N; i++ {
    60  		q.Do(nil)
    61  	}
    62  }
    63  
    64  func BenchmarkParkingNopContended(b *testing.B) {
    65  	var q combiner.Parking
    66  	q.Init(&Nop{}, 256)
    67  	b.RunParallel(func(pb *testing.PB) {
    68  		for pb.Next() {
    69  			q.Do(nil)
    70  		}
    71  	})
    72  }